mysql主从复制安装部署配置操作步骤及主从库宕机处理办法
大家好,我是酷酷的韩~
1.前期准备 (1)首先需要准备至少两台mysql 这里方便演示,用了两台虚拟机 环境是centos7 主: 172.16.51.161 从: 172.16.51.162
(2)每台服务器装好mysql 这里的版本是 5.7.36 mysql的安装可参考此篇文章,含安装包 https://blog.csdn.net/hjq_ku/article/details/125141183
(3)想了解mysql主从复制原理的小伙伴可参考此篇文章 https://blog.csdn.net/hjq_ku/article/details/125261331
(4)备注 这里的服务器和mysql是一对一的 当然也可以一对多
2.两台mysql分别创建测试库
create database test;
3.主mysql配置 (1)修改my.cnf配置文件
# 开启二进制日志
log_bin = /usr/local/mysql/log/mysql-bin.log
# mysql清除过期日志的时间,默认值0,不自动清理,而是使用滚动循环的方式。
expire_logs_days = 0
# 如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。
max_binlog_size = 1000M
# binlog的格式也有三种:STATEMENT,ROW,MIXED。mysql 5.7.7后,默认值从 MIXED 改为 ROW
# 关于binlog日志格式问题,请查阅网络资料
binlog_format = row
# 默认值N=1,使binlog在每N次binlog写入后与硬盘同步,ps:1最慢
# sync_binlog = 1
#要求各个服务器的id必须不一样
server-id=1
#同步的数据库名称,默认是全部数据库
binlog-do-db=test
(2)查看主服务器状态 需要进入mysql命令控制台
show master status;
(3)bin log 日志命名规则 这里的mysql-bin.00004是由log_bin配置文件名为基础进行命名的,初始文件名是mysql-bin.00001,每次mysql重启会递增
(4)配置从服务器登录主服务器的账号授权
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
4.从服务器配置 (1)首先在主服务器查询binlog日志文件名及开始读取的位置坐标 进入mysql命令界面
/usr/local/mysql/bin/mysql -u root -p
输入以下命令进行查询
show master status;
(2)连接主服务器 进入从服务器的mysql命令界面
/usr/local/mysql/bin/mysql -u root -p
关闭slave
stop slave;
输入以下连接主服务器的配置命令:
change master to master_host='172.16.51.161', master_password='123456',
master_user='root',master_port=3306,master_log_file='mysql-bin.000007',master_log_pos=1799;
字段说明: master_host:主服务ip master_passoword:主服务器密码 master_user 主服务器用户名 master_port:主服务器端口 master_log_file 主服务器binlog日志文件名 master_log_pos 开始读取的位置坐标
(3)启动slave
start slave;
(4)查看从服务器状态
show slave status \G
主要查看Slave_IO_Running与Slave_SQL_Running是否为YES 如有No 可通过Last_Error 查看报错并百度解决(如有报错 一般都是细节性问题 百度足矣)
5.测试 (1)在主服务器输入以下建表语句
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL,
`name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
(2)从服务器则会同步 (3)表的增删改操作可自行测试 都是没问题的。
6.主从库宕机处理办法
6.1 主库宕机处理办法 (1)主库宕机带来的影响有哪些? 业务系统访问失败 从库停止同步更新 (2)进入从服务器mysql命令控制台 在每个从库上执行
stop slave io_thread;
show processlist;
直到看到Slave has read all relay log; waiting for more updates则表 示从库更新都执行完毕了
(3)主库宕机重启后binlog日志名会发生变化,需命令查询 (4)从服务器关闭slave
stop slave;
(5)从服务器重新指定主库 change master to master_host=‘172.16.51.161’, master_password=‘123456’, master_user=‘root’,master_port=3306,master_log_file=‘mysql-bin.000016’,master_log_pos=154; (6)重启salve并查看slave状态是否正常
start slave;
show slave status \G
6.2.从库宕机处理办法 (1)从库宕机问题 从库宕机时主库依旧不停插入数据会导致从库数据与主库不同步 (2)将主库上的dump全量数据导出到文件 /usr/local/mysql/bin/mysqldump -uroot -p -A --master-data=2 >/tmp/mysql_all.sql 备注:写入到mysql_all.sql文件中,通过这个选项会有一条CHANGE MASTER TO MASTER_LOG_FILE=‘xxxx.xxx’, MASTER_LOG_POS=xx 的记录产生到mysql_all.sql文件,为后面的增量同步从何处开始做准备 (3)增加一个insert操作,模拟主库未停止更新的操作
insert into sys_user values(6,6);
(4)将主服务器生成的mysql_all.sql传递至从服务器并执行(sql控制台内执行)
source /tmp/mysql_all.sql
(5)关闭slave
stop slave;
(6)重新指定主库binlog的pos值(取mysql_all.sql中记录的MASTER_LOG_POS)
change master to master_host='172.16.51.161', master_password='ku123456!!',
master_user='root',master_port=3306,master_log_file='mysql-bin.000007',master_log_pos=4294;
(7)重启salve并查看slave状态是否正常
start slave;
show slave status \G
(8)确认在全量同步后,有进行增量同步,即从主库dump之后的更新操作也被同步了过来,说明此时主从同步是正常的了。
只要路是对的,就不怕路远。 ------酷酷的韩
|