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 差距很小, 甚至是一致的
- [root@mysql ~]# 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. 导入数据
mysqlurootp123456S / 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
来源: http://www.bubuko.com/infodetail-2493984.html