本文基于RockyLinux8.9系统,使用传统异步方式来做MySQL主从同步,本文中所使用的MySQL版本为8.0.35,配置过程中不影响主库的正常运行,请确保主从服务器时间一致性,防火墙相应的规则已配置。
MySQL主从为什么不用master、slave了,以及主从复制原理见:https://blog.whsir.com/post-7332.html
MySQL主(SOURCE):10.10.10.161
MySQL从(REPLICA):10.10.10.162
MySQL主(SOURCE)配置
1、添加wlnmp和epel源
| 1 2 | dnf install epel-release -y curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash | 
2、安装MySQL
| 1 | dnf install wmysql8 -y | 
3、创建数据库whsir以及测试表(作为演示用)
注意wlnmp一键安装包安装的MySQL密码为空
| 1 2 3 4 | mysql -uroot -p mysql> CREATE DATABASE whsir; mysql> USE whsir; mysql> CREATE TABLE wh_tb(id int,name varchar(30)); | 
4、创建用户并授权从库可以读取日志文件
| 1 2 | mysql> CREATE USER 'zhu'@'10.10.10.162' IDENTIFIED BY '123456'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'zhu'@'10.10.10.162'; | 
5、刷新查看用户权限
| 1 | mysql> FLUSH PRIVILEGES; | 
查看zhu账号是否生效
| 1 | mysql> SELECT USER,HOST FROM mysql.user; | 
6、备份库
| 1 | mysqldump -uroot -p --routines --single_transaction --source-data=2 --databases whsir > whsir.sql | 
--single-transaction:该选项确保在备份时使用事务,这样可以保证备份的一致性,而不会锁定整个数据库。
--source-data=2:这个选项用于在输出文件中包含二进制日志坐标信息,二进制日志坐标信息是主从复制中用于同步的关键信息,这里数字“2”表示包含二进制日志文件名和位置。
7、备份库拷贝至从库上
把备份好的库拷贝到从库,你可以scp传过去,也可下载到本地再传到从库上。
8、查看备份文件whsir.sql的binlog和pos值,记录下来,从库配置时用
| 1 | head -25 whsir.sql | 
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=1274;
9、连通性验证
为了确保主库的账户配置正确以及主从服务器的连通性,我们在从服务器上连接下主的库,确保可以正常连通,再进行下一步
| 1 | mysql -uzhu -p123456 -h10.10.10.161 | 
至此主库配置完毕。
MySQL从(REPLICA)配置
1、修改my.cnf文件
wlnmp一键安装包安装的MySQL数据库,默认server-id = 100,从库的server-id值一定要大于主库的。
修改从库my.cnf中的server-id
| 1 | server-id  = 101 | 
指定复制的库和表,此处%表示通配所有
| 1 | replicate-wild-do-table=whsir.% | 
增加只读参数
| 1 | read_only = ON | 
2、重启从库的MySQL
| 1 | /etc/init.d/mysql restart | 
3、创建whsir库
| 1 2 | mysql -uroot -p mysql> CREATE DATABASE whsir; | 
4、导入whsir.sql
| 1 | mysql -uroot -p whsir < whsir.sql | 
5、配置主从同步
| 1 2 3 4 5 6 7 8 9 10 11 | mysql -uroot -p mysql> STOP REPLICA; mysql> CHANGE MASTER TO     -> MASTER_HOST='10.10.10.161',     -> MASTER_USER='zhu',     -> MASTER_PASSWORD='123456',     -> MASTER_PORT=3306,     -> MASTER_LOG_FILE='mysql-bin.000002',     -> MASTER_LOG_POS=1274,     -> MASTER_CONNECT_RETRY=10; mysql> START REPLICA; | 
这里的MASTER_LOG_FILE和MASTER_LOG_POS值,就是前面提到的binlog和pos,MASTER_CONNECT_RETRY是连接失败后等待的秒数。
6、查看同步状态
| 1 | mysql> SHOW REPLICA STATUS\G | 
如果看到以下两项都是yes表示主从配置成功
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
如果看到以下等于0表示主从没有延迟
Seconds_Behind_Source: 0
7、最后在从库上创建一个只读权限的帐号
| 1 2 3 | CREATE USER 'wh'@'10.10.10.%' IDENTIFIED BY '123456789'; GRANT SELECT ON whsir.* TO 'wh'@'10.10.10.%'; FLUSH PRIVILEGES; | 
