首页 > 代码库 > GTID及mysql-proxy实现mysql5.6读写分离

GTID及mysql-proxy实现mysql5.6读写分离

GTID说明

MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。


要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:

binlog-format:二进制日志的格式,有row、statement和mixed几种类型;

用于启动GTID及满足附属的其它需求:

log-slave-updates:当从服务器复制时是否启用二进制日志

gtid-mode:是否启用gtid功能

enforce-gtid-consistency:是否强制gtid一致性功能

report-port:是否启用在gtid模式下从服务器连入主服务器时记录从服务器的端口

report-host:是否启用在gtid模式下从服务器连入主服务器时记录从服务器的IP或主

               机名

启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;

master-info-repository:定义二进制日志主服务器将记录从服务器的复制相关信息

                记录在文件master.info还是记录在表mysql.slave_master_info中

relay-log-info-repository:从服务器的记录

启用复制有关的所有校验功能:

binlog-checksum:主服务器在启动时是否校验gtid的校验码

master-verify-checksum

slave-sql-verify-checksum

binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,

                       可降低故障排除的复杂度;

log-bin:启用二进制日志,这是保证复制功能的基本前提;

server-id:同一个复制拓扑中的所有服务器的id号必须惟一;

sync-master-info:启用之可确保无信息丢失;

slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;


搭建服务内容说明

    三台服务器地址为202.207.178.6(主节点(Master),202.207.178.7(从节点(Slave),202.207.178.8(前端节点),在主节点和从节点之间基于GTID实现主从复制,在前端节点上安装mysql-proxy实现对主从节点的读写分离。(为避免影响,关闭防火墙和selinux)


一、安装MySQL(我这里通过编译安装MySQL-5.6.33(通用二进制格式))

Master:

1.将下载好的压缩包解压至/usr/local,并进入此目录

# tar xf mysql-5.6.33-linux-glibc2.5-i686.tar.gz -C /usr/local/

# cd /usr/local/

2.为解压后的目录创建一个链接,并进入此目录

# ln -sv mysql-5.6.33-linux-glibc2.5-i686 mysql

# cd mysql

3.创建MySQL用户(使其成为系统用户)和MySQL组

# groupadd -r -g 306 mysql

# useradd -g 306 -r -u 306 mysql

4.使mysql下的所有文件都属于mysql用户和mysql组

# chown -R mysql.mysql /usr/local/mysql/*

5.创建数据目录,并使其属于mysql用户和mysql组,其他人无权限

# mkdir -p /mydata/data

# chown -R mysql:mysql /mydata/data/

# chmod o-rw /mydata/data/

6.准备就绪,开始安装

# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

7.安装完成后为了安全,更改/usr/local/mysql下所有文件的权限

#chown -R root .

8.准备启动脚本,并使其开机自动启动

# cp support-files/mysql.server /etc/init.d/mysqld

# chkconfig --add mysqld

# chkconfig --list mysqld

9.编辑数据库配置文件

# cp support-files/my-default.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

binlog-format=ROW

log-bin=master-bin

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=1

report-port=3306

port=3306

datadir=/mydata/data

socket=/tmp/mysql.sock

report-host=202.207.178.6

10.提供执行相关命令所需的环境变量

# vim /etc/profile.d/mysql.sh

添加以下内容:

export PATH=$PATH:/usr/local/mysql/bin

11.至此,MySQL服务配置完成,可以启动测试

# service mysqld start

Slave:(方法与主相同,只是配置文件有所不同)

配置文件:

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=11

report-port=3306

port=3306

log-bin=mysql-bin.log #如果用到高可用功能,随时提升一个从为主,需要启动二进

                    制日志

datadir=/mydata/data

socket=/tmp/mysql.sock

report-host=202.207.178.7

二、配置主从复制

Master:

创建复制用户:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repluser‘@‘202.207.178.%‘             IDENTIFIED BY ‘replpass‘;

mysql> FLUSH PRIVILEGES;

Slave:

启动从节点的复制线程:

mysql> CHANGE MASTER TO MASTER_HOST=‘202.207.178.6‘,MASTER_USER=‘repluser‘,

            MASTER_PASSWORD=‘replpass‘,MASTER_AUTO_POSITION=1;

mysql> SHOW SLAVE STATUS\G;

mysql> START SLAVE;

测试一切正常!

三、安装mysql-proxy(我这里使用mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz)

1、创建代理用户

# useradd -r mysql-proxy

2、解压相应软件包,并创建链接

# tar xf mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz -C /usr/local/

# cd /usr/local/

# ln -sv mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit mysql-proxy

3、导出环境变量

# cd mysql-proxy

# vim /etc/profile.d/mysql-proxy.sh

export PATH=$PATH:/usr/local/mysql-proxy/bin

4、启动mysql-proxy 

# mysql-proxy --daemon --log-level=debug 

            --log-file=/var/log/mysql-proxy.log --plugins="proxy" 

            --proxy-backend-addresses="202.207.178.6:3306"

            --proxy-read-only-backend-addresses="202.207.178.7:3306"

# tail /var/log/mysql-proxy.log

此时发现已启动!

5、在主服务器上创建一个root用户

mysql>GRANT ALL ON *.* TO ‘root‘@‘202.207.178.%‘ IDENTIFIED BY ‘redhat‘;

mysql> FLUSH PRIVILEGES;

6.在从节点上连接前端mysql-proxy节点测试

# mysql -uroot -p -h202.207.178.8 --port=4040

此时创建数据库或表,可能会发现主从数据库都有,这可能是凑巧了,因为要实现           读写分离要借助lua脚本        

7、重启mysql-proxy,并为其指明lua脚本

# killall mysql-proxy

# mysql-proxy --daemon --log-level=debug 

            --log-file=/var/log/mysql-proxy.log --plugins="proxy" 

            --proxy-backend-addresses="202.207.178.6:3306" 

            --proxy-read-only-backend-addresses="202.207.178.7:3306" 

            --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-                    proxy/rw-splitting.lua"

# tail /var/log/mysql-proxy.log

此时,正真意义上的读写分离完成了!


                                   欢迎批评指正!

本文出自 “10917734” 博客,请务必保留此出处http://10927734.blog.51cto.com/10917734/1869205

GTID及mysql-proxy实现mysql5.6读写分离