【Mysql】主库宕机解决方案

事件背景:
一大早过来,nacos的主库服务器宕机了,要启用从库当主库来用
假设发生了突发事件,master宕机,现在的需求是要将从库提升为主库,另外一个为从库
从库状态mysql> show slave status\G
【Mysql】主库宕机解决方案_第1张图片

操作步骤:

一、多个从库的情况

1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread;
再每个从库执行show processlist;
直到看到Has read all relay log,则表示从库更新都执行完毕了
【Mysql】主库宕机解决方案_第2张图片
2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库,如下图
在这里插入图片描述
下表显示了master.info中各行之间的简单解释说明。
【Mysql】主库宕机解决方案_第3张图片
3.登陆新的主库,执行stop slave;
并进入数据库目录,删除master.inforelay-log.info文件,
配置my.cnf文件,开启log-bin,本次有下面的参数

log_bin=mysql-bin
binlog_format=mixed

如果有log-slaves-updatesread-only则要注释掉,
执行reset master;
执行systemctl restart mysqld,重启mysql参数生效
4.创建用于同步的用户并授权slave;

1、登录数据库
mysql -h 127.0.0.1 -uroot -p
Enter password:

2、新建主从同步账号
mysql> CREATE USER 'repl'@'从库ip' IDENTIFIED WITH mysql_native_password BY '同步账号的密码';
Query OK, 0 rows affected (0.00 sec)

3、给主从同步账号赋予REPLICATION权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库ip';
Query OK, 0 rows affected (0.00 sec)

4、更新数据
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5、查新的主库状态信息
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      838 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>

5.登录另外一台从库,执行stop slave停止同步
6.从库连接到新的主库进行同步

1、登录数据库
mysql -h 127.0.0.1 -uroot -p
Enter password:

2、建立主从关系
mysql> CHANGE MASTER TO MASTER_HOST='主库ip',MASTER_USER ='repl', MASTER_PASSWORD='同步账号的密码',MASTER_LOG_FILE='主库的File值',MASTER_LOG_POS=主库Position值;
Query OK, 0 rows affected, 1 warning (0.02 sec)

3、启动从库
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

4、查看主从状态
mysql> show slave status\G

7.修改新的master数据,测试slave是否同步更新

二、单个从库的情况

1.确保所有的relay log全部更新完毕,从库执行show processlist;
直到看到Slave Has read all relay log,则表示从库更新都执行完毕了
2.从库执行stop slave停止同步
3.从库配置my.cnf文件,开启log-bin,本次有下面的参数

log_bin=mysql-bin
binlog_format=mixed

如果有log-slaves-updatesread-only则要注释掉,
执行systemctl restart mysqld,重启mysql,参数生效
4.修改相关程序访问从库IP。

你可能感兴趣的:(Mysql,mysql,数据库,服务器)