设为首页 收藏本站
查看: 599|回复: 0

[经验分享] mysql主从切换

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-13 09:00:04 | 显示全部楼层 |阅读模式

主库宕机解决方案

假设发生了突发事件,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就会被阻塞,直到所有的锁被释放。请看下面的例子:
1
2
3
4
5
6
7
8
9
10
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直接去掉主从的配置,以单库模式运行。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-404409-1-1.html 上篇帖子: mariadb cluster主从 下篇帖子: mysql sampdb数据库存储过程操作记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表