• 复制过滤


    replication 中通过以下参数减少binlog数据量

    一、master端:

    --binlog-do-db 二进制日志记录的数据库(多数据库用逗号,隔开),尽量不要使用。
    
    --binlog-ignore-db 二进制日志中忽略数据库 (多数据库用逗号,隔开),尽量不使用。
      以下是mysql主从忽略授权表的方法案例: in master:

    [mysqld] binlog
    -do-db=YYY 需要同步的数据库。不添加这行表示同步所有 binlog-ignore-db = mysql 这是不记录binlog,来达到从库不同步mysql库,以确保各自权限 binlog-ignore-db = performance_schema binlog-ignore-db = information_schema

    二、slave端



    [mysqld]

    --
    replication-do-db 设定需要复制的数据库(多数据库使用逗号,隔开),尽量不使用。 --replication-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开),尽量不使用。 --replication-do-table 设定需要复制的表,尽量不使用。 --replication-ignore-table 设定需要忽略的复制表,尽量不使用。 --replication-wild-do-table 同replication-do-table功能一样,但是可以通配符,最佳使用。 --replication-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符,最佳使用,但与--replication-wild-do-table尽量不同时使用。

    # 尽量使用--replication-wild-do-table和--replication-wild-ignore-table,但不宜两者同时使用,而是使用这两者之一即可。
    
    
    auto@10.10.10.20((none)) > show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Queueing master event to the relay log
                      Master_Host: 10.10.10.10
                      Master_User: mysqlsync
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.009129
              Read_Master_Log_Pos: 394218960
                   Relay_Log_File: relay-bin.000256
                    Relay_Log_Pos: 126295006
            Relay_Master_Log_File: mysql-bin.009129
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: analysis.property_define,analysis.define,analysis.property
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 126294801
                  Relay_Log_Space: 394219401
                  Until_Condition: Master
                   Until_Log_File: mysql-bin.009161
                    Until_Log_Pos: 224619836
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 157399
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 175511070
                      Master_UUID: 99bacfbb-518b-11ea-af0c-34b35428066b
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Reading event from the relay log
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
                    Auto_Position: 0
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
    1 row in set (0.00 sec)
    
    Sat Jun  6 10:33:18 2020
    auto@10.10.10.10((none))
    
    
    #######################################
    
    # 如上所示:Replicate_Wild_Do_Table: analysis.property_define,analysis.define,analysis.property
    
    # 表示该从库只同步analysis数据库的3张表:property_define,define,property
    # 如上图所示: 
    Until_Condition: Master
    Until_Log_File: mysql-bin.009161
    Until_Log_Pos: 224619836
    
    # 这三者表示该从库执行了:start slave sql_thread until master_log_file='mysql-bin.009161',master_log_pos=224619836; 

    三、在线配置复制过滤

    在MySQL5.5/5.6里版本里,设置同步复制过滤,例如设置忽略掉test库的t2表,你需要在my.cnf配置文件里增加:
    
    replicate-ignore-table=test.t2
    必须重启mysql服务进程才能生效。
    
    
    
    在MySQL5.7里,通过一个新的命令,可以支持在线动态修改,而不须重启mysql进程就生效。
    
    Example:
    
    CHANGE REPLICATION FILTER REPLICATE_DO_DB=(db1,db2);
    CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB=(db1,db2);
    CHANGE REPLICATION FILTER REPLICATE_DO_TABLE=(db1.t1);
    CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE=(db2.t2);
    CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE=('db.t%');
    CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE=('db%.a%');
    CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((from_db, to_db));




    change replication filter  replicate_wild_do_table=('sentry.%','hive.%','mysql.%');

     

    13.4.2.2更改复制过滤器语句
    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
    CHANGE REPLICATION FILTER设置从服务器上的一个或多个复制过滤规则,方法与使用复制过滤选项(例如 或) 启动从服务器mysqld相同。
    与使用服务器选项的情况不同,此语句不需要重新启动服务器即可生效,只需要先使用从SQL线程停止(然后再使用SQL线程 重新启动 )即可。
    需要 特权。
    --replicate-do-db
    --replicate-wild-ignore-table
    STOP SLAVE SQL_THREAD
    START SLAVE SQL_THREAD
    CHANGE REPLICATION FILTER SUPER
    注意 无法在为组复制配置的MySQL服务器实例上设置复制过滤器,因为在某些服务器上过滤事务将使该组无法就一致状态达成协议。 以下列表显示了CHANGE REPLICATION FILTER选项及其与 --replicate-*服务器选项的关系: REPLICATE_DO_DB:包括基于数据库名称的更新。等同于 --replicate-do-db。 REPLICATE_IGNORE_DB:根据数据库名称排除更新。等同于 --replicate-ignore-db。 REPLICATE_DO_TABLE:包括基于表名的更新。等同于 --replicate-do-table。 REPLICATE_IGNORE_TABLE:根据表名排除更新。等同于 --replicate-ignore-table。 REPLICATE_WILD_DO_TABLE:包括基于通配符模式匹配表名称的更新。等同于 --replicate-wild-do-table。 REPLICATE_WILD_IGNORE_TABLE:排除基于通配符模式匹配表名称的更新。等同于 --replicate-wild-ignore-table。 REPLICATE_REWRITE_DB:在从属服务器上用新名称替换主服务器上的指定数据库后,对从属服务器执行更新。等同于 --replicate-rewrite-db。 REPLICATE_DO_DB和 REPLICATE_IGNORE_DB过滤器 的确切效果取决于是基于语句的复制还是基于行的复制。有关更多信息,请参见第16.2.5节“服务器如何评估复制过滤规则”。 CHANGE REPLICATION FILTER通过用逗号分隔 规则,可以在单个语句中创建多个复制过滤规则 ,如下所示: CHANGE REPLICATION FILTER REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2); 发出刚刚显示的语句等同于使用选项 启动从属mysqld。 --replicate-do-db=d1 --replicate-ignore-db=d2 如果多次指定同一过滤规则,则实际上仅使用 最后一个这样的规则。例如,此处显示的两个语句具有完全相同的效果,因为REPLICATE_DO_DB 忽略了第一条语句中的第一条规则: CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4); CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db3,db4); 警告 此行为与--replicate-*过滤器选项的行为不同,后者 多次指定同一选项会导致创建多个过滤器规则。 表和数据库的名称不包含任何特殊字符,无需引用。与REPLICATION_WILD_TABLE和 REPLICATION_WILD_IGNORE_TABLE一起使用的值 是字符串表达式,可能包含(特殊)通配符,因此必须加引号。在以下示例语句中显示了这一点: CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.old%'); CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db1.new%', 'db2.new%'); 与一起使用的值REPLICATE_REWRITE_DB 表示成对的数据库名称。每个此类值都必须用括号括起来。以下语句db1将在主数据库db2上发生的语句重写为从数据库上的 语句 : CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2)); 刚刚显示的语句包含两组括号,一组包含一对数据库名称,另一组包含整个列表。这也许是更容易看到在下面的例子中,它创建了两个 rewrite-db规则,一个重写的数据库 dbA来dbB,和一个重写数据库dbC到 dbD: CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD)); 该语句使所有现有的复制过滤规则保持不变;要取消设置给定类型的所有过滤器,请将过滤器的值设置为一个明确为空的列表,如本示例所示,该列表将删除所有现有 规则REPLICATE_DO_DB和 REPLICATE_IGNORE_DB规则: CHANGE REPLICATION FILTER REPLICATE_DO_DB = (), REPLICATE_IGNORE_DB = (); 以这种方式将过滤器设置为空会删除所有现有规则,不会创建任何新规则,也不会还原使用--replicate-* 命令行或配置文件中的选项在mysqld启动时设置的任何规则。 REPLICATE_WILD_DO_TABLE 和REPLICATE_WILD_IGNORE_TABLE一起 使用的值必须采用格式 。在MySQL 5.7.5之前,这不是严格执行的,尽管在这些选项中使用不一致的值可能会导致错误的结果(错误#18095449)。 db_name.tbl_name

    四、配置文件中配置复制过滤

    ############################ 
    
     my.cnf配置文件中配置
    
    ############################
    
    [mysqld]
      replicate_wild_do_table=miui_log_sdk.%
      replicate_wild_do_table=mysql.%
      replicate_wild_do_table=dba_metadata.%
    
    
    
    
    
    #############################
    
    2. 在线配置复制过滤
    
    ############################
    
    > stop slave;
    
    > reset slave all;
    
    > reset master;
    
    > change master to master_host='10.10.10.10',master_port=3306,master_user='mysqlsync',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=150;
    > change replication filter replicate_wild_do_table=('dba_metadata.%','miui_log_sdk.%','mysql.%');
    > start slave;
  • 相关阅读:
    mybatis配置
    mybatis 多表查询 与配置
    Maven中资源导出问题解决方案--pom.xml配置
    【macOS】Mac App Store 无法 更新/下载
    【macOS】删除 Mac 上的 Office 许可证文件
    【前端】JavaScript学习笔记(一)——快速入门
    【前端】CSS3学习笔记(五)——定位
    【前端】CSS3学习笔记(四)——浮动
    【前端】CSS3学习笔记(三)——盒子模型
    【macOS】清除Finder 「前往」(⌘
  • 原文地址:https://www.cnblogs.com/igoodful/p/13052286.html
Copyright © 2020-2023  润新知