ameimeng 发表于 2018-10-2 11:22:21

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

  GTID说明:

  MySQL 5.6引入的GTID(Global Transaction>  要在MySQL 5.6中使用复制功能,其服务配置段中于少应该定义如下选项:
  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.%'>  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
  此时,正真意义上的读写分离完成了!
  欢迎批评指正!

页: [1]
查看完整版本: GTID及mysql-proxy实现mysql5.6读写分离