一、为什么要做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集群做数据库异步复制的更多相关文章

  1. 搭建数据库galera集群

    galera集群 galera简介 galera集群又叫多主集群,用于数据库的同步,保证数据安全 最少3台,最好是奇数台数,当一台机器宕掉时,因为仲裁机制,这台机器就会被踢出集群. 通过wsrep协议 ...

  2. Docker 版ansible galera集群

    1. 部署galera集群 利用四台主机cicd.node1.node2.node3来搭建galera集群. 1> 上传压缩包至cicd,解压得到ansible配置文件 [root@cicd ~ ...

  3. MariaDB Galera集群部署--技术流ken

    Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 ...

  4. mysql主从配置和galera集群

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...

  5. Linux下MySQL/MariaDB Galera集群搭建过程【转】

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  6. Mariadb galera 集群

    部署galera 多主架构 (galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性.) 环境准备:三台服务器 ...

  7. mysql基础之mariadb galera集群(多主)

    一.概念 galera集群多用于关键性业务,因为galera集群为了数据的一致性,采用的是同步的机制,这就使galera牺牲了一部分性能来换取数据一致性. galera集群是基于wsrep协议(端口4 ...

  8. Spring + Jedis集成Redis(集群redis数据库)

    前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...

  9. 在Linux上使用Nginx为Solr集群做负载均衡

    在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...

随机推荐

  1. Chapter 3 Phenomenon——7

    "Bella? Are you all right?" “贝拉?你还好吗?” "I'm fine." My voice sounded strange. “我还 ...

  2. WPF中List的Add()与Insert()方法的区别

    先来看看定义: // Summary: // Adds an object to the end of the System.Collections.Generic.List<T>. // ...

  3. mysql查看权限的命令

    mysql查看用户权限的命令 1.这里用来查看用户存储过程: show grants for 用户; eg: show grants for root@'localhost';#这样就会把root用户 ...

  4. ubuntu新建用户不能使用ll等指令,显示出来的信息没有颜色区分的解决方案

    ubuntu利用  useradd -m test -g admin 指令,创建用户test及其工作目录.但是登陆后,会出现不能使用很多指令“比如:ll.显示的信息没有颜色”等等此时   查看该用户的 ...

  5. Java List 生成 树

    package com.victop.ibs; import java.util.ArrayList; import java.util.List; import org.apache.commons ...

  6. Class.forName(),Class.forName().newInstance() ,New ,类名.class,,class.forName(),,getClass()

       在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为 ...

  7. JS的作用域和声明提前

    首先介绍下Javascript的函数作用域的概念,然后了解下什么是作用域和声明提前,最后通过一个例子剖析Javascript的作用域链. 1.变量的作用域 稍微有些编程背景的都知道,变量的作用域分为两 ...

  8. 问题集录--Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  9. centos6.5下yum安装mysql5.5

    第一步就是看linu是否安装了mysql,经过rpm -qa|grep mysql查看到centos下安装了mysql5.1,那就开始卸载咯 2 接下来就是卸载mysql5.1了,命令:rpm -e ...

  10. 【转】Spring事务异常回滚,捕获异常不抛出就不会回滚

    最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......     为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异 ...