事件背景:
一大早过来,nacos的主库服务器宕机了,要启用从库当主库来用
假设发生了突发事件,master宕机,现在的需求是要将从库提升为主库,另外一个为从库
从库状态mysql> show slave status\G
操作步骤:
一、多个从库的情况
1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread;
再每个从库执行show processlist;
直到看到Has read all relay log
,则表示从库更新都执行完毕了
2.登陆所有从库,查看master.info
文件,对比选择pos
最大的作为新的主库,如下图
下表显示了master.info
中各行之间的简单解释说明。
3.登陆新的主库,执行stop slave;
并进入数据库目录,删除master.info
和relay-log.info
文件,
配置my.cnf
文件,开启log-bin
,本次有下面的参数
log_bin=mysql-bin
binlog_format=mixed
如果有log-slaves-updates
和read-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-updates
和read-only
则要注释掉,
执行systemctl restart mysqld
,重启mysql,参数生效
4.修改相关程序访问从库IP。