在线修改主从复制选项(代码片段)

author author     2023-04-27     632

关键词:

前言:?

MySQL最常用的架构就是主从复制了,其实主从复制有很多选项,特别是在从库端,我们可以设置复制过滤,比如说忽略某张表或某个库。这些过滤选项都是可以在线修改而不用重启的。原来对这块了解不多,最近看了下相关资料,个人觉得这个功能还是很方便的,本篇文章会将这块内容分享给大家。

1.复制过滤参数介绍

首先我们要了解设置复制过滤的不同参数。复制过滤是在从库端设置的,可以只复制某些库或某些表,也可以忽略复制某些库或某些表。这些都是由不同参数控制的,下面简单介绍下不同参数的作用。

  • REPLICATE_DO_DB:指定只同步某个库的数据
  • REPLICATE_IGNORE_DB:忽略某个库的同步
  • REPLICATE_DO_TABLE:指定同步某个表
  • REPLICATE_IGNORE_TABLE:忽略某个表的同步
  • REPLICATE_WILD_DO_TABLE:指定同步某些表,可以用通配符
  • REPLICATE_WILD_IGNORE_TABLE:忽略某些表的同步,可以用通配符
  • REPLICATE_REWRITE_DB:从库端替换库名

这些复制过滤参数还是很好理解的,只看名字就能大概了解该参数的作用。默认情况下,这些参数是都没有设置的,开启主从复制后从库端会默认同步全部从主库发来的数据。

2.修改复制过滤选项

当我们想临时调整从库的复制策略时,可以设置上述参数。我们可以将过滤参数写入配置文件然后重启从库即可应用,但这种方法需要重启实例,不做推荐。MySQL5.7版本可以进行在线设置复制过滤了。但是还是得停复制,不过不用重启实例了,方便进行临时性的调整。主要用到的是CHANGE REPLICATION FILTER语句,下面就简单的测试一下:

# 默认未设置复制过滤
mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.3.16
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 35198
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 910
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 35198

 # 设置忽略db1库的复制
 mysql> STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (db1);
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.3.16
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 35198
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 910
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: db1
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 35198

# 主库创建db1测试从库是否同步
mysql> CREATE DATABASE `db1` DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.00 sec)
# 查看从库状态
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
5 rows in set (0.00 sec)

mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.3.16
                  Master_User: repl
                  Master_Port: 33061
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 35383
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 1095
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: db1
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 35383

# 取消复制过滤参数
mysql> STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = ();
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.3.16
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000004
          Read_Master_Log_Pos: 35383
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 1095
        Relay_Master_Log_File: binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 35383

上面我们简单演示了下使用CHANGE REPLICATION FILTER语句在线修改复制过滤选项的方法,列举的那些过滤参数都可以使用该语句修改,不过要注意有些选项是互斥的。应该按照实际需求去设置合适的参数,下面给出官方文档中的示范语法:

CHANGE REPLICATION FILTER filter[, filter][, ...]

filter:
    REPLICATE_DO_DB = (db_list)
  | REPLICATE_IGNORE_DB = (db_list)
  | REPLICATE_DO_TABLE = (tbl_list)
  | REPLICATE_IGNORE_TABLE = (tbl_list)
  | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)
  | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)
  | REPLICATE_REWRITE_DB = (db_pair_list)

db_list:
    db_name[, db_name][, ...]

tbl_list:
    db_name.table_name[, db_table_name][, ...]
wild_tbl_list:
    ‘db_pattern.table_pattern‘[, ‘db_pattern.table_pattern‘][, ...]

db_pair_list:
    (db_pair)[, (db_pair)][, ...]

db_pair:
    from_db, to_db

总结:?

本篇文章介绍了如何在线更改复制过滤选项的方法,不同的过滤参数有不同的用途,如果你确实有需求要设置过滤参数,建议一定要进行全面测试,某些参数设置后可能影响到其他库表的复制。如果想永久生效,可以在线修改后再加入配置文件内,这样从库重启后还是生效的。

mysql的主从复制(代码片段)

...sql复制特点主从复制配置过程主节点从节点配置演示主机修改my.ini配置文件(Windows)从机修改my.cnf配置文件(Linux)因为修改过配置文件,主机和从机都需要重启mysql服 查看详情

redis(主从复制哨兵模式集群)概述及部署(代码片段)

...1、环境配置/安装包2、安装Redis(所有主机)3、修改Master节点Redis配置文件4、修改Slave节点Redis配置文件5、验证主从效果二、Red 查看详情

缓存加速------redis主从复制,哨兵模式,集群(代码片段)

...主从复制流程4.搭建Redis主从复制①环境准备②安装Redis③修改Redis配置文件(Master节点操作)④修改Redis配置文件(Slave节点操作)⑤验证主从效果⑥在Master节点上验证Slave节点二.Redis哨兵模式1.哨兵模式原理2.哨兵模式的作用3.哨兵模式... 查看详情

缓存加速------redis主从复制,哨兵模式,集群(代码片段)

...主从复制流程4.搭建Redis主从复制①环境准备②安装Redis③修改Redis配置文件(Master节点操作)④修改Redis配置文件(Slave节点操作)⑤验证主从效果⑥在Master节点上验证Slave节点二.Redis哨兵模式1.哨兵模式原理2.哨兵模式的作用3.哨兵模式... 查看详情

详解redis主从复制(代码片段)

文章首发于公众号“蘑菇睡不着”前言Redis的主从复制和MySQL差不多,主要起着数据备份,读写分离等作用。所以说主从复制对Redis来说非常重要,而无论是面试还是工作总,了解Redis主从复制底层实现有非常有必要,那么接下来... 查看详情

mysql运维主从复制--主从复制概述主从复制原理搭建mysql主从复制(代码片段)

...制概述2.主从复制原理3.搭建3.1服务器准备3.2主库配置3.2.1修改配置文件/etc/my.cnf3.2.2重启MySQL服务器3.2.3登录mysql,创建远程连接的账号,并授予主从复制权限3.2.4通过指令,查看二进制日志坐标3.3从库配置3.3.1修改配置... 查看详情

mysql数据库在线热备(主从复制之基于gtids的ab复制)(代码片段)

MySQL主从复制之基于GTIDs的AB复制架构(在线热备)基于GTIDs的AB复制架构(M-S)GTIDs概述基于GTIDs的主从复制第一步:修改配置文件支持GTIDs第二步:主从配置只读模式第三步:SLAVE重新配置changemasterto第四步:... 查看详情

redis高可用之主从复制哨兵模式集群模式(代码片段)

...搭建1.4.1环境准备,在主从服务器上安装Redis服务1.4.2修改Master节点Redis配置文件1.4.3修改Slave节点Redis配置文件验证主从效果二、Redis哨兵模式2.1哨兵模式的原理2.2哨兵模式的结构2.3部署哨兵模 查看详情

redis——主从复制哨兵模式集群服务(代码片段)

...dis一、主从复制1.1概述概念作用流程1.2服务搭建准备工作修改Redis配置文件验证主从二、哨兵模式2.1原理2.2作用2.3结构2.4服务搭建准备工作修改配置文件(所有节点)启动哨兵模式查看哨兵信息模拟故障查看结果三、集群... 查看详情

redis的主从复制哨兵模式以及群集模式(相关概念及实验详解)(代码片段)

...主从复制流程4.搭建Redis主从复制①环境准备②安装Redis③修改Redis配置文件(Master节点操作)④修改Redis配置文件(Slave节点操作)⑤验证主从效果⑥在Master节点上验证Slave节点二.Redis哨兵模式1.哨兵模式原理2.哨兵模式的作用3.哨兵模式... 查看详情

redis---主从复制(代码片段)

...IP地址:192.168.11.103/24主从服务器都要安装redis服务,分别修改redis监听的地址为192.168.11.101,192.168.11.1022、192.168.11.101主服务器,修改监听的IP地址root@Master:~#ss-lntup|grep6379tcpLISTEN0128127.0.0.1:63790.0.0.0:*users:(("redis-server",pid=1147,fd=6))root@M... 查看详情

mysql主从复制及其配置(代码片段)

...?3.原理4.配置4.1准备两台服务器(已经安装了MySQL)4.2修改配置4.2.1master主服务器4.2.2slave从服务器4.2.3验证1.为什么需要主从复制?在业务复杂的系统中,有这么一个情景:如果有一句sql语句需要锁表,导致暂时... 查看详情

mysql数据库--主从复制读写分离(代码片段)

...30)安装3、配置amoeba读写分离,两个slave读负载均衡4、修改amoeba主配置文件和数据库文件5、开启amoeba6 查看详情

mysql主从复制原理及一主一从搭建过程—2023.04(代码片段)

...、MySQL主从复制部署流程1.关闭防火墙,两台主机都操作2.修改配置文件,两台主机都操作3.修改主节点配置文件,主节点操作4.修改从节点配置文件,从节点操作5.测试6.特别说明增加同步的数据库到slave一、MySQL主从复制介绍1、... 查看详情

mariadb实现主从复制及旧服务器实现主从复制的详细步骤(代码片段)

一、主从复制(2台新主机)?1.实验环境:?两台mariadb(5.5.60)一主一从:主:192.168.36.121从:192.168.36.120?2.主节点?A.修改配置:vim/etc/my.cnf[mysqld]server_id=121innodb_file_per_tablebinlog_format=row建议log_bin=/data/bin/mysql-bin?B.查看位置信 查看详情

主从复制和读写分离(代码片段)

...授权3)配置Amoeba读写分离,两个slave负载均衡①修改amoeba配置文件②修改数据库配置文件4)测试读写分离在slave1:在slaves2上:在主服务器上:在客户端服务器上将两个服务器上执行statslave,可实现同步在主服务... 查看详情

mysql搭建主从复制(一主一从,双主双从)(代码片段)

...ysql中有一个binlog二进制日志,这个日志会记录下所有修改了的SQL语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器上执行一遍。流程图2|0搭建一主一从  2|1 前... 查看详情

redis主从哨兵sentineljedis(代码片段)

...dis的主从复制、Sentinel;一、主从复制1.配置在Master上修改redis.conf//不想用密码,所以把保护模式设置为noprotected-modeno//其实master上不需要配置什么,这里只是取消了保护模式在Slave1和Slave2上修改redis.conf//同样关闭保护... 查看详情