参考
https://www.cnblogs.com/gl-developer/p/6170423.html
https://www.cnblogs.com/ivictor/p/5522383.html
https://www.cnblogs.com/andy6/p/6979590.html
环境
- centos 7.4
- mysql 8
角色 | ip | 端口 | 版本 |
---|---|---|---|
master1 | 192.168.1.1 | 3306 | msyql8 |
master2 | 192.168.1.2 | 3306 | msyql8 |
配置
master1 配置
- /etc/my.cnf文件
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 开启二进制归档日志
log-bin=mysql-bin
# 定义服务器id,必须唯一
server-id=1
# 开启从库日志更新
log_slave_updates=1
# 需要同步的数据库名,如果有多个,则重复此参数,每个数据库一行
binlog-do-db=test
# 不同步的 mysql 数据库,同上
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
- 创建同步账号
CREATE USER 'repl'@'192.168.1.2' IDENTIFIED BY 'mysql';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2';
- 重启服务
master2配置
- /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 开启二进制归档日志
log-bin=mysql-bin
# 定义服务器id,必须唯一
server-id=2
# 开启从库日志更新
log_slave_updates=1
read_only=1
# 需要同步的数据库名,如果有多个,则重复此参数,每个数据库一行
binlog-do-db=test
# 不同步的 mysql 数据库,同上
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
- 创建同步账号
CREATE USER 'repl'@'192.168.1.1' IDENTIFIED BY 'mysql';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.1';
- 重启服务
开启复制
- 分别在master1、master2中执行
-- 查看master状态,记录二进制日志文件编号和位置
SHOW MASTER STATUS;
-- 用于停止io线程
STOP SLAVE IO_THREAD FOR CHANNEL '';
-- 设置作为从库到主库读取的信息
-- 在master1上执行的信息来自于master2上的show master status信息,同理master2也一样
CHANGE MASTER TO
MASTER_HOST='192.168.1.2', -- master2的 ip
MASTER_USER='repl',
MASTER_PASSWORD='mysql',
MASTER_LOG_FILE='mysql-bin.000003', -- master2的日志文件
MASTER_LOG_POS=155; -- master2 的日志位置
-- 查看系统sql_mode
select @@sql_mode;
-- 开启主从复制
start slave;
-- 查看从库状态
show slave status;
-- 停止主从复制;
STOP SLAVE;
验证是否成功
- 在start slave后,执行show slave status查看下面是否为yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
根据测试,在start slave后,slave_sql_running状态很快就为yes,而slave_io_running由于网络连接速度的问题,需要等待一段时间。如果一直为conncecting或no,就要检查主从服务器之间是否能连通,可以相互ping一下对方ip,或通过mysql控制台相互连接下对方的数据库
网友评论