在线修改主从复制选项

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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 status\G
*************************** 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 status\G
*************************** 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 status\G
*************************** 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 status\G
*************************** 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


总结:


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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
8月前
|
弹性计算 NoSQL 网络安全
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
|
10月前
|
数据库 Python
PqQt实现对数据库的添加,删除,修改(完整过程演示
PqQt实现对数据库的添加,删除,修改(完整过程演示
1343 0
|
10月前
|
关系型数据库 MySQL
mysql 动态变量,可以在线修改
7.1.9.2 Dynamic System Variables
65 0
|
存储 关系型数据库 MySQL
头大了,Mysql写入数据十几秒后被自动删除了
头大了,Mysql写入数据十几秒后被自动删除了
107 0
|
SQL NoSQL 关系型数据库
二十五:从库的关闭和恢复流程(笔记)
一、stop slave流程 用户线程: stop_slave -> terminate_slave_threads ->带入参数rpl_stop_slave_timeout设置,作为等待SQL线程退出的超时时间。
890 0
|
SQL 存储 关系型数据库
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
快速学习PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
|
PHP 数据库 开发者
解决Thinkphp框架应用目录下数据库配置信息修改后依然按默认方式连接
背景:这一类问题,我碰到了两次,虽然是php开发者,但是很多东西要不是工作接触代码太多,可能都没发现。。。在修改了application下的database.php后依然报错 而我的数据库配置database.php是这样的: 【黑人问号】于是解决办法:修改后测试运行是否正常: 正常运行,完结撒花!...
176 0
解决Thinkphp框架应用目录下数据库配置信息修改后依然按默认方式连接
|
运维 NoSQL Java
从源码研究如何不重启项目实现redis配置动态切换
上一篇Websocket的续篇暂时还没有动手写,这篇算是插播吧。今天讲讲不重启项目动态切换redis服务。
从源码研究如何不重启项目实现redis配置动态切换
|
C# C++
VS2015 更改C++模式
亲爱的小伙伴,有没有发现你们的VS2015装完以后和老江湖们用的不一样了,人家的界面打开是这样的
304 0
VS2015 更改C++模式