承接上文{{MySQL 安装及主从异步、半同步、同步实现}}

如果我们已经优化 了 SQL,但是读依旧还是瓶颈时,这时就可以选择“读写分离”架构了。 读写分离首先需要将数据库分为主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之 间通过主从复制机制进行数据的同步

实现效果是代理库进行分发实现主库写,从库读

创建代理服务器

上传 mysql-proxy-0.8.5-linux-el6-x86-64bit.tar 并解压

在/etc 下创建配置文件 mysql-proxy.cnf,添加配置信息,授予权限

  1. #mysql-proxy.cnf配置内容
  2. user=root
  3. admin-username=root
  4. admin-password=root
  5. proxy-address=172.16.94.8:3300
  6. proxy-backend-addresses=172.16.94.5:3306
  7. proxy-read-only-backend-addresses=172.16.94.6:3306
  8. proxy-lua-script=/root/software/mysql/mysqlproxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
  9. log-file=/var/log/mysql-proxy.log
  10. log-level=debug
  11. daemon=true
  12. keepalive=true
  1. 115 tar -xzvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
  2. 116 vim /etc/mysql-proxy.cnf
  3. 117 chmod 660 /etc/mysql-proxy.cnf
  4. 131 vim mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua

lua 脚本默认 4 个连接以上才使用读写分离,为了看到效果修改为 1

MySQL读写分离 - 图1

接下来启动 mysql-proxy

  1. #linux默认是从usr/bin目录下查找命令启动,所有需要加上./代表当前目录下
  2. ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

出现错误信息

MySQL读写分离 - 图2

百度一下

mysql-proxy 启动

./mysql-proxy —defaults-file=/etc/mysql-proxy.cnf
提示:(critical) mysql-proxy-cli.c:326: loading config from ‘/etc/mysql-proxy.cnf’ failed: Key file does not start with a group
原因是配置文件 mysql-proxy.cnf 没有加 [mysql-proxy]

添加上 [mysql-proxy] 后问题解决
原文链接:https://blog.csdn.net/Lossdate/article/details/115190860

  1. vim /etc/mysql-proxy.cnf
  2. #添加 [mysql-proxy]
  3. #再次启动,注意下防火墙也要关掉
  4. ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
  5. #启动成功

测试效果实现

在 navicat 上新建一个代理数据库的连接

注意 ip 和端口号别写错了

MySQL读写分离 - 图3

测试下写入一条数据

MySQL读写分离 - 图4

在主库和从库查看数据

  1. mysql -uroot -proot
  2. use lanebin
  3. select * from dept ;

MySQL读写分离 - 图5

因为已经开启了主从复制,关掉主从复制再次测试一下

  1. #从库关闭主从复制
  2. stop slave;

MySQL读写分离 - 图6

再次查看主库和从库信息

MySQL读写分离 - 图7

成功实现了主库写入,从库并没有写入