mysql主从切换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql主从切换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4727字,纯文字阅读大概需要7分钟。
内容图文
![mysql主从切换](/upload/InfoBanner/zyjiaocheng/491/30a1603d6c644266b2d475a2734516e2.jpg)
主库宕机解决方案
假设发生了突发事件,master宕机,现在的需求是要将192.168.1.102提升为主库,另外一个为从库
步骤:
1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread; show processlist;直到看到Has read all relay log,则表示从库更新都执行完毕了
2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库,这里我们选择192.168.1.102为新的主库
3.登陆192.168.1.102,执行stop slave; 并进入数据库目录,删除master.info和relay-log.info文件(和reset slave all一样,以非从库模式启动);配置my.cnf文件,开启log-bin;如果有log-slaves-updates和read-only则要注释掉,执行reset master;创建用于同步的用户并授权slave(最好保持与之前主库的用户&密码一致)
5.登录另外一台从库,执行stop slave停止同步;连接到新的主库;start slave;;检查&测试slave是否同步更新
正常切换主从
1.检查slave同步状态
在开始切换之前先对主库进行锁表:
flush tables with read lock
(在执行完成后生产环境必须等待所有语句执行完成)
在flush tables with read lock成功获得锁之前,必须等待所有语句执行完成(包括SELECT)。所以如果有个慢查询在执行,或者一个打开的事务,或者其他进程拿着表锁,flush tables with read lock就会被阻塞,直到所有的锁被释放。请看下面的例子:
mysql> show processlist; +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+ | 4 | root | localhost | test | Query | 80 | Sending data | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 | | 5 | root | localhost | test | Query | 62 | Flushing tables | flush tables with read lock | | 6 | root | localhost | test | Field List | 35 | Waiting for table | | | 7 | root | localhost | test | Query | 0 | NULL | show processlist | +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+ 4 rows in set (0.00 sec)
等切换完成后可以释放锁
unlock tables
1)在master执行:show processlist;
显示Master has sent all binlog to slave; waiting for binlog to be updated
2)在slave执行:show processlist;
显示Slave has read all relay log; waiting for the slave I/O thread to update it
mysql> show slave status \G;
检查IO及SQL线程是否正常,如果为NO表明同步不一致,需要重新将slave同步保持主从数据一致。
正常切换主从/突发情况切换主从,主要步骤
3)停止slave io线程
在slave执行:
mysql> STOP SLAVE IO_THREAD
mysql> SHOW PROCESSLIST;
确保状态为:has read all relay log
stop slave io_thread执行,停止主从同步的io进程,不再从主库同步binlog日志文件;show processlist;确认所有的sql语句是否都执行完毕,确保同步的数据都更新到库。
以上都执行完成后可以把slave提升为master:
4)提升slave为master
Stop slave;
Reset master;
Reset slave all; 在5.6.3版本之后
Reset slave; 在5.6.3版本之前
备注:reset slave all 命令会删除从库的 replication 参数,之后 show slave status\G 的信息返回为空。(与删除服务器上master.info和relay-log.info文件一样,使下次重启库时以非从库启动)
查看slave是否只读模式:show variables like ‘read_only‘;
只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;
##在从库创建用户和授权
grant replication slave on *.* to ‘repl‘@‘‘192.168.0.104‘ identified by ‘xxxx‘
##授权的同步用户和密码保持与之前的一致
show master status;
##记录主库的binlog日志和pos位置,给其他从库建立主从使用。
5)将原来master变为slave
在新的slave上重置binlog:
Reset master;
change master to master_host=‘192.168.0.104‘, ##Master 服务器Ip
master_port=3306,
master_user=‘repl‘,
master_password=‘xxx‘,
master_log_file=‘master-bin.000001‘, ##Master服务器产生的日志
master_log_pos=000001; ##之前记录的主库pos位置
start slave; ##启动slave
show slave status\G; ##查看slave状态
异常切换(主机故障或者宕机)
1) 在salve执行:
stop slave;
reset master;
查看是否只读模式:show variables like ‘read_only‘;
只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;
查看show slave status \G;
查看show master status \G;
业务应用上修改为主库IP地址,测试应用连接是否正常。
##reset master直接去掉主从的配置,以单库模式运行。
mysql主从切换
标签:mysql 主从 主从切换
本文系统来源:http://jschu.blog.51cto.com/5594807/1964560
内容总结
以上是互联网集市为您收集整理的mysql主从切换全部内容,希望文章能够帮你解决mysql主从切换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。