mariadb multi-source replication(mariadb多主复制),在mariadb-10.0里面加入了多主复制功能。
针对每个复制线程会有一个对应的connection_name;
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 指定了;
我们正致力于将重要的对于连接局部化。
类型 名称 描述
变量 Max_relay_log_size relay log的最大值. 如果是0的话,那么在启动的时候就会被设置成 max_binlog_size 的大小
状态 Slave_heartbeat_period 多久从master请求一个心跳包 (以秒计算).
状态 Slave_received_heartbeats 我们从master收到了多少个心跳包.
状态 Slave_running 显示slave是否正在运行。YESS表示 sql 和 IO 线程是活动的。
变量 Sql_slave_skip_counter 复制日志要忽略多少个条目(主要用在日志中有错误的情况下)。
注意,和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
提示:
你只需要指定 –log-base-name ,所有的其他变量将会使用这个作为前缀;
其他事项
所有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
允许多线程复制
TIPS:
mysql库需要过滤掉,不能复制.
半同步(Semi-sync)暂时无法使用。
如果需要sql_slave_skip_counter,需要先制定一个通道 set @@default_master_connection=’connection_name’