MySQL Proxy的安装及基本命令使用教程
MySQLProxy最壮大的一项功能是告终“读写离别(Read/WriteSplitting)”。它的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的改变同步到集群中的从数据库。
0.必备软件:
1、LUA
能够去LUA的官方下载:dpa.nsysu.edu.tw/Downloads/MySQL-Proxy/。
可能去MYSQL官方下载源代码。
我这里下载了:
mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.6.0.tar.gz
3、测验过程中废止了B和C的REPLICATION。这么SQL语句一下子就看出来从哪里来的。
万一是M-S(能够先在SLAVE上举行STOPSLAVE)
1.安装
下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。
[@s1.yejr.com~]#tarzxfmysql-proxy-0.6.0-linux-rhas4-x86.tar.gz [@s1.yejr.com~]#cdmysql-proxy-0.6.0-linux-rhas4-x86 #可以看到有2个目录 [@s1.yejr.commysql-proxy-0.6.0-linux-rhas4-x86]#ls sbinshare [@s1.yejr.commysql-proxy-0.6.0-linux-rhas4-x86]#mvsbin/mysql-proxy/usr/local/sbin/ [@s1.yejr.commysql-proxy-0.6.0-linux-rhas4-x86]#lsshare mysql-proxytutorial-constants.luatutorial-packets.luatutorial-rewrite.luatutorial-warnings.lua tutorial-basic.luatutorial-inject.luatutorial-query-time.luatutorial-states.lua #将lua脚本放到/usr/local/share下,以备他用 [@s1.yejr.commysql-proxy-0.6.0-linux-rhas4-x86]#mvshare/mysql-proxy/usr/local/share/ #删除符号连接等垃圾代码 [@s1.yejr.commysql-proxy-0.6.0-linux-rhas4-x86]#strip/usr/local/sbin/mysql-proxy
2.启动
编译一下启动管理脚本:
[@s1.yejr.com~]#vi/etc/init.d/mysql-proxy #!/bin/sh exportLUA_PATH=/usr/local/share/mysql-proxy/?.lua mode=$1 if[-z"$mode"];then mode="start" fi case$modein 'start') mysql-proxy--daemon\ --admin-address=:4401\ --proxy-address=:3307\ --proxy-backend-addresses=:3306\ --proxy-read-only-backend-addresses=192.168.133.232:3306\ --proxy-read-only-backend-addresses=10.10.74.61:3306\ --proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua ;; 'stop') killallmysql-proxy ;; 'restart') if$0stop;then $0start else echo"retartfailed!!!" exit1 fi ;; esac exit0
现在解释一下启动脚本:
--daemon采用daemon方式启动
--admin-address=:4401指定mysqlproxy的管理端口,在这里,表示本机的4401端口
--proxy-address=:3307指定mysqlproxy的监听端口,也可以用127.0.0.1:3307表示
--proxy-backend-addresses=:3306指定mysql主机的端口
--proxy-read-only-backend-addresses=192.168.1.1:3306指定只读的mysql主机端口
--proxy-read-only-backend-addresses=192.168.1.2:3306指定另一个只读的mysql主机端口
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离
完整的参数可以运行以下命令查看:
mysql-proxy--help-all
运行以下命令启动/停止/重启mysqlproxy:
[@s1.yejr.com~]#/etc/init.d/mysql-proxystart [@s1.yejr.com~]#/etc/init.d/mysql-proxystop [@s1.yejr.com~]#/etc/init.d/mysql-proxyrestart
3.试用
[@s1.yejr.com~]#mysql-h127.0.0.1-uroot-P3307
mysql>showprocesslist;
+-------+------+----------------+------+---------+------+-------+------------------+ |Id|User|Host|db|Command|Time|State|Info| +-------+------+----------------+------+---------+------+-------+------------------+ |30052|root|localhost:9656|NULL|Query|0|NULL|showprocesslist| +-------+------+----------------+------+---------+------+-------+------------------+
可以看到,产生了一个新连接。
用sysbench测试一下,看会不会挂掉:
[@s1.yejr.com~]#sysbench--test=oltp--mysql-table-engine=innodb--oltp-table-size=1000000\ --mysql-socket=/tmp/mysql.sock--mysql-user=root--mysql-db=testprepare [@s1.yejr.com~]#sysbench--test=oltp--mysql-table-engine=innodb--oltp-table-size=1000000\ --mysql-socket=/tmp/mysql.sock--mysql-user=root--mysql-db=testrun
......... ......... Threadsfairness: events(avg/stddev):10000.0000/0.00 executiontime(avg/stddev):23.0387/0.00
还好,没给大家丢脸,剩下的测试自己完成吧:)
4.其他
mysqlproxy还可以实现连接池的功能,这在很多LAMP开发中是软肋,因此,有了mysqlproxy,就可以不用再担心连接数超限的问题了。
如果使用rw-splitting.lua脚本的话,最好修改以下2个参数的默认值:
min_idle_connections=1 max_idle_connections=3