mysql主从架构中删除一台从服务器的流程步骤

2023-06-01 00:00:00 架构 主从 一台

因为要迁移(原因就不说了),从阿里云迁移至腾讯云,中途不能影响业务

并且时间也比较充足,所以我打算功能服务一并迁移过去,并且按服务器的数量开放功能模块

我的项目是在阿里云上的自建的mysql主从架构,因为是网站业务查询比写入要多

具体功能:

1主3从
1写3读


腾讯云这边上线功能并稳定运行了,所以阿里云这边就剔除一台

今天我打算删除一台mysql数据库的从服务器


进入步骤

我的mysql主服:

我这只显示删除的这台  其他的省略了

mysql> show processlist\G;
...
*************************** 2. row ***************************
     Id: 8331160
   User: xxxsync
   Host: xx:39276
     db: NULL
Command: Binlog Dump
   Time: 86064
  State: Master has sent all binlog to slave; waiting for more updates
   Info: NULL
*************************** 3. row ***************************
...
ERROR: 
No query specified
mysql> 

从服 (就要删除这台):

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xx
                  Master_User: xxxsync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000194
          Read_Master_Log_Pos: 936485957
               Relay_Log_File: izwz9hf4qqoc03io91jvcdz-relay-bin.000183
                Relay_Log_Pos: 157404881
        Relay_Master_Log_File: mysql-bin.000194
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
...

停止从服:

mysql> stop slave;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    5929417
Current database: *** NONE ***
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: xx
                  Master_User: xxsync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000194
          Read_Master_Log_Pos: 941060061
               Relay_Log_File: izwz9hf4qqoc03io91jvcdz-relay-bin.000183
                Relay_Log_Pos: 161978985
        Relay_Master_Log_File: mysql-bin.000194
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
....

然后用SHOW STATUS看看

slave.png

参数Slave_open_temp_tables 是否等于0 

等于0的话就OK了 直接可以拉闸关服务器了


如果值不为0,用START SLAVE重启从服务器线程

slave_open_temp_tables值显示,当前slave创建了多少临时表,注意由client显示创建的

即便是这样,在使用临时表的场景下,如果服务器宕机,将遇到不可预知的问题。

所以比较保险的做法是,创建实体表,虽然会由于分配的文件刷新到磁盘。


最后在去主服务看看

show processlist\G;


终于删除那台不见了  完事

相关文章