MySQL的编译安装5.7.12版本

1,准备工作

  • 卸载系统自带mysql
    查看系统是否自带MySQL, 如果有就卸载了, 卸载方式有两种yum, rpm, 这里通过yum卸载
1
2
3
rpm -qa | grep mysql                 # 查看系统自带mysql
yum -y remove mysql-* # yum卸载mysql
rpm -e --nodeps mysql mysql-server # rpm卸载mysql
  • 卸载系统自带boost,并安装新版boost
    mysql 5.7 依赖于boost_1_59_0或更高版本, 查看系统是否自带boost, 如果有就卸载了
1
2
3
rpm -qa | grep boost    # 查看系统自带boost
yum -y remove boost-* # 卸载boost
rpm -e --nodeps boost-filesystem-1.41.0-11.el6_1.2.x86_64 # 卸载boost
  • 安装依赖包
1
yum install gcc gcc-c++ ncurses ncurses-devel cmake bison libgcrypt perl

2,开始编译

  • 下载源码并解压
1
2
3
4
5
6
wget http://liquidtelecom.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.12.tar.gz
tar -xzvf boost_1_59_0.tar.gz
tar -xzvf mysql-5.7.12.tar.gz

cd mysql-5.7.12
  • 编译及安装(全程请以root用户进行,以免错误)
    • 以下编译命令挑几个需要的就行了,没必要全部使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake \
-DCMAKE_INSTALL_PREFIX=/opt/mysql/ \
-DMYSQL_DATADIR=/opt/mysql/data \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DEXTRA_CHARSETS=all \
-DMYSQL_TCP_PORT=10086 \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=0 \
-DWITH_SSL=bundled \
-DWITH_ZLIB=bundled \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DENABLE_DOWNLOADS=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=../boost_1_59_0
  • 参数详解:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-DCMAKE_INSTALL_PREFIX:                 MySQL安装的根目录
-DMYSQL_DATADIR: 数据库文件存放目录
-DSYSCONFDIR: MySQL配置文件所在目录
-DDEFAULT_CHARSET=utf8 默认字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci 默认编码为utf8
-DWITH_EXTRA_CHARSETS=all 额外的字符集
-DEXTRA_CHARSETS=all 扩展字符支持
-DMYSQL_TCP_PORT=3306 MySQL监听端口为3306
-DMYSQL_USER=mysql MySQL用户名
-DWITH_MYISAM_STORAGE_ENGINE=1 安装MyIASM引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 安装InnoDB引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 安装Archive引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 安装Blackhole引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 安装Memory引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 安装支持数据库分区引擎
-DWITH_READLINE=1 快捷键功能
-DENABLED_LOCAL_INFILE=1 启用加载本地数据
-DWITH_DEBUG=0(默认禁用) 关闭调试支持
-DMYSQL_MAINTAINER_MODE=0 关闭维护模式
-DWITH_SSL=bundled 设置MySQL的通讯支持ssl协议
-DWITH_ZLIB=bundled 允许MySQL使用zlib库
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock 连接数据库的socket路径
-DENABLE_DOWNLOADS=1 MySQL编译时允许自主下载相关文件
-DDOWNLOAD_BOOST=1 允许下载BOOST库(如未找到,就下载解压)
-DWITH_BOOST=../boost_1_59_0 指定BOOST库查找路径
  • 下面开始编译及安装(编译需时较长,我编译大概为1h,具体看配置)
1
2
3
4
make
make install

/opt/mysql/bin/mysql --version # 查看mysql版本

3,配置MySQL

  • 创建用户,组及各个目录,并赋予用户权限
    注意:用户,目录路径要和配置文件相同
1
2
3
4
5
6
7
8
9
10
11
12
13
cat /etc/group | grep mysql          # 查看是否存在mysql用户组
cat /etc/passwd | grep mysql # 查看是否存在mysql用户
groupadd mysql # 创建用户组
useradd -r -g mysql mysql -M -s /bin/false # 创建用户

mkdir -p /opt/mysql/data # 递归创建安装目录及数据库目录
mkdir -p /var/run/mysql # 递归创建MySQL的pid文件目录
mkdir -p /var/log/mysql # 递归创建MySQL的日志目录

chown -R mysql:mysql /opt/mysql # 往下都是赋予权限
chmod -R go-rwx /opt/mysql/data
chown -R mysql:mysql /var/log/mysql
chown -R mysql:mysql /var/run/mysql
  • 开始设置MySQL的配置文件my.cnf
    • 先把编译生成的/etc/my.cnf文件备份,然后把 《CentOS系统MySQL的配置文件my.cnf》 文中整理的MySQL的配置文件my.cnf上传到服务器的 /etc/ 目录下,再将配置文件中的以下路径改为你的安装目录和数据库目录即可。

basedir = /usr/local/mysql
datadir = /mydata/mysql/data

  • 配置开机自启动
1
2
3
4
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
  • 初始化MySQL自身的数据库
    • MySQL 5.7 弃用mysql_install_db初始化,开始使用 mysqld
    • 参数: –initialize-insecure不会生成密码,user表示用户,basedir表示mysql的安装路径,datadir表示数据库文件存放路径。
1
/opt/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
  • 启动MySQL服务
    • 启动MySQL服务
1
/opt/mysql/bin/mysqld_safe --user=mysql --datadir=/opt/mysql/data --log-error=/var/log/mysql/error.log
  • 查看MySQL服务是否启动
1
2
ps -ef | grep mysql             # 查看进程是否启动
netstat -tunpl | grep 3306 # 查看端口监听情况

4,初始化MySQL数据库root用户

  • 执行 /opt/mysql/bin/mysql_secure_installation ,建议英语不好的同学准备好翻译 ,大致如下,具体自测
  • A,首先让你选择用户密码策略:分成低级 LOW 、中等 MEDIUM 和超强 STRONG 三种,输入数字代号012以选择,选择完成输入密码回车后按 Y 确定即可
代号 策略 要求
0 LOW 只需要长度大于或等于8
1 MEDIUM 除大于8外,还需要含数字、大小写和类似@#%等特殊字符
2 STRONG 前面所有还需要包含字典文件
  • B,其次,移除测试相关
次数 翻译 操作
第一次 移除 anonymous 用户 y
第二次 是否允许 root 远程登录 n
第三次 移除 test 数据库 y
第四次 刷新MySQL的系统权限相关表 y

5,创建其它MySQL数据库用户

  • 例:创建一个名为 test 的MySQL用户(密码为Test@123.com)和一个名为 temp 的数据库。
1
2
3
4
5
6
7
8
9
10
11
12
13
/opt/mysql/bin/mysql -uroot -p(MySQL的root用户密码)

# 登录成功后,创建 temp 数据库,并设置字符集和编码
mysql> CREATE DATABASE `temp` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

# 创建 test 用户,并让它拥有 temp 数据库所有的权限,且可远程登陆,%代表任意主机。
mysql> grant all privileges on temp.* to 'test'@'%' identified by 'Test@123.com';

# 刷新MySQL的系统权限相关表-
mysql> flush privileges;

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

6,错误集锦

  • 出现错误:ERROR! The server quit without updating PID file (/var/run/mysql/mysql.pid

    • 解决方案:删除/opt/mysql/data目录下的所有文件,再重新初始化mysql数据库
  • 未完待续。。。