本文讲一下 MySQL 8 主从复制的配置。
两台服务器:45.46.178.220 (主)和 45.46.178.221 (从),在两台服务器上安装好 MySQL 8。
配置(Master)主节点
1. 修改配置文件
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-do-db=mytest
binlog-do-db=mytest1
binlog-ignore-db 指定不需要复制的数据库,binlog-do-db 指定需要复制的数据库,可以分多行指定多个,优先级 binlog-do-db 大于 binlog-ignore-db。
保存,重启MySQL服务
systemctl restart mysqld
2. 创建数据库用户
创建一个用户用于从库连接主库。
CREATE USER 'cpusr'@'45.46.178.221' IDENTIFIED WITH mysql_native_password by '密码';
grant replication slave on *.* to 'cpusr'@'45.46.178.221';
FLUSH PRIVILEGES;
3. 查看主库状态
show master status;
记录 File 和 Postion的值。
如果主库已经存在,需要先备份主服务器的数据库到从服务器上还原。下面的操作不需要停止主数据库的写入就可以备份。
在从服务器执行下面的命令
ssh -p 25565 root@45.46.178.220 mysqldump -uroot -p --skip-lock-tables --flush-logs --single-transaction --master-data=2 --databases mytest mytest1 > test.sql
上面的命令是将主服务器上数据库备份到从服务器上。-p 25565 是主服务器的 ssh 端口号,如果默认22 可以不指定。
--master-data 是将 binlog 信息写入 dump文件,如下所示:
--master-data=1 将 CHANGE MASTER 写入 dump 文件,--master-data=2 写入相同的语句,只不过会被注释掉。
再从服务器上还原数据库
mysql -uroot -p < test.sql
配置(Slave)从节点
1. 修改配置文件
[mysqld]
server-id=2
保存,重启 MySQL 服务
2. 连接主服务器
从服务器登录 mysql,执行下面的命令
change master to master_host='45.46.178.220',master_port=3306,master_user='cpusr',master_password='密码',master_log_file='mysql-bin.000010',master_log_pos=156;
3. 启动 slave
start slave;
4. 查看 slave 状态
show slave status\G;
如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes 说明配置成功了。
测试主从复制
在主服务器上,登录 mysql,在 mytest 数据库中创建一个 tb2 表
CREATE TABLE `tb2` (
`Id` int(0) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
再登录到从服务器上查看
已经同步创建了 tb2 表。