首页 > 代码库 > MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

    MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID。


GTID(global transaction ID)全局事务ID,是由服务器的UUID+一段随机数事务ID。

特性从服务器从主服务器复制过来的事务,GTID不变,也就是说一个事务在全局复制架构中的ID不变。

有什么用:

    在MySQL集群中,当Master故障时,需要从Slave中挑选一个提升为Master可以基于GTID对比其他Slave来保证数据的一致性。


MySQL主从同步如何配置数据过滤

主服务器配置:

Binlog-do-db   //指定要记录二进制日志的数据库

Binlog-ignore-db  //指定要忽略记录二进制日志的数据库


从服务器配置:

Replicate-do-table=   //指定要记录二进制日志的表

Replicate-ignore-table=  //指定要忽略记录二进制日志的表

Replicate-do-db=  //指定要记录二进制日志的数据库

Replicate-ignore-db=  //指定要忽略记录二进制日志的数据库

Replicate-wild-do-table=  //指定要记录二进制日志的表(支持通配符)

Replicate-wild-ignore-table=  //指定要忽略记录二进制日志的表(支持通配符)


实验一、配置一个基于GTID的MySQL主从复制架构。

实验环境:RHEL6.4+MySQL5.6

    Master:192.168.18.201 admin1.tuchao.com 

    Slave: 192.168.18.202 admin2.tuchao.com

安装和启动MySQL过程和之前都一样(略)


Master配置:

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir=/mydata
log-bin=mysql-bin
innodb_file_per_table = 1

binlog-format=ROW  //设置二进制日志格式
log-slave-updates=true //是否记录从服务器同步数据动作

gtid-mode=on //启用Gtid模式

enforce-gtid-consistency=true //是否强制GTID的一致性

master-info-repository=TABLE //master信息的记录位置

relay-log-info-repository=TABLE //中继日志信息的记录位置

sync-master-info=1
slave-parallel-workers=2 //设置从服务器复制线程数

binlog-checksum=CRC32 //设置binlog校验算法(循环冗余校验码)

master-verify-checksum=1 //设置主服务器是否校验

slave-sql-verify-checksum=1 //设置从服务器是否校验

binlog-rows-query-log_events=1
server-id       = 10
report-port=3306
report-host=admin1.tuchao.com //设置报告给哪台服务器,一般设置为本机的主机名。


Slave配置:

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir=/data
log-bin=mysql-bin
innodb_file_per_table = 1

binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id       = 20
report-port=3306
report-host=admin2.tuchao.com


其实master和slave配置几乎相同, 只需要修改几个参数我在上面用红色字体做了标记,如server-id ,report-host等。


在Master上授权复制权限的用户

  • grant replication slave,replication client on *.* to ‘repluser‘@‘192.168.18.202‘ identified by ‘123456‘;

启动slave复制线程

  • change master to master_host=‘admin1.tuchao.com‘,master_user=‘repluser‘,master_password=‘123456‘,master_auto_position=1;

  • start slave;

查看警告信息

  • Show warnings

查看Slave状态

  • show slave status\G

wKiom1P0HVHiLPJBAAIUhlZFM00896.jpg



这时我们在Master上创建一个tuchao数据库

wKioL1P0JW3g02VTAAEQnJ5-JXE645.jpg

来到Slave查看

wKiom1P0JHbSxLPqAADMQtFQX8w645.jpg

同步成功!


实验二、使用amoeba构建MySQL集群实现负载均衡,读写分离。




本文出自 “坏人的博客” 博客,请务必保留此出处http://tchuairen.blog.51cto.com/3848118/1542454