Mysql DBA 高级运维学习笔记-一主多从宕机从库切换主继续和从库同步过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql DBA 高级运维学习笔记-一主多从宕机从库切换主继续和从库同步过程相关的知识,希望对你有一定的参考价值。

1.主库master 宕机

登录从库show processlist\G

看两个线程的更新状态

mysql> show processlist\G
*************************** 1. row ***************************
 Id: 1
   User: system user
   Host: 
 db: NULL
Command: Connect
   Time: 22997
  State: Waiting for master to send event
   Info: NULL
*************************** 2. row ***************************
 Id: 2
   User: system user
   Host: 
 db: NULL
Command: Connect
   Time: 21500
  State: Slave has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL
*************************** 3. row ***************************
 Id: 6
   User: root
   Host: localhost
 db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
3 rows in set (0.00 sec)

登录从库分别查看master.info

cat /data/3307/data/master.info
cat /data/3308/data/master.info

确保更新完毕,看两个从库哪个库的binlog位置最靠前更新最快,经过测试没有延迟的情况POS差距很小,甚至是一致的。

[[email protected] ~]# sed -n "2,3p" /data/3307/data/master.info 
mysql-bin.000010
633

选更新最快,POS最大作为主库

或利用同步的功能直接选择做了实时同步的这个从库。

授权同步用户和主库一样

如果只是主库宕机,服务器还能起来还需要把主库的binlog拉下来,在从库补全把差距补回来。然后把这个从库作为主库。

步骤:

(1)确保所有relay log全部更新完毕

在每个从库上执行stop slave io_thread;show processlist
直到看到Slave has read all relay log 表示从库更新都执行完毕。

(2)登录从库

mysql –uroot –p123456 –S /data/3307/mysql.sock -e "Stop slave;Retset masterQuit"

Stop slave :停止同步
Retset master :删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件
Quit

(3)进到从库数据库数据根目录 删除master.info relay-log.info

cd /data/3307/data/
rm –f master.info relay-log.info

检查授权表,read-only等参数,如果配置了这些参数要清理一下

(4)3307提升从库为主库

vim /data/3307/mysql-bin

开启:

log-bin = /data/3307/mysql-bin

如果存在log-slave-updates read-only等一定注释掉
重启mysql服务/data/3307/mysql restart
到此为止。提升主库完毕

(5)如果主库服务器没宕机需要去主库拉取binlog补全提升主库的从库

(6)其他从库的操作

已检查(同步user rep局存在)

登录从库

Stop slave;
Change master to master_host =’192.168.1.115’;如果不同步就指定位置点
Start slave;
Show slave status\G

如果不同步分析新生成的主库的binlog接着往下同步。

(7)修改程序配置文件从主数据库指定从数据库

如果访问数据库用域名,直接可以修改hosts解析。

(8)修理损坏的主库完成作为从库使用或者切换

提示更多恢复信息参考mysql手册第六章的FAQ。

2.主库以外宕机,例如:我们有计划切换,怎么做呢?

a.主库锁表 ,设置同步参数change master

b.登录所有的库查看同步状态,是否完成。

3.Mysql5.5支持半同步

一个插件

一主多从主库宕机如何恢复,通过master.info确定新主库。

半同步下的一主多从恢复直接对设置半同步的从库确定为主库。
让某一个稳定从库和主库完全一致,即主库和这个从库都更新数据完毕,在返回给用户更新成功。

优点:

确保至少一个从库和主库数据一致

缺点:

主从之间网络延迟或者从库有问题时候,用户体验很差当然可以设置超时时间10秒。

4.从库slave宕机

恢复方法:重做slave

a.导入数据

mysql –uroot –p123456 –S /data/3307/mysql.sock < test.sql &

b.配置从库同步参数Change master

mysql> CHANGE MASTER TO
 -> MASTER_HOST=‘192.168.1.115‘,   主库的IP
 -> MASTER_PORT=3306, 主库的端口,从库端口可以和主库不同
 -> MASTER_USER=‘rep‘,主库上建立的用于复制的用户rep
 -> MASTER_PASSWORD=‘123456‘, 这里是rep的密码
 -> MASTER_LOG_FILE=‘mysql-bin.000036‘,这里是show master status;查看到的二进制日志文件名称注意不能有空格。
 -> MASTER_LOG_POS=335;这里也是show master status时看到的二进制日志偏移量注意不能多空格。

c. 开启从库同步开关,查看同步状态

start slave;
show slave status\G

以上是关于Mysql DBA 高级运维学习笔记-一主多从宕机从库切换主继续和从库同步过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL一主多从的环境下,如果主宕机了怎么办?如何把损失降到最小?

Mysql一主多从复制数据

LINUX学习-Mysql集群-一主多从

LINUX学习-Mysql集群-一主多从

ESP32学习笔记(34)——BLE一主多从连接

关于Linux下MySql集群同步(主从一主多从主从从)部署及同步策略的一些笔记