1.2 搭建实验环境
理解了原理后,在着手配置MySQL异步复制前,先要安装MySQL数据库软件。本节介绍我们的实验环境以及在此环境中安装MySQL的具体步骤。
1.2.1 实验环境说明
1. 主机IP
- 172.16.1.125(主)
- 172.16.1.126(从)
- 172.16.1.127(从)
2. 软件环境
- OS:CentOS Linux release 7.2.1511 (Core)
- MySQL:MySQL Community Server 8.0.16
- glibc:glibc-2.17-105.el7.x86_64
3. 硬件环境
三台虚拟机,每台的基本配置为:
- 双核双CPU,Intel(R) Xeon(R) CPU E5-2420 0@1.90GHz
- 8GB物理内存,8GB Swap
- 100GB物理硬盘
1.2.2 安装MySQL
从https://dev.mysql.com/downloads/mysql/下载二进制安装文件mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz,相关选项如图1-5所示。
图1-5 下载mysql-8.0.16安装包
然后以root用户按顺序执行下面的命令,在三台主机上安装MySQL。
# 进入安装目录 cd /usr/local
# 从tar包中提取文件 tar xvf /home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
# 建立软链接 ln -s mysql-8.0.16-linux-glibc2.12-x86_64 mysql
# 进入mysql目录 cd mysql
# 建立secure_file_priv系统变量指向的目录 mkdir mysql-files
# 修改属主为mysql chown mysql:mysql mysql-files
# 修改目录权限 chmod 750 mysql-files
# mysql系统初始化 bin/mysqld --initialize --user=mysql
# 建立SSL/RSA相关文件,如果不启用SSL连接,此步可省略 bin/mysql_ssl_rsa_setup
# 启动mysql服务器 bin/mysqld_safe --user=mysql &
# 连接mysql服务器 bin/mysql -u root -p
-- 修改root密码 alter user user() identified by "123456";
-- 创建一个新的mysql管理员账号 create user 'wxy'@'%' identified with mysql_native_password by '123456'; grant all on *.* to 'wxy'@'%' with grant option;
命令说明:
(1)mysql-files目录用作secure_file_priv系统变量的值。该变量将导入和导出操作限制到特定目录。例如由LOAD DATA、SELECT... INTO OUTFILE语句和LOAD_FILE()函数所执行的操作,仅允许具有FILE权限的用户执行这些操作。secure_file_priv系统变量设置如下:
- 空字符串:变量不起作用,是不安全的设置。
- 目录名:MySQL限制导入和导出操作仅用于该目录中的文件。目录必须已经存在,MySQL不会创建它。
- NULL:MySQL禁用导入和导出操作。
(2)mysqld --initialize命令创建默认数据库并退出。在过程中会创建一个超级用户'root'@'localhost',并为该用户生成一个随机密码。命令执行输出如下所示:
MySQL文档中说产生的临时密码会写到.err日志文件里,但在本次安装中,这一步并没有生成.err文件。安全的做法还是记下临时密码,因为在initialize情况下,临时密码默认标记为已过期,用户必须在第一次进入MySQL后首先修改root用户的密码。
(3)mysql_ssl_rsa_setup程序将创建SSL证书和密钥文件,以及创建使用SSL进行安全连接所需的RSA密钥对文件。如果现有的SSL文件已过期,mysql_ssl_rsa_setup也可用于创建新的SSL文件。mysql_ssl_rsa_setup使用openssl命令,因此主机上必须安装有OpenSSL。mysql_ssl_rsa_setup检查数据目录中的以下SSL文件:
ca.pem server-cert.pem server-key.pem
只要存在这些文件之一,则mysql_ssl_rsa_setup不会创建任何SSL文件。否则,它会调用openssl来创建它们以及一些其他文件。启用SSL安全客户端连接时需要这些文件:
之后mysql_ssl_rsa_setup检查数据目录中的以下RSA文件:
只要存在这些文件之一,则mysql_ssl_rsa_setup不会创建任何RSA文件。否则,它会调用openssl来创建它们。对于sha256_password或caching_sha2_password插件验证的账户不加密连接时,通过这些文件使用RSA进行安全密码交换。
mysql-8.0.16默认支持SSL加密连接:
(4)第一次进入MySQL后,执行任何命令都会报出以下错误:
提示很明显,需要修改初始化时为用户'root'@'localhost'生成的临时密码。MySQL 8默认使用的认证插件是caching_sha2_password:
当用旧版本的MySQL客户端连接MySQL 8服务器时,可能报出以下错误:
可以使用两种方法解决此问题:第一种方法是在配置文件中设置default_authentication_plugin='mysql_native_password',然后重启MySQL服务器使之生效。default_authentication_plugin是只读系统变量,不能动态修改;第二种方法是在创建用户时,使用兼容新旧版本的认证方式,例如:
create user 'wxy'@'%' identified with mysql_native_password by '123456';
通过以下查询可以得到用户所对应的认证插件: