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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

   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集群实现负载均衡,读写分离。

    我们在192.168.18.199这台主机部署amoeba由于是java程序,要先安装jdk,然后定义JAVA_HOME环境变量,导出PATH环境变量。(略)


amoeba-mysql2.2 官网下载地址:

http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/


创建需要的目录,创建链接,解压程序到目录。

mkdir /usr/local/amoeba-mysql-2.2

cd /usr/local

ln -sv amoeba-mysql-2.2 amoeba

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-mysql-2.2/

导出PATH环境变量

  • vim /etc/profile.d/amoeba.sh

export AMOEBA_HOME=/usr/local/amoeba
export PATH=$AMOEBA_HOME/bin:$PATH

编辑 /usr/local/amoeba/conf/dbServers.xml 

wKiom1P0Vb6xDtrhAARgaBpieF8991.jpg

wKiom1P0VdnRkXCHAAOLVFaqd9M292.jpg

编辑vim /usr/local/amoeba/conf/amoeba.xml

wKiom1P0ViCg8iAXAAPGeTIU2pA383.jpg

wKioL1P0V1rBtlbsAAP4MrsNrtU983.jpg

配置完成后保存,启动amoeba。

amoeba start

wKiom1P0WcHCh95WAAL9617TGLo629.jpg

连接amoeba

wKioL1P0WweBcx7gAALlsbOaqk8640.jpg

创建数据库,创建表,然后用tcpdump在两个节点抓包,你会发现写操作都会转发到Master。

执行select等语句凡是读操作,会发两个请求给Slave,一个给Master。

wKioL1P0XUOzYWnXAAMGibSAshs102.jpg


wKioL1P0YD7RpzZxAAK_IyJd_IM072.jpg


tcpdump 命令简单介绍

 -i 指定网卡

 -s 指定报文的长度,s0表示抓整个包。

 -nn 不要解析主机名和端口名。

 -XX 显示报文内容十六进制码,ASCII,以太网头部。

 -vv 显示详细信息。

 -A  显示数据包里的ASCII

 -w  把内容导出到指定的文件中

例子:

tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.18.202

tcpdump -i eth1 -s0 -nn -vv -A ip src 210.32.92.217 and tcp dst port 443

还可以用src 指定源地址。


这篇就写到这里了,大家自行抓包测试。




本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1542454

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
关系型数据库 MySQL OLAP
实时计算 Flink版产品使用合集之可以支持 MySQL 数据源的增量同步到 Hudi 吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
25 4
|
5天前
|
运维 DataWorks 关系型数据库
DataWorks产品使用合集之DataWorks还有就是对于mysql中的表已经存在数据了,第一次全量后面增量同步的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
38 2
|
2天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之用CTAS从mysql同步数据到hologres,改了字段长度,报错提示需要全部重新同步如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
44 8
|
3天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用合集之2.2.1版本同步mysql数据写入doris2.0 ,同步完了之后增量的数据延迟能达到20分钟甚至一直不写入如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
3天前
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用合集之在同步MySQL的时候卡在某个binlog文件处如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
实时计算 Flink版产品使用合集之在同步MySQL的时候卡在某个binlog文件处如何解决
|
3天前
|
关系型数据库 MySQL Java
实时计算 Flink版产品使用合集之mysql通过flink cdc同步数据,有没有办法所有表共用一个dump线程
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
8 0
|
5天前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
33 0
|
3天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
26 0
|
5天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
33 0
|
5天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
19 0