基于docker搭建的mysql主从数据库模拟模拟宕机后数据恢复
生产环境中不可避免会出现MySQL服务宕机的情况,常见的场景如下:
对于单一服务器结构一般通过设置sync_binlog=1与innodb_flush_log_at_trx_commit = 1(这两个选项可在提交事务之前启用二进制日志到磁盘的同步,从而保证了数据的安全性,如果发生电源故障或操作系统崩溃,二进制日志中缺少的事务将仅处于准备状态。这允许自动恢复例程回滚事务,从而保证二进制日志中不会丢失任何事务),可保证数据不丢失。
对于主从结构的mysql而言,不但要保证master的数据完整性与安全,同时也要保证slave的数据完整与安全。如果其中任意一台服务器宕机,如何保证slave服务器数据的同步不受影响呢?
关于mysql主从结构数据会有以下问题:
(1)如何保证master的通知能有效到达slave?
(2)如何避免slave中继日志修改信息未刷新到磁盘时宕机,重新启动后slave不能正常工作?
通过以下测试流程模拟mysql宕机并查找问题:
事先启动搭建好的mysql主从服务
1、在master服务器的某个库中插入数据
INSERT INTO `rbac`.`think_user`(`u_id`, `u_name`, `u_password`, `register_time`, `is_delete`, `status`, `update_time`, `last_login_time`, `role_id`, `u_phone`, `u_email`) VALUES (26, 'aaaaaa', '123456', '2019-05-31 18:03:58', 1, 1, 1561384746, '2019-05-31 18:04:10', '1', NULL, NULL);
INSERT INTO `rbac`.`think_user`(`u_id`, `u_name`, `u_password`, `register_time`, `is_delete`, `status`, `update_time`, `last_login_time`, `role_id`, `u_phone`, `u_email`) VALUES (27, 'aaaaaa', '123456', '2019-05-31 18:03:58', 0, 1, 1561384674, '2019-05-31 18:04:10', '1', NULL, NULL);
INSERT INTO `rbac`.`think_user`(`u_id`, `u_name`, `u_password`, `register_time`, `is_delete&#