服务器三台
数据库Master主服务器:192.168.1.103 安装Mysql数据库
数据库Slave从服务器:192.168.1.104 安装Mysql数据库
MySQL-Proxy调度服务器:192.168.1.102 安装mysql-proxy,mysql
前两台配置主从复制
MySQL-Proxy调度服务器:
1.安装mysql
2.检查系统所需软件包
通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。
gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
libevent* glib* 若缺少相关的软件包,可通过yum -y install方式在线安装
或者直接执行以下命令
</pre><pre name="code" class="html" style="color: rgb(75, 75, 75); font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;">yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig* libevent* glib* readline*
3:编译安装lua
MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua
检查是否安装过lua:
rpm -qa | grep lua
若没有则安装
建议采用源码包进行安装
cd /opt/install
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zvfx lua-5.2.3.tar.gz
cd lua-5.1.4
vi src/Makefile
64位系统需要
在 CFLAGS= -O2 -Wall $(MYCFLAGS) 这一行记录里加上-fPIC,更改为 CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) 来避免编译过程中出现错误。
make linux
make install
4.安装Mysql-proxy
推荐采用已经编译好的二进制版本,因为采用源码包进行编译时,最新版的MySQL-Proxy对automake,glib以及libevent的版本都有很高的要求,而这些软件包都是系统的
基础套件,32位RHEL6平台:
查看linux内核
[root@loc ~]# uname -a
Linux oo 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux
下载对应的版本
http://downloads.mysql.com/archives/proxy/
1:测试平台为RHEL6 32位,因此选择32位的软件包
2:tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-32bit.tar.gz
3:mv mysql-proxy-0.8.3-linux-rhel5-x86-64bit /opt/mysql-proxy
4: [root@oo mysql-proxy]# find share/ -name rw-*
share/doc/mysql-proxy/rw-splitting.lua
把share/doc/mysql-proxy/rw-splitting.lua拷贝到 scripts下
[root@lzm mysql-proxy]# mkdir scripts;
[root@lzm mysql-proxy]# cp share/doc/mysql-proxy/rw-splitting.lua scripts/
[root@lzm scripts]# vim scripts/rw-splitting.lua
查找最小最大连接数改成1 min_idle_connections = 1, max_idle_connections = 1,
cd ..
cd bin
./mysql-proxy --help -all 查看帮助文档
配置读写分离主机和指定路径的 /opt/mysql-proxy/scripts/rw-splitting.lua 的脚本并启动
[root@oo bin]# ./mysql-proxy --proxy-backend-addresses=192.168.1.103 --proxy-read-only-backend-addresses=192.168.1.104 --proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.
2016-03-20 20:34:20: (critical) plugin proxy 0.8.5 started
最后测试
连接的端口不再是3306而是4040
mysql -h192.168.1.102 -uroot -proot -P4040
mysql> insert into user values(1,'jack'); //代理服务器插入数据
Query OK, 1 row affected (0.12 sec)
mysql> select * from user;
+------+------+
| id | name |
+------+------+
| 1 | jack |
+------+------+
1 row in set (0.00 sec)
主服务器 192.168.1.103
mysql> select * from user;
+------+------+
| id | name |
+------+------+
| 1 | jack |
+------+------+
1 row in set (0.00 sec)
从服务器192.168.1.104
mysql> select * from user;
+------+------+
| id | name |
+------+------+
| 1 | jack |
+------+------+
1 row in set (0.00 sec)
为了测试
在从库中192.168.1.104下执行以下命令关闭从库
mysql> stop slave;
Query OK, 0 rows affected (0.12 sec)
代理服务器
mysql> insert into user values(2,'json');
Query OK, 1 row affected (0.02 sec)
主库192.168.1.103
mysql> select * from user;
+------+------+
| id | name |
+------+------+
| 1 | jack |
| 2 | json
+------+------+
2 rows in set (0.00 sec)
从库192.168.1.104
mysql> select * from user;
+------+------+
| id | name |
+------+------+
| 1 | jack |
+------+------+
1 row in set (0.00 sec)