环境准备
-
centos 7
-
mysql 5.7
系统 | IP | 端口 |
---|---|---|
master1 | 192.168.192.10 | 3306 |
master2 | 192.168.192.20 | 3306 |
一、master1配置
1、修改mysql配置文件
vim /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,建议以服务器IP最后一位为准
server-id=10
# 开启从库日志更新
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
2、创建同步账号
CREATE USER 'repl'@'192.168.192.20' IDENTIFIED BY 'Mt@2020';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.192.20';
3、重启服务
systemctl restart mysqld
二、master2配置
1、修改master2上mysql配置文件
[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,建议以服务器IP最后一位为准
server-id=20
# 开启从库日志更新
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
2、创建同步账号
CREATE USER 'repl'@'192.168.192.10' IDENTIFIED BY 'MT@2020';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.192.10';
3、重启服务
systemctl restart mysqld
三、开始主从复制
1、分别在master1,master2中登录Mysql并执行如下命令
# 查看master状态,记录二进制日志文件编号和位置
SHOW MASTER STATUS;
# 用于停止io线程
STOP SLAVE IO_THREAD FOR CHANNEL '';
# 设置作为从库到主库读取的信息
# 在master1上执行的信息来自于master2上的show master status信息,同理master2也一样
CHANGE MASTER TO
MASTER_HOST='192.168.192.20', -- 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 \G;
# 停止主从复制;
stop slave;
四、验证是否成功
在start slave后,执行show slave status \G查看下面是否为yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
到此为止,实现了两台mysql服务器的主方备份。