首页 > 代码库 > 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读写分离