MySQL MyCAT 读写分离实战

1.MySQL读写分离概念:MYSQL读写分离的原理其实就是让Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE) , 而让Slave数据库处理SELECT操作 , MYSQL读写分离前提是基于MYSQL主从复制 , 这样可以保证在Master上修改数据 , Slave同步之后 , WEB应用可以读取到Slave端 的数据 。
1.1读写分离实现方式:实现MYSQL读写分离可以基于第三方插件 , 也可以通过开发修改代码实现 , 具体实现的读写分离的常见 方式有如下四种:
Amoeba 读 写 分 离 ; MySQL-Proxy读写分离;
Mycat读写分离;
基于程序读写分离(效率很高 , 实施难度大 , 开发改代码);
Amoeba 是阿里08年开源的以MySQL为底层数据存储 , 并对WEB、App应用提供MySQL协议接口的proxy 。它集中地响应WEB应用的请求 , 依据用户事先设置的规则 , 将SQL请求发送到特定的数据库上 执行 , 基于此可以实现负载均衡、读写分离、高可用性等需求 。
Mysql-Proxy是MySQL官方提供的mysql中间件服务 , 支持无数客户端连接 , 同时后端可连接若干台Mysql-Server服务器 , MYSQL-Proxy自身基于MySQL协议 , 连接MYSQL-Proxy的客户端无需修改任何 设置 ,  跟正常连接MYSQL Server没有区别 , 无需修改程序代码 。
Mycat是基于阿里12年开源的cobar开发的一个数据库中间件 , 在架构体系中是位于数据库和应用层之 间的一个组件 , 并且对于应用层是透明的 , 它可实现读写分离 , 分库分表 。
2.基于mysql-proxy实现读写分离:proxy: 192.168.75.133master: 192.168.75.134slave: 192.168.75.1352.1工作原理图解:

MySQL MyCAT 读写分离实战

文章插图
2.2配置proxy:proxy可以选择和mysql部署在同一台服务器 , 也可以选择单独部署在另一台独立服务器 。
# 下载mysql-proxy:wget http://mirrors.163.com/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux- el6-x86-64bit.tar.gz# 解压:tar xf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gzmv mysql-proxy-0.8.4-linux-el6-x86-64bit /usr/local/mysql-proxy# 配置环境变量:[root@node3 src]# echo "export PATH=/usr/local/mysql-proxy/bin:$PATH" >/etc/profile.d/mysql-proxy.sh[root@node3 src]# . /etc/profile.d/mysql-proxy.sh # 启动MYSQL-Proxy中间件:[root@node3 src]# useradd-rmysql-proxy[root@node3 src]# mysql-proxy --daemon --log-level=debug --user=mysql-proxy -- keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend- addresses="192.168.75.134:3306" --proxy-read-only-backend- addresses="192.168.75.135:3306" --proxy-lua-script="/usr/local/mysql- proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin- username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql- proxy/lib/mysql-proxy/lua/admin.lua"# 查看端口/日志:[root@node3 src]# netstat -ntlp |grep 40tcp00 0.0.0.0:40400.0.0.0:*LISTEN1348/mysql-proxytcp00 0.0.0.0:40410.0.0.0:*LISTEN1348/mysql-proxy2.3启动的相关参数:# Mysql-Proxy的相关参数详解如下:--help-all:获取全部帮助信息;--proxy-address=host:port:代理服务监听的地址和端口 , 默认为4040;--admin-address=host:port:管理模块监听的地址和端口 , 默认为4041;--proxy-backend-addresses=host:port:后端mysql服务器的地址和端口;--proxy-read-only-backend-addresses=host:port :后端只读mysql服务器的地址和端口;--proxy-lua-script=file_name:完成mysql代理功能的Lua脚本;--daemon:以守护进程模式启动mysql-proxy;--keepalive:在mysql-proxy崩溃时尝试重启之;--log-file=/path/to/log_file_name:日志文件名称;--log-level=level:日志级别;--log-use-syslog:基于syslog记录日志;--plugins=plugin:在mysql-proxy启动时加载的插件;--user=user_name:运行mysql-proxy进程的用户;--defaults-file=/path/to/conf_file_name :默认使用的配置文件路径 , 其配置段使用[mysql-proxy]标识;--proxy-skip-profiling:禁用profile;--pid-file=/path/to/pid_file_name:进程文件名;2.4启动master/slavesystemctl start mariadb2.5查看读写分离状态:基于4041端口MySQL-Proxy查看读写分离状态 , 登录4041管理端口
MySQL MyCAT 读写分离实战

文章插图
2.5授权proxy:grant all on *.* to "mysql-proxy"@"192.168.75.133" identified by "123456";2.6通过代理创建数据:


推荐阅读