zoukankan      html  css  js  c++  java
  • 复制过滤

    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;
  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/igoodful/p/13052286.html
Copyright © 2011-2022 走看看