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.-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.-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 =
binlog-format=ROW
log-bin=/mydata/data/master-bin
log-slave-updates=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=
slave-parallel-threads=
binlog-checksum=CRC32
master-verify-checksum=
slave-sql-verify-checksum=
binlog-rows-query-log_events=
report-host=mysql1
2.将mysql2配置为slave:
[mysqld]
server-id =
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=
slave-parallel-threads=
binlog-checksum=CRC32
master-verify-checksum=
slave-sql-verify-checksum=
binlog-rows-query-log_events=
report-host=mysql2
3.将mysql3配置为slave:
[mysqld]
server-id =
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=
slave-parallel-threads=
binlog-checksum=CRC32
master-verify-checksum=
slave-sql-verify-checksum=
binlog-rows-query-log_events=
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 '';
FLUSH PRIVILEGES;
5.在两台slave节点同时操作:
service mysqld start
/usr/local/mysql/bin/mysql
------------------------------------------->
CHANGE MASTER TO MASTER_HOST='mysql1',MASTER_USER='jason',MASTER_PASSWORD='',MASTER_USE_GTID=slave_pos;
START SLAVE;
6.在slave节点查看状态:
SHOW SLAVE STATUS\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: mysql1
Master_User: jason
Master_Port:
Connect_Retry:
Master_Log_File: master-bin.
Read_Master_Log_Pos:
Relay_Log_File: mysql2-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: master-bin.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Using_Gtid: Slave_Pos
SHOW GLOBAL VARIABLES LIKE '%gtid%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| gtid_binlog_pos | -- |
| gtid_binlog_state | -- |
| gtid_current_pos | -- |
| gtid_domain_id | |
| gtid_ignore_duplicates | OFF |
| gtid_slave_pos | -- |
| gtid_strict_mode | OFF |
+------------------------+-------+
7.测试,在master节点创建数据库,并在其他两个节点进行查看:
CREATE DATABASE jjj; //主节点创建数据库
SHOW DATABASES; //从节点查看
可以看到两台从服务器都可以正常复制主服务器的数据了,试验成功。下面进行多源复制的实验,我将所有主机恢复虚拟快照至原始状态。
三、多源复制
1.我将mysql1和mysql2配置为master主机,mysql3配置为slave主机,编辑配置文件:
mysql1:
[mysqld]
server-id =
log-bin=/mydata/data/mysql-bin
mysql2:
[mysqld]
server-id =
log-bin=/mydata/data/mysql-bin
mysql3:
[mysqld]
#log-bin=mysql-bin
#binlog_format=mixed
server-id =
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 '';
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='',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=;
CHANGE MASTER 'm2' TO MASTER_HOST='mysql2',MASTER_USER='slave',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=;
START ALL SLAVES;
SHOW ALL SLAVES STATUS\G
*************************** . 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:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: relay-log-m1.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
*************************** . 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:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: relay-log-m2.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
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
MariaDB的GTID复制和多源复制的更多相关文章
- mysql的级联复制和多源复制
MySQL的复制:https://www.cnblogs.com/wxzhe/p/10051114.html 级联复制的结构如图 我们来设置基于filename和pos的级联复制,并且接受mysql- ...
- mysql的GTID复制和多源复制
配置基于GTID的复制--------------------------------------------在参数文件/etc/my.cnf增加下面内容:主库master_info_reposito ...
- mariadb-10GTID复制及多源复制
---本文大纲 一.什么是GTID 二.应用场景 三.多线程复制说明 四.实现过程 五.多源复制原理 六.实现过程 ---------------------------------- 一.什么是GI ...
- MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】
生产主主复制(A<--->B),和灾备主从复制(B--->C).当生产出现问题时,数据写入切换到灾备数据库,待生产恢复后,将灾备回写到生产.步骤如下: 1.灾备与生产其中一台建立主主 ...
- MariaDB基于GTID主从复制及多主复制
一.简单主从模式配置步骤(必须要mysql5.6,此处以maridb10.0.10为例) 1.配置主从节点的服务配置文件 # vim /etc/my.cnf 1.1.配置master节点: [mysq ...
- 基于Docker搭建MySQL多源复制环境
MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等. 多源复制:多源复制加入了一 ...
- MySQL多源复制【转】
什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制, 你可以在任意主机上将数据复制给其他主机. ...
- (转)MySQL多源复制
原文:https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html MySQL多源复制概述 MySQL多源复制使复制从接受 ...
- MySQL复制(四)—多源(主)复制
(一)多主复制概述 MySQL从5.7版本开启支持多主复制,所谓多主复制,是将多个主库的数据复制到一个从库中.通常用于数据仓库整合数据,比如OLTP系统为了分散业务压力,对数据库进行分库分表,当要对数 ...
随机推荐
- jQuery-1.9.1源码分析系列(十一) DOM操作
DOM操作包括append.prepend.before.after.replaceWith.appendTo.prependTo.insertBefore.insertAfter.replaceAl ...
- 基于python编写的天气抓取程序
以前一直使用中国天气网的天气预报组件都挺好,可是自从他们升级组件后数据加载变得非常不稳定,因为JS的阻塞常常导致网站打开速度很慢.为了解决这个问题决定现学现用python编写一个抓取程序,每天定时抓取 ...
- Atitit.ide eclipse编译速度慢的解决
Atitit.ide eclipse编译速度慢的解决 以为是jar的体积与数量,貌似无关.. Err java的数量,貌似无关 Java的数量,关系不大... 最终原因:show>>pro ...
- Yii2:避免文件路径暴漏,代理访问文件
制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, ...
- ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效
ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效
- Spring(一)
一. spring是什么? 我们知道struts 是 web 框架 (jsp/action/actionfrom).hibernate 是 orm框架,处于持久层. spring 是容器框架,用于配置 ...
- 向ES6靠齐的Class.js
写在前面 在2008年的时候,John Resig写了一 Class.js,使用的方式如下: var Person = Class.extend({ init: function(isDancing) ...
- iOS UITabBarController的使用
UITabBarController 和 UINavigationController 几乎是iOS APP的标配. UITabBarController分栏(标签栏)控制器, 和UINavigati ...
- Emacs学习心得之 LaTeX编辑
目录 1. 前言 2. texlive的安装 3. AUCTEX的安装和配置 4. RefTEX的安装和配置 一.前言 本篇博文记录了Emacs下LaTeX编辑环境的搭建,参考一下文章: http:/ ...
- 隐藏tabbar的属性hidesBottomBarWhenPushed
项目中有需求是A视图控制器push之后B视图控制器需要隐藏底部的tabbar,在pop之后A视图控制器仍然显示tabbar. 其实不需要在push操作时敲 self.hidesBottomBarWhe ...