MySQL 8 主从复制配置教程-程序旅途

本文讲一下 MySQL 8 主从复制的配置。

两台服务器:45.46.178.220 (主)和 45.46.178.221 (从),在两台服务器上安装好 MySQL 8。

CentOS 7 安装 MySQL 8

CentOS 8 安装 MySQL 8.0

配置(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;

MySQL 8 主从复制配置教程-程序旅途

记录 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文件,如下所示:

MySQL 8 主从复制配置教程-程序旅途

--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 8 主从复制配置教程-程序旅途

测试主从复制

在主服务器上,登录 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;

MySQL 8 主从复制配置教程-程序旅途

再登录到从服务器上查看

MySQL 8 主从复制配置教程-程序旅途

已经同步创建了 tb2 表。