MySQL配置读写分离
在这里你再也不用担心高手省略了大段代码了,因为我也是新手。
下面开整
先安装lua
Lua 是一个小巧的脚本语言。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
先安装可能的依赖包
在CODE上查看代码片
派生到我的代码片
[root@bogon ~]# yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*libevent* glib* readline-devel[root@bogon ~]# mkdir /opt/install/[root@bogon ~]# cd /opt/install/[root@bogon install]# wget lua.org/ftp/lua-5.1.4.tar.gz[root@bogon install]# tar zxvf lua-5.2.3.tar.gz[root@bogon install]# cd lua-5.2.3[root@bogon install]# make linux
此时如果出现
lua.c:67:31: fatal error: readline/readline.h: No such file or directory
说明缺少libreadline-dev依赖包
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# make install
[root@bogon install]# export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
这行代码我也不知道啥作用,好像是的指定环境变量。
下面开始安装mysql-proxy
安装之前先看一下自己机器是否是64位系统
查看centos内核的版本
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# cat /etc/issue
查看linux版本
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# cat /proc/version
[root@bogon install]# lsb_release -a
如果以上命令都没有出现64字眼说明是32位系统,这里主要是确定你将要下载的mysql-proxy版本应该是哪个。
下载地址:mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# cd /opt/install
[root@bogon install]# wget mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz
[root@bogon install]# tar zxvf mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz
[root@bogon install]# mkdir /opt/mysql-proxy/
[root@bogon install]# cp /opt/install/mysql-proxy-0.8.4-linux-rhel5-x86-32bit/* /opt/mysql-proxy/
[root@bogon install]# cd /opt/mysql-proxy/
[root@bogon install]# export PATH=$PATH:/opt/mysql-proxy/bin/
编辑mysql-proxy配置文件
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# cp doc/mysql-proxy/rw-splitting.lua ./
[root@bogon install]# vi rw-splitting.lua
找到:
在CODE上查看代码片
派生到我的代码片
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 4,
max_idle_connections = 8,
is_debug = false
}
end
这里的4、8是指定链接数,大家可以在做试验时调整为1。
ok,保存,退出。
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# mysql-proxy --proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.2.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua&
这里的192.168.23.131与192.168.23.132是主从数据库。参见blog.csdn.NET/e421083458/article/details/19574049
以上命令后缀追加&表示为后端任务。
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# bg
将正在执行命令隐藏到后端
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# jobs
查看正在后端运行的命令
在CODE上查看代码片
派生到我的代码片
[richard@bogon ~]$ fg 1
将后端命令显示到前台
打开4040端口防火墙端口,因为mysql-proxy监听端口是4040再也不是3306了。正好做以区分。
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# /sbin/iptables -I INPUT -p tcp --dport 4040 -j ACCEPT
[root@bogon install]# /etc/rc.d/init.d/iptables save
[root@bogon install]# service iptables save
查看监听情况:
在CODE上查看代码片
派生到我的代码片
[root@bogon install]# netstat -tlp | grep mysql-proxy
tcp 0 0 *:yo-main *:* LISTEN 13364/mysql-proxy
yo-main很奇怪吧,对我也奇怪,不管它了,下面我们测试一下功能吧。
刚刚我们提到的192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读。myql-proxy的IP是192.168.23.130
创建用于读写分离的数据库连接用户
在131服务器上操作以下命令:
在CODE上查看代码片
派生到我的代码片
[root@bogon ~]# mysql -uroot -p123456
mysql> grant all on *.* to 'proxy1'@'192.168.23.130' identified by '123456';
由于我们设置了131与132的主从复制,所以此时132也执行了以上命令,我们可以确定一下。
在132服务上操作以下命令:
在CODE上查看代码片
派生到我的代码片
mysql> select user,password,host from mysql.user;
+--------+-------------------------------------------+----------------+
| user | password | host |
+--------+-------------------------------------------+----------------+
| root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
| root | | bogon |
| root | | 127.0.0.1 |
| proxy1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 192.168.23.130 |
+--------+-------------------------------------------+----------------+
4 rows in set (0.00 sec)
没错结果存在。
但是我们要做的试验是测试读写分离,所以要让这两台服务器有误差才行。所以暂停132的从服务:
在CODE上查看代码片
派生到我的代码片
mysql> slave stop;
下面我们在131服务器上操作以下命令:
在CODE上查看代码片
派生到我的代码片
mysql> insert into first_tb values (007,’first’);
mysql> insert into first_tb values (110,’second’);
最后再到132上确认一下数据是否有误差,下面试验开始。
在131上打开4个终端,依次敲以下的命令:
在CODE上查看代码片
派生到我的代码片
[root@bogon ~]# mysql -uproxy1 -p'123456' -h192.168.23.130 -P4040
mysql> select * from first_db.first_tb;
你会发现结果会有不一样,那证明配置试验成功。也可以多此尝试以上两行代码直到得到结果。
试验结束记得将slave start,方法参照blog.csdn.Net/e421083458/article/details/19574049
追加内容:设置mysql-proxy服务脚本。
在CODE上查看代码片
派生到我的代码片
#!/bin/sh## mysql-proxy This script starts and stops the mysql-proxy daemon## chkconfig: - 78 30# processname: mysql-proxy# description: mysql-proxy is a proxy daemon to mysql# Source function library.. /etc/rc.d/init.d/functions#PROXY_PATH=/usr/local/binPROXY_PATH=/opt/mysql-proxy/binprog="mysql-proxy"# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ ${NETWORKING} = "no" ] && exit 0# Set default mysql-proxy configuration.#PROXY_OPTIONS="--daemon"PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.23.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua"PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid# Source mysql-proxy configuration.if [ -f /etc/sysconfig/mysql-proxy ]; then. /etc/sysconfig/mysql-proxyfiPATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH# By default it's all goodRETVAL=0# See how we were called.case "$1" instart)# Start daemon.echo -n $"Starting $prog: "$NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=root --log-level=debug --log-file=/opt/mysql-proxy/log/mysql-proxy.logRETVAL=$?echoif [ $RETVAL = 0 ]; thentouch /var/lock/subsys/mysql-proxy]echo "ok"fi;;stop)# Stop daemons.echo -n $"Stopping $prog: "killproc $progRETVAL=$?echoif [ $RETVAL = 0 ]; thenrm -f /var/lock/subsys/mysql-proxyrm -f $PROXY_PIDfi;;restart)$0 stopsleep 3$0 start;;condrestart)[ -e /var/lock/subsys/mysql-proxy ] && $0 restart;;status)status mysql-proxyRETVAL=$?;;*)echo "Usage: $0 {start|stop|restart|status|condrestart}"RETVAL=1;;esacexit $RETVAL
启动脚本:
[root@bogon init.d]# /opt/mysql-proxy/init.d/mysql-proxy start
有任何问题,欢迎留言。