mysql如何在线修改主从复制选项

 更新时间:2020年08月10日 09:34:56   作者:David Beazley  
这篇文章主要介绍了mysql如何在线修改主从复制选项,帮助大家更好的理解和学习mysql,感兴趣的朋友可以了解下

前言:

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

总结:

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

以上就是mysql如何在线修改主从复制选项的详细内容,更多关于mysql修改主从复制的资料请关注脚本之家其它相关文章!

相关文章

  • mysql中的存储过程传参问题

    mysql中的存储过程传参问题

    这篇文章主要介绍了mysql中的存储过程传参问题,具有很好的参考价值,希望对大家有所帮助,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • MySQL中的datediff()方法和timestampdiff()方法的应用示例小结

    MySQL中的datediff()方法和timestampdiff()方法的应用示例小结

    在MySQL中,DATEDIFF()函数和TIMESTAMPDIFF()函数用于计算日期和时间之间的差异,TIMESTAMPDIFF()函数返回的结果是整数,但你可以通过在计算过程中使用适当的除法来获得所需的小数部分,本文介绍MySQL中的datediff()方法和timestampdiff()方法的应用,感兴趣的朋友一起看看吧
    2023-12-12
  • 优化Mysql数据库的8个方法

    优化Mysql数据库的8个方法

    本文通过8个方法优化Mysql数据库:创建索引、复合索引、索引不会包含有NULL值的列、使用短索引、排序的索引问题、like语句操作、不要在列上进行运算、不使用NOT IN和<>操作
    2013-11-11
  • 基于MYSQL中优化的一些方法

    基于MYSQL中优化的一些方法

    本篇文章是对MYSQL中优化的一些方法进行了详细的介绍,需要的朋友参考下
    2013-05-05
  • MySQL报错:The server quit without updating PID file的解决思路与方法

    MySQL报错:The server quit without updating PID file的解决思路

    最近在学习mysql二进制的时候遇到了个报错,解决分享给大家,这篇文章主要给大家介绍了关于MySQL报错:The server quit without updating PID file的解决思路与方法,需要的朋友可以参考下
    2023-02-02
  • MySQL的MRR(Multi-Range Read)优化原理解析

    MySQL的MRR(Multi-Range Read)优化原理解析

    MRR优化是MySQL中一种重要的查询优化技术,它通过减少磁盘I/O的随机性和提高缓存效率,显著提升了查询性能,这篇文章主要介绍了MySQL的MRR(Multi-Range Read)优化原理详解,需要的朋友可以参考下
    2024-08-08
  • 浅谈MySQL存储过程中declare和set定义变量的区别

    浅谈MySQL存储过程中declare和set定义变量的区别

    下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • MYSQL常用命令与实用技巧

    MYSQL常用命令与实用技巧

    MYSQL常用命令与实用技巧...
    2007-07-07
  • MySQL 绿色版安装方法图文教程

    MySQL 绿色版安装方法图文教程

    MySQL 绿色版安装方法教程,需要的朋友可以参考下。
    2012-01-01
  • MySql官方手册学习笔记1 MySql简单上手

    MySql官方手册学习笔记1 MySql简单上手

    这是我学习MySql 5.1时做的一些整理与笔记,希望能理一理自己学到的东西,如果能有助于各位同道学习MySql那就更是意外之喜了,呵呵
    2012-10-10

最新评论