show binary logs;/*至關於*/show master logs; show binlog events; show master status; show slave hosts;
語法:mysql
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
log_name或者datetime_expr以前的日誌文件將會被刪除,此處binary和master是同義詞。
datetime_expr日期格式必須爲'YYYY-MM-DD hh:mm:ss'。
例子:sql
PURGE BINARY LOGS TO 'mysql-bin.010'; PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';
當slave正在從master上覆制時,上述的語句的執行也是安全的,若是要刪除的文件正在被slave讀取,那麼這個文件將不會被刪除。
若是刪除了slave還未複製的日誌文件,那麼slave沒法同步這部分被刪除的數據。安全
當要清楚binary logs時,如下步驟是最佳實踐:服務器
show slave status
查看正在同步哪一個binary log。show binary logs
查看日誌文件列表purge
命令清除日誌。purge命令是根據.index文件裏所列的日誌文件來進行刪除的(.index的前綴就是binlog的名字,這個文件是由mysqld維護的),若是一個日誌文件在操做系統中不存在(例如被人爲地經過rm
命令刪除),而.index文件裏又記錄了這個日誌文件,那麼purge命令會報錯。微信
語法:session
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:ui
stop slave
命令,而後執行reset slave
,並確認數據是否刪除了數據。reset master
命令經過以上步驟,在測試的時候,就能夠清空master的binary log,而且從新開始replication的測試。spa
命令:
set sql_log_bin=0|1;
0, 不一樣步至slave
1, 同步至slave
能夠在session內進行設置,也能夠在全局範圍內設置(設置後新建的session會有影響,但已經存在的session不會受影響)
show slave status; show relaylog events;
語法:
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的概念等等。待補充。
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`)。
各個選項的做用,待補充。
確切來講,這個一個函數,而非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。
語法
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進程。
SET GLOBAL sql_slave_skip_counter = N
語法:
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並執行。
語法
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,存儲引擎,以及事務型表和非事務型表。
start group_replication; stop group_replication;