MySQL5.6加入了GTID的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情况,都可以通过GTID自动找到需要进行复制的点位,而无需像之前版本那样通过File_name和File_position来进行位置点的主从复制。

下面将分别介绍两种主从复制的搭建,相关问题的解决及内部原理将在后续实验中继续探索。

一、准备工作

创建2个(或3个)MySQL 实例,我搭建3个MySQL实例(一主2从)来分别演示,结构如下

我在同一台机器上搭建的3个mysql实例,角色说明如下

创建MySQL实例的步骤参考之前的博文,https://www.cnblogs.com/gjc592/p/9203711.html,注意内存大小及innodb_buffer_pool_size的设置,我的虚拟机是2G内存,搭建3个实例,因此三个实例的innodb_buffer_pool_size均设置为512M。如果内存较小,innodb_buffer_pool_size设置过大,启动数据库时将异常。

1. 3台实例创建完毕后,在master上创建复制账号

/usr/local/mysql5.7/bin/mysql -uroot -p --socket=/data/mysql/mysql3307/tmp/mysql3307.sock

mysql> create user repl@'%'  identified by '';
Query OK, 0 rows affected (0.04 sec) mysql> grant replication slave on *.* to repl@'%';
Query OK, 0 rows affected (0.00 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec) mysql>

2. 将主库的数据全量导出(mysqldump或xtrabackup工具),因为是测试环境,数据量小,因此就使用mysqldump进行导出。

/usr/local/mysql5./bin/mysqldump  --skip-add-locks  --default-character-set utf8   --master-data= --single-transaction  --all-databases  -E -R --triggers -uroot -p123456 --socket=/data/mysql/mysql3307/tmp/mysql3307.sock >all.sql

 

 二、传统复制(3308端口的实例)

1.导入数据

2. 查看备份文件里的信息

注:备份时设置了--master-data= 因此备份文件里有备份时刻的主库的binlog日志信息

3. 在从库上配置主从

根据第2步的位置信息,配置主从,然后开启主从同步,开启后查看主从同步的状态,如果IO线程(Slave_IO_Running)和SQL线程(Slave_SQL_Running:)均为Yes,则说明主从同步正常。

-- 配置主从
mysql> change master to master_host='10.163.78.121',master_port=3307,master_user='repl',master_password='',master_log_file='mysql_binlog.000006',master_log_pos=194;
Query OK, 0 rows affected, 2 warnings (0.06 sec) -- 开启主从同步
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
-- 查看主从同步状态
mysql> show slave status\G

、基于GTID的主从(3309端口)

1.导入数据

2. 查看备份信息里的的GTID,配置起始GTID

mysql> reset master;
Query OK, 0 rows affected (0.05 sec) mysql> SET @@GLOBAL.GTID_PURGED='29a1d089-7a79-11e8-8164-525400ad5460:1-103';
Query OK, 0 rows affected (0.00 sec)

3. 配置主从同步,开启主从同步并查看同步状态

mysql> change master to master_host='10.163.78.121',master_port=3307,master_user='repl',master_password='',master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql> start slave;
Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G

注意:本次配置就不需要写binlog文件名及位置信息,而是写master_auto_position=1即可。

四、测试主从同步

1.在主库(master)上能查看到从库信息

mysql> show slave hosts;

2. 在主库创建一张表,并插入记录

mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> create table test_slave1(id int primary key ,name varchar(50),age int);
Query OK, 0 rows affected (0.07 sec) mysql> insert into test_slave1 select 1,'zhangsan',20;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0 mysql> insert into test_slave1 select 2,'lisi',30;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from test_slave1;

3. 分别在2个从库上查看

a.3308端口(基于位置的从库)

[root@gjc18 ~]# /usr/local/mysql5.7/bin/mysql -uroot -p123456 --socket=/data/mysql/mysql3308/tmp/mysql3308.sock

mysql> select * from testdb.test_slave1;

b.3309端口(基于GTID的从库)

通过简单的数据写入,发现主库的记录已经正常同步至2个从库。

Tips:

MySQL主从架构是实际生产中最常见的方式,在平时的管理维护中也会遇到各种问题需要处理,后续也将慢慢测试一些常见问题的处理及起原因的探索。

另外,也将基于主从架构的形式为基础探索集群、高可用、读写分离等。

耿小厨已开通个人微信公众号,想进一步沟通或想了解其他文章的同学可以关注我

MySQL5.7主从同步--点位方式及GTID方式的更多相关文章

  1. MySQL5.7主从同步配置

    主从同步,将主服务器(master)上的数据复制到从服务器(slave). 应用场景 读写分离,提高查询访问性能,有效减少主数据库访问压力. 实时灾备,主数据库出现故障时,可快速切换到从数据库. 数据 ...

  2. mysql5.6 主从同步

    主库IP:192.168.220.3 从库IP:192.168.220.4 1.主库配置编辑my.cnf: # For advice on how to change settings please ...

  3. 烂泥:mysql5.5主从同步复制配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mys ...

  4. mysql5.6 主从同步配置

    一:配置前说明 在centos 6环境下配置 mysql 5.6主从同步 准备两台测试的虚拟机,2台虚拟机上都安装mysql软件,并开启mysql服务主master : 192.168.1.110从s ...

  5. mysql5.5主从同步复制配置

    在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mysql5.5的主从同步复制功能. 注意mysql5 ...

  6. centos7搭建mysql5.7主从同步

    主从基本概念 mysql主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是 ...

  7. ubuntu16配置mysql5.7主从同步

    测试环境如下: master: 10.0.0.26 slave01: 10.0.0.27 slave02: 10.0.0.28 一.三台机均安装mysql-server5.7 $ sudo apt-g ...

  8. Windows下mysql5.5主从同步

    前置条件: A主机(作为主服务器) 环境:Win7,mysql5.5 IP:172.17.42.82 B主机(作为从服务器) 环境:Win7,mysql5.5 IP:172.17.42.156 主服务 ...

  9. CentOS7.5下实现MySQL5.7主从同步

    这里使用两台Linux主机(一台充当MySQL主服务器,另一台充当MySQL从服务器),MySQL用yum安装,版本均为5.7,下表是它们所使用的操作系统以及IP地址. 两台Linux主机所使用的操作 ...

随机推荐

  1. C#获取apk版本信息

    获取很多人都会问我为什么要写这个博客,原因很简单,这次研发apk版本信息的时候网上查了很多的资料都没有这方面的信息,因此这次功能完了想写下方法,如果以后博友们遇到了可以直接copy,不用花很多的时间, ...

  2. python读写不同编码txt文件

        以后整理规范 import os import codecs filenames=os.listdir(os.getcwd()) out=file("name.txt",& ...

  3. 利用canvas来绘制一个会动的图画,欢迎指教

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 搭建git远程仓库

    基于本地协议搭建git远程仓库 1.任意目录下执行git init -bare创建裸仓库,建议目录名称以.git结尾 2.共享此目录,windows下右键裸仓库目录,切换到共享面板设置完成即可获取共享 ...

  5. web统计数据搜集及分析原理

    在现代web应用开发中,数据扮演着越来越重要的角色:通过数据我们能够知道系统哪些地方有待改进,从而迭代开发重新上线, 随后再次通过数据我们来评估新的迭代开发是否满足了我们的预期目标,从而形成了一个数据 ...

  6. jQuery的事件绑定和解绑

    1.绑定事件 $('获取的标签对象').bind('要操作的方法,  {操作的内容  是字典的形式},function(){} ') 语法: bind(type,data,fn) 描述:为每一个匹配元 ...

  7. QA-IDEA中用maven配置项目无法加载JDBC

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Im building Maven Java Web application and w ...

  8. java时间操作工具类

    import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.te ...

  9. July 02nd 2017 Week 27th Sunday

    No safe wading in an unknown water. 未知水深浅,涉水有危险. Is this the theory that has been the guideline for ...

  10. February 14 2017 Week 7 Tuesday

    Love lives in cottages as well as in courts. 爱情无贵贱,贫富皆有之. Many people, especially boys, complain tha ...