CentOS 7 编译安装 MySQL-5.7.9

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云防火墙,500元 1000GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: CentOS 7 编译安装 MySQL-5.7.9本文主要来自https://typecodes.com/web/centos7compilemysql.

CentOS 7 编译安装 MySQL-5.7.9

本文主要来自https://typecodes.com/web/centos7compilemysql.html

实验环境

  1. VMware 12中最小化安装的CentOS 7 x64
  2. CentOS 7 配置为 2cpu 2G内存(原来分配1G,但是在编译MySQL到54%时卡住)

配置防火墙和开放端口

以下操作在root用户中操作

[root@localhost ~]#systemctl stop firewalld.service #关闭防火墙
[root@localhost ~]#systemctl disable firewalld.service #禁止防火墙开机启动
[root@localhost ~]#vi /etc/selinux/config #关闭selinux
修改为SELINUX=disabled
[root@localhost ~]#setenforce 0 #使配置生效


[root@localhost ~]#yum install -y iptables-services #安装防火墙规则
[root@localhost ~]#vi /etc/sysconfig/iptables #配置防火墙规则

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT #添加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT #添加
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

esc键,然后输入命令 :wq! 保存修改
[root@localhost ~]#systemctl restart iptables.service #重启防火墙使配置生效
[root@localhost ~]#systemctl enable iptables.service #设置防火墙开机启动

创建mysql用户和用户组

首先创建一个名为mysql且没有登录权限的用户和一个名为mysql的用户组

[root@localhost mysql]# groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql

下载编译MySQL5.7.9时需要的工具

######CMake编译工具
[root@localhost ~]# wget -c http://git.typecodes.com/libs/ccpp/cmake-3.2.1.tar.gz
[root@localhost ~]# tar -zxf cmake-3.2.1.tar.gz && cd cmake-3.2.1
[root@localhost cmake-3.2.1]# ./configure
[root@localhost cmake-3.2.1]# make && make install [默认安装路径是/usr/local/bin]
[root@localhost cmake-3.2.1]# cmake –version [查看cmake版本]
cmake version 3.2.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
[root@localhost cmake-3.2.1]# cd ~ && rm -rf cmake-3.2.1*

######Ncurses:提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。
[root@localhost ~]# yum -y install ncurses-devel

#######bison:GNU分析器生成器
[root@localhost ~]# wget -c http://git.typecodes.com/libs/ccpp/bison-3.0.tar.gz
[root@localhost ~]# tar -zxf bison-3.0.tar.gz && cd bison-3.0/ && ./configure
[root@localhost bison-3.0]# make && make install
[root@localhost bison-3.0]# cd ~ && rm -rf bison-3.0*

#######Boost库:一个开源可移植的C++库,是C++标准化进程的开发引擎之一
下载 boost_1_59_0并上传到/root/目录(一定要这个版本以上,尝试多次安装1.57.0版本导致后面安装mysql5.7.9的时候会报找不到这个库的错误)
[root@typecodes ~]# tar -zxf boost_1_59_0.tar.gz && cd boost_1_59_0/
[root@localhost boost_1_59_0]# ./bootstrap.sh
[root@localhost boost_1_59_0]# ./b2 stage threading=multi link=shared
[root@localhost boost_1_59_0]# ./b2 install threading=multi link=shared
这里会报如下错误:

common.copy stage/lib/libboost_wave.so.1.59.0
ln-UNIX stage/lib/libboost_wave.so
...failed updating 29 targets...
...skipped 6 targets...
...updated 592 targets...

这个命令等编译安装完mysql后再删除
[root@localhost boost_1_59_0]# cd ~ && rm -rf boost_1_59_0*

开始MySQL-5.7.9编译安装前配置

######使用cmake命令,开始编译MySQL5.7.9
[root@localhost mysql]# tar -zxf mysql-5.7.9.tar.gz && cd mysql-5.7.9
[root@localhost mysql-5.7.9]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \              [MySQL安装的根目录]
-DMYSQL_DATADIR=/mydata/mysql/data  \                   [MySQL数据库文件存放目录]
-DSYSCONFDIR=/etc \                                     [MySQL配置文件所在目录]
-DMYSQL_USER=mysql \                                    [MySQL用户名]      
-DWITH_MYISAM_STORAGE_ENGINE=1 \                        [MySQL的数据库引擎]
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                      [MySQL的数据库引擎]
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \                       [MySQL的数据库引擎]
-DWITH_MEMORY_STORAGE_ENGINE=1 \                        [MySQL的数据库引擎]
-DWITH_READLINE=1 \                                     [MySQL的readline library]
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \           [MySQL的通讯目录]
-DMYSQL_TCP_PORT=3306 \                                 [MySQL的监听端口]
-DENABLED_LOCAL_INFILE=1 \                              [启用加载本地数据]
-DENABLE_DOWNLOADS=1 \                                  [编译时允许自主下载相关文件]
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DEXTRA_CHARSETS=all \                                  [使MySQL支持所有的扩展字符]
-DDEFAULT_CHARSET=utf8 \                                [设置默认字符集为utf8]
-DDEFAULT_COLLATION=utf8_general_ci \                   [设置默认字符校对]
-DWITH_DEBUG=0 \                                        [禁用调试模式]
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL:STRING=bundled \                             [通讯时支持ssl协议]
-DWITH_ZLIB:STRING=bundled                              [允许使用zlib library] \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/root/mysql/boost_1_59_0

执行上面配置命令后如下图所示:
配置MySQL-5.7.9

开始编译安装MySQL-5.7.9

开始make命令编译时,比较耗内存和cpu,开始博主分配给虚拟机是双核1G内存,编译到54%开始卡住,无奈中断把内存改为2G就顺利编译,耗时多个小时。如果主机内存在1G并且没有设置linux交换空间,不建议编译安装MySQL5.7.9

[root@localhost mysql-5.7.9]# make && make install

执行完make命令如下:
安装MySQL-5.7.9 1
安装MySQL-5.7.9 2
安装MySQL-5.7.9 3
安装MySQL-5.7.9 4
编译完成
安装MySQL-5.7.9 5
安装完成,终于成功
安装MySQL-5.7.9 6

查看编译成功后的MySQL目录

使用命令查看MySQL的安装目录/usr/local/mysql/下面是否生成了相关目录文件(最重要的当然是bin、sbin和lib目录)。如果lib目录下面没有生成如图所示的.so动态库文件和.a静态库文件,那么说明安装不成功(即使成功了也可能会导致php进程无法找到mysql的相关库文件)。
MySQL 安装目录

设置MySQL的配置文件my.cnf

先把编译生成的my.cnf文件备份,再添加自己配置的my.cnf

[root@localhost ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@localhost ~]# vi /etc/my.cnf
添加如下配置:(配置来自:https://github.com/vfhky/mylnmp/blob/master/MySql/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[client]
port=3306
socket=/var/run/mysql/mysql.sock

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
user = mysql
basedir = /usr/local/mysql
datadir = /mydata/mysql/data
port=3306
server-id = 1
socket=/var/run/mysql/mysql.sock

character-set-server = utf8
log-error = /var/log/mysql/error.log
pid-file = /var/log/mysql/mysql.pid
general_log = 1
skip-name-resolve
#skip-networking
back_log = 300

max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128 
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M

read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 28M
key_buffer_size = 4M

thread_cache_size = 8

query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M

ft_min_word_len = 4

log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30


performance_schema = 0
explicit_defaults_for_timestamp

#lower_case_table_names = 1



myisam_sort_buffer_size = 8M
myisam_repair_threads = 1

interactive_timeout = 28800
wait_timeout = 28800


# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES 

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

保存即可

添加mysql的环境变量

将MySQL编译生成的bin目录添加到当前Linux系统的环境变量中

[root@localhost ~]# echo -e ‘\n\nexport PATH=/usr/local/mysql/bin:$PATH\n’ >> /etc/profile && source /etc/profile

创建MySQL数据库文件存放路径及相关安全配置

在Linux主机上创建一个目录/mydata/mysql/data,用于存放MySQL的数据库文件。同时设置其用户和用户组为之前创建的mysql,权限为700。这样其它用户是无法进行读写的,尽量保证数据库的安全。

[root@localhost ~]# mkdir -p /mydata/mysql/data && chown -R root:mysql /usr/local/mysql
[root@localhost ~]# chown -R mysql:mysql /mydata/mysql/data
[root@localhost ~]# chmod -R go-rwx /mydata/mysql/data

创建MySQL日志和数据存放目录

下面配置的MySQL日志存放目录以及权限都是根据前面my.cnf文件写的,也就是两者需要保持一致。

[root@localhost ~]# mkdir -p /var/run/mysql && mkdir -p /var/log/mysql
[root@localhost ~]# chown -R mysql:mysql /var/log/mysql && chown -R mysql:mysql /var/run/mysql

初始化MySQL自身的数据库

在MySQL安装目录的/usr/local/mysql/bin路径下,执行mysqld命令,初始化MySQL自身的数据库。

######参数user表示用户,basedir表示mysql的安装路径,datadir表示数据库文件存放路径
[root@localhost bin]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/mysql/data

执行完后,可以通过[root@localhost bin]# ls -lrt /mydata/mysql/data/命令查看是否生成了MySQL自身的数据库文件。

设置开机启动

######配置开机自启动
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# chmod +x /etc/init.d/mysqld #增加可执行权限
[root@localhost ~]# chkconfig --add mysqld #添加到sysV服务
[root@localhost ~]# chkconfig mysqld on

启动MySQL服务

在完成上面的操作后,就可以正式使用MySQL服务了。启动MySQL进程服务的命令如下:

[root@localhost ~]# mysqld_safe --user=mysql --datadir=/mydata/mysql/data --log-error=/var/log/mysql/error.log [直接回车]
[1] 10274
150513 21:28:16 mysqld_safe Logging to ‘/var/log/mysql/error.log’.
150513 21:28:16 mysqld_safe Starting mysqld daemon with databases from /mydata/mysql/data

######上面这条命令会在后台继续执行,所以直接回车并执行下面这条命令
[root@localhost ~]# service mysqld start
Starting MySQL.[ OK ] [启动成功]
[root@localhost ~]#

然后使用下面这命令ps -ef | grep mysql和netstat -tunpl | grep 3306查看MySQL服务进程和端口监听情况

初始化MySQL数据库的root用户密码

和Oracle数据库一样,MySQL数据库也默认自带了一个root用户(这个和当前Linux主机上的root用户是完全不搭边的),我们在设置好MySQL数据库的安全配置后初始化root用户的密码。配置过程中,一路输入y就行了。这里只说明下MySQL-5.7.9版本中,用户密码策略分成低级LOW、中等MEDIUM和超强STRONG三种,推荐使用中等MEDIUM级别!

[root@localhost ~]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.

New password: 

将MySQL数据库的动态链接库共享至系统链接库

一般MySQL数据库还会被类似于PHP等服务调用,所以我们需要将MySQL编译后的lib库文件添加至当前Linux主机链接库/etc/ld.so.conf.d/下,这样MySQL服务就可以被其它服务调用了。

[root@localhost ~]# echo “/usr/local/mysql/lib” > /etc/ld.so.conf.d/mysql.conf
[root@localhost ~]# ldconfig
[root@localhost ~]# ldconfig -v | grep mysql
ldconfig: 无法对 /libx32 进行 stat 操作: 没有那个文件或目录
ldconfig: 多次给出路径“/usr/lib”
ldconfig: 多次给出路径“/usr/lib64”
ldconfig: 无法对 /usr/libx32 进行 stat 操作: 没有那个文件或目录
/usr/lib64/mysql:
libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
/usr/local/mysql/lib:
libmysqlclient.so.20 -> libmysqlclient.so.20.0.9

创建其它MySQL数据库用户

使用MySQL数据库root管理员用户登录MySQL数据库后,可以管理数据库和其他用户了。这里演示创建一个名为mysql的MySQL用户(密码为Mysql12.)和一个名为test的数据库。

[root@localhost ~]# mysql -uroot -p密码

######登录成功后,创建test数据库,并设置字符集和字符校
mysql> CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

######创建名为typecodes用户,并让它拥有typecodes数据库所有的权限
mysql> grant all privileges on test.* to ‘mysql’@’%’ identified by ‘Mysql12.’;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit; [创建完毕,root用户退出]

查看数据库编码方式

[root@localhost data]# mysql -uroot -p
Enter password:

mysql> show variables like 'character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

参考网址

CentOS 7.1编译安装MySQL5.7.7rc 主要
CentOS下查看修改mysql编码方式

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11天前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
208 16
|
2月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
153 10
|
6月前
|
Linux 编译器 开发工具
在CentOS上编译安装TinyXml2
以上就是在CentOS上编译安装TinyXml2的步骤。这个过程可能看起来有些复杂,但是只要你按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,你可以查阅相关的文档,或者在网上搜索解决方案。记住,编程就是一个不断学习和解决问题的过程,不要因为遇到困难就放弃。
141 27
|
6月前
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
1460 26
|
6月前
|
Linux 开发工具 C语言
在CentOS系统中编译安装TinyXml2的方法
以上就是在CentOS系统中编译安装TinyXml2的方法。这个过程可能会有些复杂,但只要你按照上面的步骤一步一步来,你应该能够成功地完成这个任务。如果你在这个过程中遇到任何问题,你可以在网上搜索相关的资料,或者在相关的论坛上寻求帮助。希望这个指南能够帮助你成功地在你的CentOS系统中编译安装TinyXml2。
154 22
|
7月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
151 18
|
7月前
|
Linux Python
centos 编译安装 python 和 openssl
centos 编译安装 python 和 openssl
353 2
|
9月前
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
815 16
|
11月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
537 3
|
16天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
53 3