控制Master1. SHOW相关show binary logs;/*相当于*/show master logs; show binlog events; show master status; show slave hosts; 2. binary logs清除语法: PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr } log_name或者datetime_expr之前的日志文件将会被删除,此处binary和master是同义词。 datetime_expr日期格式必须为'YYYY-MM-DD hh:mm:ss'。 例子: PURGE BINARY LOGS TO 'mysql-bin.010'; PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26'; 当slave正在从master上复制时,上述的语句的执行也是安全的,如果要删除的文件正在被slave读取,那么这个文件将不会被删除。如果删除了slave还未复制的日志文件,那么slave无法同步这部分被删除的数据。 当要清楚binary logs时,以下步骤是最佳实践:
purge命令是根据.index文件里所列的日志文件来进行删除的( .index的前缀就是binlog的名字,这个文件是由mysqld维护的 ),如果一个日志文件在操作系统中不存在(例如被人为地通过 rm 命令删除),而.index文件里又记录了这个日志文件,那么purge命令会报错。 3. 重置Master语法: reset master; 这个命令会删除.index文件里所列举的所有binary logs,清空.index文件并产生一个新的空的binary log文件。 这个命令还会重置 gtid_purged 和 gtid_executed 这两个系统变量为空字符串(会话范围内的变量值不会被重置),并且从MySQL5.7.5开始,这个命令还会清空mysql.gtid_executed 表。 reset命令和purge命令的区别当有slave正在进行数据同步时,不应该使用(也不支持)reset master命令,可能带来未知的后果,不过purge命令则可以在slave运行时安全地使用。 当在测试环境中,需要经常初始化设置master和slave时,使用 reset master 的好处多多,可以按以下步骤初始master-slave:
通过以上步骤,在测试的时候,就可以清空master的binary log,并且重新开始replication的测试。 4. 暂停replication命令: set sql_log_bin=0|1; 0, 不同步至slave1, 同步至slave 可以在session内进行设置,也可以在全局范围内设置(设置后新建的session会有影响,但已经存在的session不会受影响) 控制Slave1. SHOW相关show slave status; show relaylog events; 2. 指向Master语法: CHANGE MASTER TO option [, option] ... [ channel_option ] option: MASTER_BIND = 'interface_name' | MASTER_HOST = 'host_name' | MASTER_USER = 'user_name' | MASTER_PASSWORD = 'password' | MASTER_PORT = port_num | MASTER_CONNECT_RETRY = interval | MASTER_RETRY_COUNT = count | MASTER_DELAY = interval | MASTER_HEARTBEAT_PERIOD = interval | MASTER_LOG_FILE = 'master_log_name' | MASTER_LOG_POS = master_log_pos | MASTER_AUTO_POSITION = {0|1} | RELAY_LOG_FILE = 'relay_log_name' | RELAY_LOG_POS = relay_log_pos | MASTER_SSL = {0|1} | MASTER_SSL_CA = 'ca_file_name' | MASTER_SSL_CAPATH = 'ca_directory_name' | MASTER_SSL_CERT = 'cert_file_name' | MASTER_SSL_CRL = 'crl_file_name' | MASTER_SSL_CRLPATH = 'crl_directory_name' | MASTER_SSL_KEY = 'key_file_name' | MASTER_SSL_CIPHER = 'cipher_list' | MASTER_SSL_VERIFY_SERVER_CERT = {0|1} | MASTER_TLS_VERSION = 'protocol_list' | IGNORE_SERVER_IDS = (server_id_list) channel_option: FOR CHANNEL channel server_id_list: [server_id [, server_id] ... ] CHANGE MASTER TO用来重新设置slave,使其指向新的master,或者仅仅是改变一些上面提到的option。这个命令在MySQL5.7.4及其以上版本增加了许多特性,例如channel的概念等等。待补充。 3. replication过滤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 从MySQL5.7.3开始, CHANGE REPLICATION FILTER 命令用来为slave设置一个或多个复制过滤规则,比如说`-- replicate-do-db 或者 --replicate-wild-ignore-table ,这些选项不像服务器选项,重置后还需要重启mysql才生效,这些选项可以动态修改,只需要先停止slave的SQL线程,设置后,再重启SQL线程( start|stop slave sql_thread`)。 各个选项的作用,待补充。 4. MASTER_POS_WAIT()确切来说,这个一个函数,而非SQL语句 。 SELECT MASTER_POS_WAIT('master_log_file', master_log_pos [, timeout][, channel]) 这里的file和pos对应主库show master status得到的值,代表执行位置。 函数逻辑是等待当前从库达到这个位置后返回, 返回期间执行的事务个数。 参数timeout可选,若缺省则无限等待,timeout<=0时与缺省的逻辑相同。若为正数,则等待这么多秒,超时函数返回-1. 其他返回值:若当前slave为启动或在等待期间被终止,返回NULL; 若指定的值已经在之前达到,返回0。 5. 重置slave语法 RESET SLAVE [ALL] [channel_option] channel_option: FOR CHANNEL channel 这个命令清除了slave保存的关于master和relay log的信息,删除所有的relay log。使用这个命令,slave的replication线程必须先停下来。 这个命令还有影响到channel,待补充。 reset slave 不会改变slave与master的连接信息,比如master的ip地址,端口,用户名和密码等, reset slave all 将会重置连接的信息,因此这意味着需要重启slave的mysqld进程。 6. 跳过执行SET GLOBAL sql_slave_skip_counter = N 7. start slave语法: START SLAVE [thread_types] [until_option] [connection_options] [channel_option] thread_types: [thread_type [, thread_type] ... ] thread_type: IO_THREAD | SQL_THREAD until_option: UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set | MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos | RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos | SQL_AFTER_MTS_GAPS } connection_options: [USER='user_name'] [PASSWORD='user_pass'] [DEFAULT_AUTH='plugin_name'] [PLUGIN_DIR='plugin_dir'] channel_option: FOR CHANNEL channel gtid_set: uuid_set [, uuid_set] ... | '' uuid_set: uuid:interval[:interval]... uuid: hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh h: [0-9,A-F] interval: n[-n] (n >= 1) 不指定thread_type时,IO线程和SQL线程都会被启动,IO线程从master读取日志,SQL线程读取relay log并执行。 8. stop slave语法 STOP SLAVE [thread_types] thread_types: [thread_type [, thread_type] ... ] thread_type: IO_THREAD | SQL_THREAD channel_option: FOR CHANNEL channel 当停止slave服务器时,应先执行 stop slave 停止slave功能。 执行这个命令时,还需要考虑是基于行的replication还是基于语句的replication,存储引擎,以及事务型表和非事务型表。 控制Group复制start group_replication; stop group_replication;(责任编辑:好模板) |