使用GTID给Galera集群做数据库异步复制
一、为什么要做Galera集群异步复制
Galera集群解决了数据库高可用的问题,但是存在局限性,例如耗时的事务处理可能会导致集群性能急剧下降,甚至出现阻塞现象。而不幸的是,类似报表等业务需求就需要做数据大批量的数据查询操作,为了不影响Galera的集群效率,需要做数据异步复制,产生一个从库来适配耗时的数据操作需求。
由于Galera集群的特殊性,我们不能使用一般的主从复制来实现数据异步复制的要求。集群中每台mariadb都会单独的记录binlog,使得一般的主从配置只能获取到单台数据的变更事件,集群中的其它mariadb上如果有数据变更,无法同步到从库中。
根据GTID进行主从复制解决了这个问题,每个事务都存在唯一的ID,根据事务ID来同步不会受到数据库的限制,因为集群中的所有数据库节点使用的都是唯一的GTID。
二、安装xtrabackup
1、YUM安装,下载percona源:
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
2、开始安装
yum install percona-xtrabackup-24
三、备份数据
1、在主库上全量备份数据:
innobackupex --user=dbuser --passwor='dbpassword' /dir_for_backup
注意password参数,如果密码中有关键字符,需要使用单引号把密码引起来,否则无法登录mysql,无法备份数据。
2、在主库上进行全量备份后,需要应用事务到备份文件中才能使备份文件完整可用
Innobackupex --user=dbuser --password=’dbpassword’--apply-log /dir_for_backup /2018-07-12_10-39-56/
3、在主库上把备份好的数据文件传输到从库中
scp -r /DIR_FOR_BACKUP /2018-07-12_10-39-56/ slave_user@slave_server_ip:/slave_server_data_dir
四、从库启动
1、 在从库上修改数据文件名称,拥有者
mv /slave_server_data_dir/2018-07-12_10-39-56/ /slave_server_data_dir/mysqldata
chown -R mysql:mysql /slave_server_data_dir/mysqldata/
2、 在从库上启动数据库
配置好my.conf文件,指定datadir目录到/slave_server_data_dir/mysqldata,然后启动数据库。
五、主从配置
1、 Galera集群中的所有节点都需要做以下配置:
[mysqld]
master-info-repository=TABLE
relay-log-info-repository=TABLE
log_slave_updates = 1
sync-master-info=1
slave-parallel-threads=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
log-bin=mysql-bin
binlog_format=row
log_slave_updates = 1
server-id=4567
配置完成后重启服务器。
进入主库(Galera集群中的任一节点),授权主从复制用户:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slaveUser'@'10.30.254.9' IDENTIFIED BY 'slaveUser';
2、 从库配置
[mysqld]
master-info-repository=TABLE
relay-log-info-repository=TABLE
log_slave_updates = 1
sync-master-info=1
slave-parallel-threads=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
#这是与主库配置不同的地方
relay_log = relay-bin
server_id=7890
log_bin=binlog
log_slave_updates=1
binlog_format=ROW
配置完成后重启从库数据库。
3、 设置从库GTID复制点信息
l 查看xtrabackup备份数据中的GTID信息
cat /slave_server_data_dir/mysqldata xtrabackup_info
uuid = ffa57fe6-8676-11e8-8b3a-00163e08d213
name =
tool_name = innobackupex
tool_command = --user=root --password=... /mnt
tool_version = 2.4.11
ibbackup_version = 2.4.11
server_version = 10.2.6-MariaDB-log
start_time = 2018-07-13 16:26:09
end_time = 2018-07-13 16:30:28
lock_time = 0
binlog_pos = filename 'mysql-bin.000019', position '82930255', GTID of the last change '0-4567-3446'
innodb_from_lsn = 0
innodb_to_lsn = 42353602070
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
l 配置GTID主从复制
停止主从复制:STOP SLAVE;
重置主从配置:RESET SLAVE ALL;
设置GTID点:SET GLOBAL gtid_slave_pos='0-4567-3446';
配置主从配置:
CHANGE MASTER TO MASTER_HOST='10.30.253.222', MASTER_PORT=3306, MASTER_USER='slaveUser', MASTER_PASSWORD='slaveUser', master_use_gtid=slave_pos;
查看主从配置状态:SHOW SLAVE STATUS;
六、GTID同步出错时,如何恢复主从复制
异常信息:
Last_SQL_Error: Error 'Duplicate entry '4' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into t VALUES(NULL,'salazar')'
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-4
因为是GTID复制,所以set global sql_slave_skip_counter=N在这里是没有作用的,但是可以通过插入一个空的事务来解决问题:
STOP SLAVE;
SET GTID_NEXT="7d72f9b4-8577-11e2-a3d7-080027635ef5:5";
BEGIN; COMMIT;
SET GTID_NEXT="AUTOMATIC";
START SLAVE;
[...]
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
使用GTID给Galera集群做数据库异步复制的更多相关文章
- 搭建数据库galera集群
galera集群 galera简介 galera集群又叫多主集群,用于数据库的同步,保证数据安全 最少3台,最好是奇数台数,当一台机器宕掉时,因为仲裁机制,这台机器就会被踢出集群. 通过wsrep协议 ...
- Docker 版ansible galera集群
1. 部署galera集群 利用四台主机cicd.node1.node2.node3来搭建galera集群. 1> 上传压缩包至cicd,解压得到ansible配置文件 [root@cicd ~ ...
- MariaDB Galera集群部署--技术流ken
Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 ...
- mysql主从配置和galera集群
mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...
- Linux下MySQL/MariaDB Galera集群搭建过程【转】
MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...
- Mariadb galera 集群
部署galera 多主架构 (galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性.) 环境准备:三台服务器 ...
- mysql基础之mariadb galera集群(多主)
一.概念 galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性. galera集群是基于wsrep协议(端口4 ...
- Spring + Jedis集成Redis(集群redis数据库)
前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...
- 在Linux上使用Nginx为Solr集群做负载均衡
在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...
随机推荐
- 使用subgit进行svn迁移至git(branch,tags)
前言: 最近公司需要将整体项目从svn迁移至gitlab上,经过几天的研究,现记录一下流程 整体思路是进行一次导入: 先通过subgit将svn整个import至本地,在与git上的项目进行合并. 1 ...
- golang的并行快速排序
.nums[]作为core,将nums中大于core的元素放入greater,将不大于core的元素放入less 当nums长度为1时往ch中写入此元素 .分别对less和greater进行1操作(并 ...
- Java SPI机制和使用示例
JAVA SPI 简介 SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface.根据 Java 的 SPI 规范,我们可以定义一个服务接口,具体的实 ...
- zabbix邮件内容乱码与邮件内容为附件解决办法
在zabbix的实际使用过程中,在收到邮件预警的时候,我们会发现邮件内容是乱码的,在手机端收到的是附件,而且附件下载后的文件类型是打不开的.这样我们不知道我们是哪个服务器的哪项服务出了问题,接下来我们 ...
- Cookie文件说明及IE的Cookie文件格式
1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保 ...
- ruby中Regexp用法
Regexp 正则表达式的类.正则表达式的字面值是以双斜线内夹表达式的形式生成的. /^this is regexp/ 还可以使用Regexp.new(string)来动态地生成正则表达式对象. 超类 ...
- 4.1 SQL的本质
对于早期的关系数据库,整个行业做了很多努力,试图统一不同的专用查询语言.IBM曾建立了一个早期的标准,被称为Structured English Query Language,这个名字缩写为SEQUE ...
- SQL Server提取字段中的所有数字
今天公司项目中遇到了一个需求,要求提取用户电话号码字段中的所有电话信息. 由于该字段在项目最初设计中没有严格控制数据质量,导致用户在输入时包含了很多非电话的信息,如用户名字等(136 **** *** ...
- JavaScript shift()函数移出数组第一个数据
pop() 函数用来移出数组中最后一个元素.如果想要移出第一个元素要怎么办呢? .shift() 就是专门用来处理这类型需求的.它的工作原理类似 .pop(),但它移除的是第一个元素,而不是最后一个.
- 前端模块化(AMD和CMD、CommonJs)
知识点1:AMD/CMD/CommonJs是JS模块化开发的标准,目前对应的实现是RequireJs/SeaJs/nodeJs. 知识点2:CommonJs主要针对服务端,AMD/CMD主要针对浏览器 ...