mysql主从切换
在真实的生产环境中,总会有一些意外。
当企业的数据库集群有机器不幸down掉的时候,怎么把从库切换成主库呢。
可以总结为如下步骤
一.登录从库关闭io进程,确保relay log已被完全执行,并根据当前pos选取出下一个master。
mysql -uroot -ptqw961110
stop slave io_thread; #关闭io进程
show processlist; #查看还有什么进程在运行。
当进程运行到最后,显示Slave has read all relay log; waiting for more updates,则证明relay log已被完全读取并执行完毕。
show slave status \G; 查看从库slave状态
看到从库关于master的信息全部写在mysql.slave_master_info中
select * from mysql.slave_master_info;
看到master_log的pos记录是155.
这时我们需要登录上所有的从库,并重复上述查看master信息的步骤,对比各自pos的值,并选取最大值得从库作为下一个master。
二.清除从库的master信息,配置从库成为master。
选取到目标slave后,登上数据库,停掉slave;
mysql -uroot -ptqw961110
stop slave;
drop table mysql.slave_master_info; #删除master_info信息表
create user 'test'@'%' identified with mysql_native_password by 'tqw961110'; #创建一个新的用户
grant replication slave on *.* to 'test'@'%'; #授权
flush privileges; #刷新
退出数据库,进入数据库目录。
删除relay log
rm -f *relay*
编辑配置文件
vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
如果有log-slaves-updates和read-only则要注释掉
重启mysql
systemctl restart mysql
登录上mysql
执行
reset master (也可以不执行)
show master status ; #查看master信息
四.修改其余从库的master信息
登录其余数据库
stop slave;
change master to master_host='172.16.1.22', master_user='test', master_user='tqw961110', master_log_file='mysql-bin.000001', master_log_pos=155;
start slave;
show slave status \G;
假如io和sql两个线程都启动了,证明切换成功。