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’

时间: 2024-11-03 03:51:53

mariadb multi-source replication(mariadb多主复制)的相关文章

Linux下的MYSQL主主复制

为什么,会有mysql的主主复制.因为在一些高可用的环境中,mysql的主从不能满足现实中的一些实际需求.比如,一些流量大的网站数据库访问有了瓶颈,需要负载均衡的时候就用两个或者多个的mysql服务器,而这些mysql服务器的数据库数据必须要保持一致,那么就会用到主主复制. mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全.在这种架构中如果从上的数据做了改变,主数据是不会用任何变化的.因为mysql主从架构主要是mysq

mysql主主复制(双主复制)配置步骤

MySQL主主复制结构区别于主从复制结构.在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务. 有了上一节的主从复制,那么主主复制就很容易了. 一.先修改配置文件 服务器A(192.168.1.254)配置如下   log-bin   = mysql-bin server-id = 1 expire-logs-days  = 100 replicate-do-db   = test binlog-ignore-db

MySQL主从复制、基于SSL的主从复制、主主复制及半同步复制

MySQL复制分为主从复制,主主复制. 什么是主从复制 主从复制指有一台器做为主服务器,一台或多台服务器做为从服务器.从服务器不写入任何数据,数据的来源是主服务器.复制的目的是为了数据同步,如果从服务器也写入数据的话,在主从架构里,主服务器是不会复制从服务器的数据的,所以会造成数据的不同步,所以,从服务器不能写入数据.MySQL复制的基础,就是二进制日志,因为二进志日志里面,记录了所有能改变或者能潜在改变数据库数据的SQL语句,当从服务器把这些SQL语句复制过来之后,再执行一遍,数据就会跟主服务

使用Rotate Master实现MySQL 多主复制的实现方法_Mysql

当然,5.6的GUID功能的出现也带来了multi-master的无限可能,不过这个已经是题外话了. 本文主要介绍一种非实时的适用于各版本MySQL的multi-master方法. 内容简介: 最初的思路来源于一位国外DBA的blog : http://thenoyes.com/littlenoise/?p=117 基本原理就是通过SP记录当前 master-log的name和pos记录到表中,然后读取下一个master记录,执行stop slave / change master / star

mysql 主主复制漏少量数据

问题描述 mysql 主主复制漏少量数据 各位大神: 我们自己公司的业务系统部署了mysql主主复制,但近期发现有张数据量较大的表中,每天都会有若干条数据在从库(被复制的那一方)中会丢失(未插入进去),查看主库的binlog中有这条insert语句,再查看从库的relay log中也有这条insert语句,但到了从库的binlog却没有了这条insert语句,这句语句周围其他一批commit的语句到都被执行了,两个库中的error日志都没有任何异常体现,未插入的数据看了一下也是比较正常的数据.请

IBM DB2 pureScale和Q Replication监视、调节复制并排除其故障

Q Capture 和 Q Apply 程序维护着大量数据库表,以记录有关复制过程的重要信息.这包括具有性能指标的监视表.包含程序信息的轨迹表,以及包含数据冲突信息的异常表.多年来,许多数据库管理员已开发了一些利用了此信息的可访问工具:您始终可以相信,优秀的 DB2 会找到 DB2 表中容易访问和有用的信息的许多用途! IBM 工具还利用了这些监视表,以及 Q Capture 和 Q Apply 程序更新的所有其他表.此外,IBM 还提供了一个庞大的工具集来帮助管理多站点复制配置. 命令行实用程

MariaDB 双主复制的配置

环境     Master1/Master2     系统 IP 数据库版本 Master1     CentOS6.7         10.10.3.211         mariadb-10.1.19     Master2 CentOS6.7 10.10.3.212 mariadb-10.1.19       一.Master1的配置 (1)修改Master1配置文件/etc/my.cnf,修改如下: log-bin = /usr/local/mysqllogs/binlogs/mas

Centos 6.0系统lvs+keepalived+mysql实现mysql数据库热备主主复制

今天这篇文章接着昨天的相关知识,一样是为了前天刚做的mysql热备: 大家知道实现mysql_Ha的方案有很多,常见的heartbeat.keepalived,这里说的就是keepalived,优点就是简单,快速,下面就是详情了: 1.系统:Centos6.0:lamp平台(lamp平台是我一个习惯,非必须) vip:192.168.135.200 master:192.168.135.134 slave:192.168.135.135 实现134实时复制135,135实时复制134,也就是说修

如何在 CentOS Linux 中配置 MariaDB 复制

如何在 CentOS Linux 中配置 MariaDB 复制 这是一个创建数据库重复版本的过程.复制过程不仅仅是复制一个数据库,同时也包括从主节点到一个从节点的更改同步.但这并不意味着从数据库就是和主数据库完全相同的副本,因为复制可以配置为只复制表结构.行或者列,这叫做局部复制.复制保证了特定的配置对象在不同的数据库之间保持一致. Mariadb 复制概念 备份 :复制可以用来进行数据库备份.例如,当你做了主->从复制.如果主节点数据丢失(比如硬盘损坏),你可以从从节点中恢复你的数据库. 扩展