zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mysql主从切换选择

mysql 选择 切换 主从
2023-09-27 14:21:14 时间

######################

前提:

1,架构:lvs+kingshard+mysql主从

 

 

2,将mysql集群的拓扑结构更改为:旧主库M1<<--新主库M2<<-- 其他从库S1、S2、S3等

 

 

一、先将主库设置成只读模式,等新主库完全追上旧主库后,再通过kingshard中间件切换主库:最佳选择方案:优点是简单快速安全:缺点是会有几秒主库不可写:

1,变更kingshard中间件从库的流量:先将中间件配置的从库更换到新主库的所有从库:此时从库就是新主库的所有从库。

2,将旧主库M1配置成只读模式:set global  read_only=1;        新主库配置成可读写模式:set global  read_only=0;   然后在旧主库上执行show master status\G; 在新主库上执行show slavestatus\G;直到新主库追上旧主库,便可执行下面步骤:

3,变更kingshard中间件的主库流量:将中间件配置的主库更换到新主库:

 

二、更改旧主库和新主库的步长:其他步骤和一差不多,在步骤2有差异,不同的是,不再将旧主库设置为只读了。优点是主库一直可读写:缺点是麻烦不安全且容易搞出问题:

1,变更kingshard中间件从库的流量:先将中间件配置的从库更换到新主库的所有从库:此时从库就是新主库的所有从库。

2,更改步长:但需要让连接生效:老的连接并不会立马生效,因此需要将sleep的连接杀掉一次:

# ################################

    # show variables like '%auto_inc%';

    # 旧主库更改为:set global auto_increment_increment=2;set global auto_increment_offset=2;set global read_only=0;

     # pt-kill --host=旧主库 --port=3306  --user=UUU --password=XXX  --match-command Sleep  --kill  --victims all --interval 10 --print

    # show variables like '%auto_inc%';

    ################################ 旧主库执行汇总如下:

    # set global sync_binlog=1; set global innodb_flush_log_at_trx_commit=1; flush logs; set global long_query_time=0; set global auto_increment_increment=2;set global auto_increment_offset=2;set global read_only=0;

 

    ################################### 新主库执行:

    # show variables like '%auto_inc%';

    # 新主库更改为:set global auto_increment_increment=2;set global auto_increment_offset=1;set global read_only=0;

    # pt-kill --host=新主库 --port=3306 --user=UUU --password=XXX  --match-command Sleep  --kill  --victims all --interval 10 --print

    # show variables like '%auto_inc%';

    ################################### 新主库执行汇总:

    # set global sync_binlog=1; set global innodb_flush_log_at_trx_commit=1; flush logs;set global auto_increment_increment=2;set global auto_increment_offset=1;set global read_only=0;

3,主从切换。

4,再次更改新主库的步长,恢复原来的步长。

5,执行如下命令让更改步长生效:不然业务那边insert的数据,还是不连续的自增id。目的就是处理自增值offset生效问题。

# flush tables;

# flush logs;

 

 

 

######################