您的位置:首页 > 数据库 > MariaDB

基于GTID实现MariaDB 主从复制

2014-04-16 16:09 736 查看
一、简介
1、GTID简介
MySQL 5.6之后引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。
gtid是一个 unique 唯一的表示符,他是由服务器的uuid 全局唯一标示,是由128位的随机符组成,mysql-5.6是依靠server-id和uuid 来标示复制架构中的每一个主机,因为是128位的随机字符串在全局都不会重复,server-id 和uuid以及每一个mysql事物的事物序号组成了唯一的gtid ,自从引进mysql-5.6之后每一个二进制日志当中在每一个事物的首部都会写上gtid 标记,因此gtid使得追踪和比较复制事物变得非常简单而且能够实现从崩溃中快速恢复。尤其是innodb 引擎要想实现高可用功能必须要借助于gtid来实现。

2、规划:

master IP:172.16.12.101 hostname:server1

slave IP:172.16.12.102 hostname:server2

3注意:
版本:双方的版本要一致,如果不一致,主的要低于从的
时间:两台服务器的时间应该同步
关闭SElinux

4、配置文件注意事项

要在MariaDB-10.0.10中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:
binlog-format:二进制日志的格式,有row、statement和mixed几种类型;
需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;
log-slave-updates、report-port和report-host:用于启动GTID及满足附属的其它需求;
master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;
sync-master-info:启用之可确保无信息丢失;
slave-parallel-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;
binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;
binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;
log-bin:启用二进制日志,这是保证复制功能的基本前提;
server-id:同一个复制拓扑中的所有服务器的id号必须惟一.


二、实现
1、配置master配置文件

[root@server1 ~]# vim /etc/my.cnf
//修改如下内容
log-bin=/mydata/binlog/master-bin   //二进制日志文件目录
server-id       = 1    //从服务器不能跟此id重复
binlog-format=ROW       //二进制日志文件格式
//
//添加以下内容
innodb_file_per_table=1   //innodb表空间独立
log-slave-updates=true
master-info-repository=TABLE   //用于实现在崩溃时保证二进制及从服务器安全的功能;
relay-log-info-repository=TABLE //用于实现在崩溃时保证二进制及从服务器安全的功能;
sync-master-info=1     //启用之可确保无信息丢失
slave-parallel-threads=2  //设定从服务器的SQL线程数;0表示关闭多线程复制功能
binlog-checksum=CRC32     //启用复制有关的所有校验功能
master-verify-checksum=1    //启用复制有关的所有校验功能
slave-sql-verify-checksum=1   //启用复制有关的所有校验功能
binlog-rows-query-log_events=1   //启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;
report-host=master.test.com
report-port=3306


创建二进制目录

[root@server1 ~]# mkdir -pv /mydata/binlog
[root@server1 ~]# chown -R mysql.mysql /mydata/binlog/


2、配置本地域名解析

[root@server1 ~]# vim /etc/hosts
//添加如下内容
172.16.12.101 master.test.com
172.16.12.102 slave.test.com
slave服务器上做同样操作

3、master创建用于主从复制的账号

[root@server1 ~]# mysql
MariaDB [(none)]> grant replication slave,replication client on *.* to "backup"@'172.16.12.102' identified by 'mageedu';
MariaDB [(none)]> flush privileges;


4、配置slave配置文件

//修改如下内容
log-bin=/mydata/logbin/slave-bin
server-id       = 3
binlog-format=ROW
//添加修改如下
relay-log=/relay/relay-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-port=3306
report-host=slave.test.com


创建二进制和中继日志文件存放目录

[root@server2 ~]# mkdir -pv /mydata/{logbin,relay}
[root@server2 ~]# chown -R mysql.mysql /mydata/{logbin,relay}


5、在slave服务器使用主mysql上创建的账号密码登陆

在slave上查看是否启用gtid




启用了两个线程

查看同步状态:show slave status\G;





6、测试主从复制
master上:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.06 sec)
MariaDB [(none)]> create database hello;


slave上:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hello              |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+


可以看到,在master上新建的hello已经同步到slave上了

本文出自 “斜视天花板” 博客,请务必保留此出处http://lemidi.blog.51cto.com/8601832/1396540
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: