MariaDB的GTID复制和多源复制

什么是GTID?

  GTID就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。

什么是多源复制?

  多源复制意味着一个服务器能从多个从服务器上复制。这是MariaDB 10.0的一个新特性。

实验系统:CentOS 6.6_x86_64

实验前提:防火墙和selinux都关闭

实验说明:本实验共有3台主机,IP分配如拓扑

实验软件:mariadb-10.0.20

实验拓扑:

    

一、准备工作

  1.修改三台主机的名字,对应如下:

    

  2.三台主机配置相同的hosts文件为如下内容:

    

  3.安装mariadb:

tar xf mariadb-10.0.20-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.20-linux-x86_64 mysql
mkdir -pv /mydata/data
useradd -r mysql
chown -R mysql.mysql /mydata/data/
cd mysql/
chown -R root.mysql .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

  4.修改配置文件:

vim /etc/my.cnf
--------------------------------->
[mysqld]
datadir = /mydata/data

  5.创建虚拟机镜像(可选):

    为了试验不受干扰,做完GTID试验我会将三台主机恢复至初始状态。

二、GTID复制

  1.将mysql1配置为master:

[mysqld]
server-id       = 1
binlog-format=ROW
log-bin=/mydata/data/master-bin
log-slave-updates=truemaster-info-repository=TABLErelay-log-info-repository=TABLEsync-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
report-host=mysql1

  2.将mysql2配置为slave:

[mysqld]
server-id       = 2
binlog-format=ROW
log-bin=/mydata/data/mysql-bin
log-slave-updates=truemaster-info-repository=TABLErelay-log-info-repository=TABLEsync-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
report-host=mysql2

  3.将mysql3配置为slave:

[mysqld]
server-id       = 3
binlog-format=ROW
log-bin=/mydata/data/mysql-bin
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
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
report-host=mysql3

  4.在master节点创建复制用户:

service mysqld start/usr/local/mysql/bin/mysql
-------------------------------------------->
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘jason‘@‘192.168.19.%‘ IDENTIFIED BY ‘123456‘;
FLUSH PRIVILEGES;

  5.在两台slave节点同时操作:

service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------->
CHANGE MASTER TO MASTER_HOST=‘mysql1‘,MASTER_USER=‘jason‘,MASTER_PASSWORD=‘123456‘,MASTER_USE_GTID=slave_pos;
START SLAVE;

  6.在slave节点查看状态:

SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql1
                  Master_User: jason
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000007
          Read_Master_Log_Pos: 321
               Relay_Log_File: mysql2-relay-bin.000002
                Relay_Log_Pos: 613
        Relay_Master_Log_File: master-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes                          ...
                   Using_Gtid: Slave_Pos
SHOW GLOBAL VARIABLES LIKE ‘%gtid%‘;
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| gtid_binlog_pos        | 0-1-3 |
| gtid_binlog_state      | 0-1-3 |
| gtid_current_pos       | 0-1-3 |
| gtid_domain_id         | 0     |
| gtid_ignore_duplicates | OFF   |
| gtid_slave_pos         | 0-1-3 |
| gtid_strict_mode       | OFF   |
+------------------------+-------+

  7.测试,在master节点创建数据库,并在其他两个节点进行查看:

CREATE DATABASE jjj;           //主节点创建数据库
SHOW DATABASES;                //从节点查看

     可以看到两台从服务器都可以正常复制主服务器的数据了,试验成功。下面进行多源复制的实验,我将所有主机恢复虚拟快照至原始状态。

     

三、多源复制

  1.我将mysql1和mysql2配置为master主机,mysql3配置为slave主机,编辑配置文件:

    mysql1:

[mysqld]
server-id       = 1
log-bin=/mydata/data/mysql-bin

    mysql2:

[mysqld]
server-id       = 2
log-bin=/mydata/data/mysql-bin

    mysql3:

[mysqld]#log-bin=mysql-bin
#binlog_format=mixed
server-id       = 3
relay_log=/mydata/data/relay-log

  2.mysql1和mysql2创建复制用户:

service mysqld start
/usr/local/mysql/bin/mysql
-------------------------------------------->
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘slave‘@‘192.168.19.66‘ IDENTIFIED BY ‘123456‘;
FLUSH PRIVILEGES;

  2.查看两台主机的二进制日志位置,这里两台位置恰好一致:

SHOW MASTER LOGS;

         

  3.mysql3上配置CHANGE MASTER:

service mysqld start
/usr/local/mysql/bin/mysql
----------------------------------------------->
CHANGE MASTER ‘m1‘ TO MASTER_HOST=‘mysql1‘,MASTER_USER=‘slave‘,MASTER_PASSWORD=‘123456‘,MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=647;
CHANGE MASTER ‘m2‘ TO MASTER_HOST=‘mysql2‘,MASTER_USER=‘slave‘,MASTER_PASSWORD=‘123456‘,MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=647;
START ALL SLAVES;
SHOW ALL SLAVES STATUS\G
*************************** 1. row ***************************
              Connection_name: m1
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql1
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 647
               Relay_Log_File: relay-log-m1.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes               ...
*************************** 2. row ***************************
              Connection_name: m2
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql2
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 647
               Relay_Log_File: relay-log-m2.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes               ...

  4.测试:

    mysql1:

CREATE DATABASE mydb1;CREATE TABLE mydb1.jjj (id int);

    mysql2:

CREATE DATABASE mydb2;CREATE TABLE mydb2.jjj (id int);

    mysql3:

SHOW DATABASES;SHOW TABLES FROM mydb1;SHOW TABLES FROM mydb2;

       

  至此,多源复制也演示完毕,谢谢!如有问题,请联系我,QQ:82800452

时间: 2024-12-29 23:50:52

MariaDB的GTID复制和多源复制的相关文章

mariadb-10GTID复制及多源复制

---本文大纲 一.什么是GTID 二.应用场景 三.多线程复制说明 四.实现过程 五.多源复制原理 六.实现过程 ---------------------------------- 一.什么是GITD 自MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮.官方文档在这篇文档里,我们可以知道全局事务 ID 的官方定义是:GTID = source_id:transaction_id gtid 是一个 un

基于GTID的MySQL多源复制配置

多源复制的意义 1.可以在一个从库上对多个服务器的数据库进行汇总,或者对一个数据库的分库分表进行汇总. 2.集约使用从库服务器的硬件资源,毕竟弱一个数据库业务量较小确占用整个服务器资源是不经济的. 3.更方便的对个业务库进行数据备份,优化数据库备份脚本编写逻辑 拓补图 实施步骤 1.备份主库上的数据,考虑到gtid的问题建议只采用mysqldump程序进行备份 centos:#mysqldump --login-path=3306 \ #mysql官方工具都支持login-path快速登录   

6:多源复制的实现

MySQL多源复制允许复制slave同时从多个源接收事务.可以使用多源复制将多个服务器备份到一个服务器,合并表碎片,并将来自多个服务器的数据合并到一个服务器.多源复制在应用事务时不实现任何冲突检测或解决,如果需要,这些任务留给应用程序完成. 下面我们就来配置一个多源复制,多源复制这种拓扑至少需要两个masters和slaves. 服务器环境:192.168.1.2 (master1) 192.168.1.3 (new master) 192.168.1.4 (slave) 可以将多源复制拓扑中的

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

mariadb多源复制 muiltil source replication

环境:centos-6.5      Mariadb:10.1.13-MariaDB 多源复制:企业数据库中写的需求较大,以至于I/O负载比较大,那么就必须把写的操作分摊到多台主服务器上进行,然后在将主服务器上的数据汇总到从服务器上去进行数据分析.或者是将异地数据库的数据汇总到一起.注意:每台主服务上的库是不能相同的. proxy-mysql:192.168.88.139 master1:192.168.88.147 master2:192.168.88.148 slave1:192.168.8

mysql多源复制详解

大家应该知道,mysql比起其他数据库,最大的特色是就是主从复制,不过5.7之前的版本最多就只支持一主多从的复制方式,对于一些统计类的需求,就需要跨库,这是比较麻烦的事情,以往只能交由数据库中间件(mycat等)去做这种事情,还有备份操作,也只能一个个库的用脚本去轮询或并发备份,不可谓不费时费力.然后,多源复制的概念出来了. 多源复制的概念最早是mariadb社区提出的,后来mysql官方积极引入到5.7的版本中来(5.6最新版也是没有这个功能的),percona就不说了,也是随后推出.这个功能

mysql 5.7多源复制(用于生产库多主库合并到一个查询从库)

目前我们使用的是主从+分库分表的系统架构,主库有N个分库,从库为多个slave做负载均衡,所以数据库端的架构是下面这样的: 这就涉及到多个主库数据同步到不分库分表的从库共查询和管理类系统使用.在mysql 5.6以及之前的版本中,没有原生的解决方法,除非使用mariadb分支,在mysql 5.7之后支持多源复制,除了使用原生的多源复制之外,还有一个选择,就是使用案例开源的otter/canal.如果只是N个库合并到一个库的,我们使用mysql原生的复制,因为无论从稳定性还是运维成本.系统要求的

MySQL 5.7的多源复制

MySQL 5.7已经开始支持了多源复制,相信小伙们都很激动,MySQL 5.7之前只能实现一主一从.一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又与官方的MySQL版本不兼容的,在MySQL 5.7版本已经可以实现多主一从的复制了.MySQL 5.7版本相比之前的版本,无论在功能还是性能.安全等方面都已经提升了不少,值得大家去研究和使用. MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构: MySQL 5.7之后就可以

mysql 多源复制

mysql5.7新特性多源复制很实用,方便对分库环境进行汇总,集中备份和数据统计分析. 我的实验环境3台机器,mysql版本:5.7.16 10.10.203.102 从库 10.10.203.93 主库 10.10.203.94 主库 操作步骤: (1)当一个从库是多源复制结构,那么master_info和relay_log_info不能用file方式来存储,必须使用table,它不支持file. 10.10.203.102 从库上操作 在配置文件中新增: [mysqld] master_in