萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mariadb multi

mariadb multi

下文一起來看看mariadb multi-source replication(mariadb多主復制)例子,希望對各位有幫助。

mariadb multi-source replication(mariadb多主復制)
在mariadb-10.0裡面加入了多主復制功能.

修改過的語法:
針對每個復制線程會有一個對應的connection_name,而connection_name是default_master_connection變量的值,如果你要操作對應的復制線程,需要將這個變量設置為對應的復制線程的名字。
connection_name的值是長度小於64的任何字符串,並且對大小寫不敏感。你需要盡量讓連接名固定,因為它會被作為文件名的一部分。

以下是新增加的一些語法:
關注點主要在connection_name,也就是在以前的語法上增加了connection_name,如果沒加connection_name,那麼默認的就是空(”).
CHANGE MASTER ['connection_name'] …
FLUSH RELAY LOGS ['connection_name']
MASTER_POS_WAIT(….,['connection_name'])
RESET SLAVE ['connection_name']
SHOW RELAYLOG ['connection_name'] EVENTS
SHOW SLAVE ['connection_name'] STATUS
SHOW ALL SLAVES STATUS
START SLAVE ['connection_name'...]]
START ALL SLAVES …
STOP SLAVE ['connection_name'] …
STOP ALL SLAVES …

原來的老式的連接是一個空字符串 ”,如果你不想用的話可以不用這個連接。
你可以使用change master創建一個新的master 連接。
你可以使用reset slave ‘connect_name’ ALL;完全的刪除一個連接。

多源復制的變量
新復制變量 @@default_master_connection 指定了如果你不指定一個連接的話那個鏈接將會被命令和變量使用。
默認這個值是 ” (默認連接名)。下面的復制變量是針對局部的連接的(換句話說,他們顯示了 @@default_master_connection 的值)。
我們正致力於將重要的對於連接局部化。
類型  名稱  描述
變量 Max_relay_log_size  relay log的最大值. 如果是0的話,那麼在啟動的時候就會被設置成 max_binlog_size 的大小
狀態 Slave_heartbeat_period  多久從master請求一個心跳包 (以秒計算).
狀態 Slave_received_heartbeats  我們從master收到了多少個心跳包.
狀態 Slave_running  顯示slave是否正在運行。YESS表示 sql 和 IO 線程是活動的。No表示其中任意一個沒在運行中。”"表示 @@default_master_connection 不存在。
變量 Sql_slave_skip_counter  復制日志要忽略多少個條目(主要用在日志中有錯誤的情況下)。
你可以用 SESSION 或者是 GLOBAL 訪問以上所有的變量。
注意,和MySQL形成對比的是,所有的變量總是顯示正確的有效的值!
例如:
set @@default_master_connection=”;
show status like ‘Slave_running’;
set @@default_master_connection=’other_connection’;
show status like ‘Slave_running’;

如果 @@default_master_connection 包含一個不存在的名稱,你將收到一個警告.
所有其他的master相關的變量都是全局的,並且影響 “” 連接或者是所有的連接。例如, Slave_retried_transactions 現在顯示所有的slave的重試事務次數。

新添加的狀態變量:
名稱  描述
Com_start_all_slaves 執行 START ALL SLAVES 命令的次數。
Com_start_slave  執行 START SLAVE 命令的次數。取代了 Com_slave_start.
Com_stop_slave  執行 STOP SLAVE 命令的次數。取代了 Com_slave_stop.
Com_stop_all_slaves  執行 STOP ALL SLAVES 命令的次數

SHOW ALL SLAVES STATUS 有以下的新的列:
名稱  描述
Connection_name  master的連接名。 這是第一個變量
Slave_SQL_State  SQL 線程的狀態
Retried_transactions 這個連接重試事務的次數。
Max_relay_log_size  這個連接的最大的relay日志的大小。
Executed_log_entries slave已經指向了多少個日志條目。
Slave_received_heartbeats 從master獲得了多少個心跳。
Slave_heartbeat_period 多久從master請求一個心跳包(以秒計算)。

新文件
被多源復制使用的新文件的基本准則是:他們有在擴展名前被冠以 連接名 前綴的和原來的中繼日志文件類似的名字。
主要的例外是,保存所有連接名字的 文件master-info-file 被簡單的命名為帶有 multi- 前綴的 master-info-file 。

當你使用多源復制的時候,下面的文件將被創建:
名稱  描述
multi-master-info-file  master-info-file (一般是 master.info) 帶上了 multi- 前綴。這裡面是所有使用中的master連接信息。
master-info-file-connection_name.extension 包含了當前master應用到slave的位置。擴展名一般是 .info
relay-log-connection_name.xxxxx relay-log 有了一個 connection_name 的前綴. xxxxx 是 relay log 的編號。這裡面保存的是從master讀取的復制數據。
relay-log-index-connection_name.extension 包含可用的 relay-log-connection_name.xxxxx 文件的名字。擴展名一般是 .index
relay-log-info-file-connection_name.extension 包含relay日志中的當前master的位置。擴展名一般是 .info

當創建這些文件的時候,連接名被轉化成小寫的,並且其中所有的特殊字符都被轉化了,就和mysql表名中的特殊字符被轉化一樣。這樣做是為了方便文件名可以在不同系統上移植。
提示:
你只需要指定 –log-base-name ,所有的其他變量將會使用這個作為前綴,而不用為mysqld指定 –relay-log, –relay-log-index,–general-log, –slow-log, –log-bin, –log-bin-index 這些的名字。

其他事項
所有slave的錯誤信息都會加上connection name,然後被寫入到error log.
ER_MASTER_INFO和WARN_NO_MASTER_INFO現在會加上connection_name
這裡沒有沖突的解決方案,我們假設所有的master之間沒有沖突.
所有執行的命令都被存儲在正常的binary log裡面。
如果你server variable log_warnings>1,那麼你就會收到一些multi-master-info文件更新的信息
show slave status;看見的第一行是增加的,叫做connection_name.
reset slave命令現在會刪除所有的relay-log文件。

典型的使用案例
將多個master的數據整合到一個slave上,方面查詢分析。
將多個mariadb/mysql服務器的數據整合到一個slave,方便備份。

受限的事項
一個slave最多可以有64個master
每個活躍的連接會創建兩個線程(和mariadb復制相同)
你需要確認所有的master需要有不同的server-id。
max_relay_log_size在啟動後修改是不能生效的。
innodb-recovery-update-relay-log值對默認的復制連接生效,這個參數是xtradb的特新用來存儲relay log的位置號。但是這個方案存在安全隱患,我們不推薦使用
Slave_net_timeout對所有參數有效,我們不檢查它是否小於Slave_heartbeat_period,因為對多主復制來說沒有特別意義。

將要完成的功能
multi-source現在還不支持semisync,我們將在下個release版本中解決。
所有關於multi-source的bugs可以在這裡找到https://mariadb.atlassian.net/secure/IssueNavigator.jspa?mode=hide&requestId=11400
允許多線程復制

與mariadb/mysql 5.5不兼容的地方
max_relay_log_size is now (almost) a normal variable and not automatically changed if max_binlog_size is changed. To keep things compatible with old config files, we set it to max_binlog_size at startup if its value is 0.
You can now access replication variables that depend on the active connection with either GLOBAL or SESSION.
We only write information about relay log positions for recovery if innodb-recovery-update-relay-log is set.
Slave_retried_transaction now shows the total count of retried transactions over all slaves.
The status variable Com_slave_start is replaced with Com_start_slave.
The status variable Com_slave_stop is replaced with Com_stop_slave.
FLUSH RELAY LOGS are not replicated anymore. This is not safe as connection names may be different on the slave.

TIPS:
mysql庫需要過濾掉,不能復制.
半同步(Semi-sync)暫時無法使用。
如果需要sql_slave_skip_counter,需要先制定一個通道 set @@default_master_connection=’connection_name’

copyright © 萬盛學電腦網 all rights reserved