mysql 5.6 半同步复制_MySQL 5.6 一主多从的 半同步复制搭建

本文详细介绍了MySQL 5.6中半同步复制的原理和配置过程,包括主从切换的优化、多线程复制的实现。通过实例展示了如何在CentOS 6.6环境下搭建一主多从的半同步复制环境,强调了配置过程中需要注意的参数和步骤,以及在实际操作中可能遇到的问题和解决办法。
摘要由CSDN通过智能技术生成

MySQL 5.6 一主多从的 半同步复制搭建

半同步简介:

在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的。异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求。但这也同时带来了很高的风险,如果在主服务器或从服务器端发生故障,会造成主从数据的不一致,甚至在恢复时造成数据丢失。

从MySQL5.5开始引入了一种半同步复制功能,该功能可以确保主服务器和访问链中至少一台从服务器之间的数据一致性和冗余。在这种配置结构中,一台主服务器和其许多从服务器都进行了配置,这样在复制拓扑中,至少有一台从服务器在父主服务器进行事务处理前,必须确认更新已经收到并写入了其中继日志(Relay

Log)。当出现超时,源主服务器必须暂时切换到异步复制模式重新复制,直到至少有一台设置为半同步复制模式的从服务器及时收到信息。

继5.5半同步复制后,MySQL5.6又对其进行了优化和改进,其中有两个地方较为重要:

1、在主从切换后,在传统的方式里,需要找到binlog和POS点,然后更改master指向,而在mysql5.6里,你无须再知道binlog和POS点,你只需要知道master的IP、端口,账号密码即可,因为同步复制是自动的,mysql通过内部机制GTID自动找点同步。

2、多线程复制,以前的版本,同步复制是单线程的,只能一个一个执行,在MySQL5.6里,可以做到多个库之间的多线程复制,但一个库里的表,多线程复制是无效的。

一、试验环境准备

1.1、安装平台:vmware workstation 10

操作系统:CentOS release 6.6 (Final) x86_64,最小化安装。

MySQL版本:mysql-5.6.24-linux-glibc2.5-x86_64

关闭防火墙

1.2、服务器IP地址规划:

MySQL Master:192.168.1.152

MySQL Slave1:192.168.1.201

MySQL Slave2:192.168.1.202

1.3、实验拓扑:

9636d3d27dd558e4a02b404fc025f003.png

二、安装Mysql5.6

2.1、由于是最小化安装的系统,需要安装一些基本的组建

2.2、新建用户和数据目录。

2.3、安装并初始化mysql

2.4、为mysql提供主配置文件

2.5、为mysql配置sysv服务脚本

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

2.6、输出mysql的man手册至man命令的查找路径。

编辑/etc/man.config,添加如下行即可

2.7、输出mysql的头文件至系统头文件路径/usr/include

这可以通过简单的创建链接实现

2.8、输出mysql的库文件给系统库查找路径。

2.9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。

vim /etc/my.cnf

datadir = /mydata/data         #添加

log-error = /mydata/data/error.log  #添加

#pid-file = /mydata/data/mysql.pid   #注释掉

tmpdir = /var/tmp #不建议放在/tmp下

service mysqld start

以上安装过程在三台服务器均需执行。

三、主从模式配置

3.1、配置master节点:

[root@master ~]# cat /etc/my.cnf

rpl_semi_sync_master_enabled=ON

禁用  rpl_semi_sync_master_enabled=ON

参数不然启动报错

注意:添加

上面的配置文件都可以不要,对于新手来说,看不懂,就很容易出错,新手朋友照着这个方案搭建起来也不能主从复制

选填下面的my.cnf配置

#

The following options will be passed to all MySQL clients

[client]

#password       = your_password

port            = 3306

socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server

[mysqld]

socket  = /tmp/mysql.sock

basedir = /usr/local/mysql

datadir = /data/mysql

tmpdir = /tmp

slave-load-tmpdir = /tmp

pid-file = /data/mysql/mysql.pid

#skip-name-resolve

##skip-symbolic-links

#replicate-wild-ignore-table = mysql.%

#replicate-wild-ignore-table = test.%

#log-bin-index = mysql-bin.index

#relay-log-index = relay-log.index

max_connect_errors = 10000

max_connections = 500

wait-timeout = 30

skip-external-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

#new add DBA

server-id=11

report-port=3306

port=3306

log-bin=mysql-bin.log

#report-h

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

# Remove the next comment character if you are not familiar with SQL

#safe-updates

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

mysql>

show variables like '%dir%';

+-----------------------------------------+----------------------------+

| Variable_name                           | Value|

+-----------------------------------------+----------------------------+

|basedir

| /usr                       |                      | |

| datadir                                 | /var/lib/mysql/            |  |

| slave_load_tmpdir                       | /tmp                       |

| tmpdir|/tmp|

+-----------------------------------------+----------------------------+

配置参数简要说明:

3.2、配置slave节点

[root@slave1 ~]# cat /etc/my.cnf

选填:

basedir=/usr

datadir=/var/lib/mysql

tmpdir=/tmp

socket=/var/lib/mysql/mysql.sock

slave_load_tmpdir=/tmp

max_connect_errors = 10000

max_connections = 500

wait-timeout = 30

#new add dba

log-bin=master-bin

server-id=1

report-port=3306

port=3306

report-host=WIN-P11PIHOSG63.lan

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]

log-error=/var/log/mysqld.log

#pid-file=/var/run/mysqld/mysqld.pid

说明:楼主搭建测试是5.5以后的半同步复制(新功能),建议数据库版本一致,不要用5.6到5.5,如果不懂my.cnf配置的新手会出很多问题。

针对半同步复制技术,建议在MHA里面打开,如果是测试环境不要要求那么高,不然会出问题。当然,看你怎么去思考。

[root@slave2 ~]# cat /etc/my.cnf

3.3、创建复制用户

在主库上执行

3.4、在主从节点上安装相关的插件并启动复制

在主库上执行

在从库上执行

查看主库的复制线程和pid号:

mysql> show master status\G;

*************************** 1. row ***************************

File: master-bin.000001

Position: 539

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set: 22915959-e5e3-11e5-a894-000c29c0d786:1-2

1 row in set (0.00 sec)

安装完毕后在两从库上定义到主库的复制连接

0811b6d8e2c59bf2e660624cefde70a4.png

可以看到主从服务器已经启用gtid功能。

在主库上查看已连接的slave主机

查看slave1的复制状态

b99ff7b7478ed5d6b71ce139cb3720ba.png

再去查看slave2的状态

8c687c345defb7b181f30b5b1b50bbfd.png

可以看到此时两个从库的复制进度是一样的。

3.5、在主库写入数据进行测试

在从库上执行查询可以看到

四、配置基于ssl的加密

4.1、主服务器上生成私钥

4.2、主服务器上生成自签证书

权限设置

4.3、为从服务器生成证书

将CA证书、签署的slave端证书、master证书及私钥传送到slave服务器上

4.4、配置主从ssl

编辑master服务器my.cnf配置文件

配置从服务器ssl(该步骤两台从服务器相同)

编辑slave服务器my.cnf配置文件

启动从服务器上的复制

可以看到如下信息

但是到这里之后发现了一个问题,那就是我使用的编译好的mysql二进制包不支持ssl,要想支持需要重新编译mysql,71c5ecee6a9d2324531eaaf1d97214d4.png限于时间有限,这里就不重来了,有需要的朋友就自己折腾下吧。

参考:

http://zhangjianjian.blog.51cto.com/2944771/1632109

http://www.it165.net/database/html/201403/5562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值