mysql proxy读写分离
来源:互联网 发布:基础英语口语对话软件 编辑:程序博客网 时间:2024/05/04 08:08
mysql proxy 介绍
MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可
服务器说明:
192.168.1.100 (主库)
192.168.1.101 (从库)
192.168.1.100 (mysql proxy)
mysql proxy安装
前往mysql官网下载软件包,我这里的平台是centos 6.5,64位操作系统,所以下载http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz,这个下载的是已编译的文件,解压即可使用。
查看操作系统版本信息:
[root@iZ23rter8cjZ /]# uname -aLinux iZ23rter8cjZ 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux[root@iZ23rter8cjZ /]# getconf LONG_BIT64
解压安装:
[root@iZ23rter8cjZ ~]# tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz [root@iZ23rter8cjZ ~]# cd mysql-proxy-0.8.5-linux-el6-x86-64bit[root@iZ23rter8cjZ mysql-proxy-0.8.5-linux-el6-x86-64bit]# lsbin include lib libexec licenses share[root@iZ23rter8cjZ ~]# cp mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql/proxy/[root@iZ23rter8cjZ ~]# cd /usr/local/mysql/proxy/
配置环境变量
[root@iZ23rter8cjZ proxy]# vim ~/.bash_profile #添加:/usr/local/mysql/proxy/binPATH=$PATH:$HOME/bin:/usr/local/mysql/proxy/bin#保存退出,读取环境变量[root@iZ23rter8cjZ proxy]# source ~/.bash_profile
把lua,读写分离脚本拷贝lua目录
[root@iZ23rter8cjZ proxy]# cp /usr/local/mysql/proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql/proxy/lib/mysql-proxy/lua/
编辑rw-splitting.lua脚本
默认最小4个(最大8个)以上的客户端连接才会实现读写分离, 现改为最小1个最大1
个,便于读写分离的测试。
注:在读写分离测试时,需要开启多个窗口连接mysql-proxy
这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections
预设值时, 不会进行读写分离, 即查询操作会发生到Master上
就像这样子:
开启防火墙
在192.168.1.100和192.168.1.101上都设置
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p tcp -m tcp --dport 4040 -j ACCEPT
重启防火墙设置:
[root@iZ23rter8cjZ lua]# service iptables restartiptables: Setting chains to policy ACCEPT: filter [ OK ]iptables: Flushing firewall rules: [ OK ]iptables: Unloading modules: [ OK ]iptables: Applying firewall rules: [ OK ]
设置LUA_PATH变量
注:对于此变量也可不设置。可在mysql-proxy启动脚本中配置。
在/etc/profile中添加如下内容
LUA_PATH="/usr/local/mysql/proxy/lib/mysql-proxy/lua/?.lua"export LUA_PATH
执行mysql-proxy -V显示如下结果,显示mysql proxy的lua脚本路径
[root@iZ23rter8cjZ lua]# mysql-proxy -Vmysql-proxy 0.8.5 chassis: 0.8.5 glib2: 2.16.6 libevent: 2.0.21-stable LUA: Lua 5.1.4 package.path: /usr/local/mysql/proxy/lib/mysql-proxy/lua/?.lua package.cpath: /usr/local/mysql/proxy/lib/mysql-proxy/lua/?.so;-- modules proxy: 0.8.5
登录主库192.168.1.100和从库192.168.1.101给mysq-proxy登录用户授权
授权grant all privileges on *.* to 'mysql-proxy'@'%' identified by '123456';刷新权限flush privileges;
mysql proxy 命令简介
–help-all ———— 用于获取全部帮助信息
–proxy-address=host:port ———— 代理服务监听的地址和端口(缺省是4040)
–admin-address=host:port ———— 指定管理主机地址和端口(缺省是4041)
–proxy-backend-addresses=host:port ——后端mysql服务器的地址和端口(主服务器)
简写:-b
–proxy-read-only-backend-addresses=host:port ———— 后端只读mysql服务器的地址和端口(从服务器)简写:-r
–proxy-lua-script=file ———— 指定mysql代理功能的Lua脚本文件 –daemon ———— 以守护进程模式启动mysql-proxy
–defaults-file=/path/to/conf_file_name ———— 默认使用的配置文件路径
–log-file=/path/to/log_file_name ———— 日志文件名称
–log-level=level ———— 日志级别
–user=user_name ———— 运行mysql-proxy进程的用户
–admin-username=user ———— 指定登录到mysql-proxy管理界面的用户名 –admin-password=pass ———— 指定登录到mysql-proxy管理界面的用户密码
–admin-lua-script=script-file ————管理模块的lua脚本文件路径(创建管理接口)
–plugins=admin ———— 加载管理插件
可以是用mysql-proxy –help 查看帮助
开关选项启动 mysql-proxy
mysql-proxy --daemon --log-level=debug \--log-file=/var/log/mysql-proxy.log \--plugins=proxy -b 192.168.1.100:3306 -r 192.168.1.101:3306 \--proxy-lua-script=/usr/local/mysql/proxy/lib/mysql-proxy/lua/rw-splitting.lua \--plugins=admin --admin-username=admin \--admin-password=admin \--admin-lua-script=/usr/local/mysql/proxy/lib/mysql-proxy/lua/admin.lua
查看启动日志:
测试读写分离
mysql -umysql-proxy -p123456 -h192.168.1.100 -P4040注意:这里需要多开几个终端,连接mysql-proxy先登录mysql-proxy管理界面mysql -uadmin -padmin -h192.168.1.100 -P4041select * from backends;mysql> select * from backends;+-----------+-----------------+-------+------+------+-------------------+| backend_ndx | address | state | type | uuid | connected_clients |+-----------+-----------------+-------+------+------+-------------------+| 1 | 192.168.1.100:3306 | up | rw | NULL | 0 || 2 | 192.168.1.101:3306 | up | ro | NULL | 0 |+-----------+-----------------+-------+------+------+-------------------+2 rows in set (0.00 sec)state:up时才能经行读写分离,所以需要多开几个连接,查看这个状态。之前创建了数据库repl_db和repl_table,注意两个数据库都需要创建同样的数据表create database repl_db charset=utf8;use repl_db;CREATE TABLE `repl_table` ( `f1` int(11) DEFAULT NULL, `f2` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> insert into repl_table(f1,f2) values('1','one');Query OK, 1 row affected (0.01 sec)mysql> select * from repl_db.repl_table;Empty set (0.02 sec)发现查询为空,先不着急,mysql连接主库查看一下,登录192.168.1.100连接主库。mysql -uroot -p123456mysql> select * from repl_db.repl_table;+------+------+| f1 | f2 |+------+------+| 1 | one |+------+------+1 row in set (0.00 sec)结果有数据。恭喜你,配置成功。
- Mysql proxy读写分离
- MySQL Proxy读写分离
- mysql-proxy读写分离
- mysql proxy读写分离
- Linux Mysql proxy 读写分离
- 读写分离实践:mysql-proxy
- MySQL Proxy 实现读写分离
- mysql-proxy实现读写分离
- mysql-proxy 实现读写分离
- mysql-proxy实现读写分离
- mysql-proxy实现读写分离
- mysql-proxy 实现读写分离
- mysql-proxy实现读写分离
- mysql-proxy实现读写分离
- mysql-proxy实现读写分离:
- mysql配置mysql-proxy读写分离
- mysql配置mysql-proxy读写分离
- MySQL AB复制&mysql-proxy读写分离
- HDU 5631Minimum Cut-Cut
- win7+vs2010+opencv3.0.0+安装
- 将APK安装到/system/app,变身系统级应用
- Swift版仿天猫搜索界面
- shell脚本小程序 猜数字游戏
- mysql proxy读写分离
- Docker常用命令
- 面试网答题(如老牛网)
- Socket编程之原始套接字(一)---myping的实现
- 搭建局域网web服务器
- POJ 1611The Suspects
- Hibernate Set查询过虑
- HEAP: Free Heap block XXXX modified at XXXX after it was freed
- HDU 1023 Train Problem II 找规律 大数计算