1、复制概述

1.1、复制解决的问题

数据复制技术有以下一些特点:

(1) 数据分布

(2) 负载平衡(load balancing)

(3) 备份

(4) 高可用性(high availability)和容错


1.2、复制如何工作

从sql layer中逻辑模块上来看

复制模块分为master模块和slave模块两部分,master模块主要负责在replication环境中读取master端的binary日志,以及与slave端的I/O thread交互等工作。slave模块比master模块所要做的事情稍多一些,在系统中主要体现在两个线程上面。一个是负责从master请求和接受binary日志,并写入本地relay_log的I/O thread。另外一个是负责从relay_log中读取相关的日志事件的SQLthread,然后解析成可以在slave端正确执行并得到和master端完全相同的结果的命令并再交给slave执行的过程。


1.3 实验环境:

主从ip地址
数据库版本系统版本
master172.16.8.8MariaDB-10.0.10Centos6.5
slave172.16.8.9MariaDB-10.0.10Centos6.5

版本:双方的版本要一致,如果不一致,主的要低于从的

时间:两台服务器的时间应该同步

SElinux 关闭


1.4 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来实现。


1.5 mysql配置文件设置

要在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节点

下面是配置文件部分 ,值得注意的是在下面配置文件中server-id 此项的值 不能重复。主从不能一样。

[root@master ~]# vim /etc/my.cnf
//添加或者修改以下内容
log-bin=/binlog/mysql-bin   //二进制日志文件目录
innodb_file_per_table=1   //innodb表空间独立
server-id       = 1    //从服务器不能跟此id重复
binlog-format=ROW       //二进制日志文件格式
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.gulong.com
report-port=3306


创建二进制日志目录

# mkdir /binlog
# chown -R mysql.mysql /binlog


2.配置主机名称:

在master和slave服务器上分别配置主机名:

master:

# hostname master.gulong.com
#vim /etc/hosts
//添加以下内容
172.16.8.8  master.gulong.com
172.16.8.9  slave.gulong.com

slave:

# hostname slave.gulong.com
#vim /etc/hosts
//添加以下内容
172.16.8.8  master.gulong.com
172.16.8.9  slave.gulong.com



3.在master上创建有复制权限的帐号

MariaDB [(none)]> grant replication slave,replication client on *.* to "backup"@'172.16.8.9' identified by '123';
MariaDB [(none)]> flush privileges;


4.配置slave节点

server-id       = 3
relay-log=/relay/relay-bin
vim /etc/my.cnf
//添加修改如下
server-id       = 3
relay-log=/relay/relay-bin   //开启中继日志
binlog-format=ROW
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.gulong.com
log-bin=/logbin/master-bin


创建中继日志目录

# mkdir /relay
# chown -R mysql.mysql /relay


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

MariaDB [(none)]> change master to master_host='172.16.8.8',master_user='backup',master_password='123',master_use_gtid=current_pos;


在slave上查看是否启用gtid与多线程

wKiom1NOepuyLLfWAANoyOlPcVw948.jpg

执行show slave status;

wKiom1NOevbC4hzBAAIf6JEpzKA131.jpg

wKioL1NOes7zSxyLAADMFrXMtZY784.jpg

从图看出,基于GTID的主从复制配置成功

现在来测试下

在主mysql 上创建数据库 监测 从是否能复制


wKiom1NOfR3yqFSTAAJV3WSIhj0662.jpg

wKioL1NOfPTAoeTrAAGpVfRWqeY710.jpg


到此,基于MariaDB的主从复制已经配置完成!