准备工作:安装好mysql,安装mysql,请看这篇文章
[root@node1 src]# ls
keepalived-1.1.19.tar.gz mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz
[root@node1 src]# rpm -ivh lua-5.0.2-1.el5.rf.i386.rpm
[root@node1 src]# rpm -ivh lua-devel-5.0.2-1.el5.rf.i386.rpm
[root@node1 src]# tar -xf mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz
可以直接使用
[root@node1 src]# mv mysql-proxy-0.8.0-linux-rhel5-x86-32bit /usr/local/mysql-proxy
[root@node1 src]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
[root@node1 mysql-proxy]# vim rw-splitting.lua
35 -- connection pool
36 if not proxy.global.config.rwsplit then
37 proxy.global.config.rwsplit = {
38 min_idle_connections = 1, 最小空闲线程连接
39 max_idle_connections = 8, 最大线程连接,基本没用
40
41 is_debug = false
在读写的机器上授权用户和密码,这边在192.168.9.2(读写),192.168.9.3(读)上依次登陆
[root@mysql2 bin]# mysql -uroot -p
Enter password:
mysql> grant all on *.* to proxy@'%' identified by 'root';
mysql> flush privileges;
mysql> exit
[root@mysql3 bin]# mysql -uroot -p
Enter password:
mysql> grant all on *.* to proxy@'%' identified by 'root';
mysql> flush privileges;
mysql> exit
[root@node1 bin]# cd /usr/local/mysql-proxy/bin
查看帮助
[root@node1 bin]# ./mysql-proxy --help-proxy
mysql-proxy --proxy-read-only-backend-addresses=192.168.0.5:3306 --proxy-backend-addresses=192.168.0.3:3306 --proxy-lua-script=/usr/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=nobody --log-level=debug --log-use-syslog
-P 决定mysql用那个接口进行连接,指定mysql-proxy工作的时候允许访问的IP和接口 模拟成mysql,端口用3306,要保证自己本地的mysql不要运行,打开后端口冲突,mysql-proxy运行不起来
-r 只读的后端服务器 192.168.1.140
-b 读写的后端服务器 192.168.1.14
-s 工作的时候指定脚本的位置和名称,默认是没有的
版本小于5.1.12,会出现bug,要加上-bug
--deamon 以一个服务的形式去启动
什么算服务:被定义为服务的进程是没有终端的,不依赖于用户的终端。终端关掉,服务还是可以正常运行的
[root@node1 bin]# ./mysql-proxy -P 192.168.9.1:3306 -b 192.168.9.2:3306 -r 192.168.9.3:3306 -s \
> /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon &
验证读写分离:
在读写服务器192.168.9.2上操作
create database lzn;
use lzn;
create table t1(name char(50),level char(50));
insert into t1 values('node2','9.2');
在读服务器192.168.9.3上操作
create database lzn;
use lzn;
create table t1(name char(50),level char(50));
insert into t1 values('node3','9.3');
拿一台可以连接的机器当客户端,这边用的是192.168.9.251
mysql -uproxy -proot -h 192.168.9.1
mysql> use lzn;
mysql> select * from t1;
+-------+-------+
| name | level |
+-------+-------+
| node3 | 9.3 |
+-------+-------+
1 row in set (0.00 sec)
看到内容会死node3,9.3说明是我们的读服务器,成功
验证写:执行插入数据,重新查,发现还是在读服务器上
mysql> insert into t1 values('linzhennan','cn');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+-------+-------+
| name | level |
+-------+-------+
| node3 | 9.3 |
+-------+-------+
1 row in set (0.00 sec)
到读写数据库192.168.9.2上,查询,到此,读写分离成功
mysql> select * from t1;
+------------+-------+
| name | level |
+------------+-------+
| linzhennan | cn |
| node2 | 9.2 |
+------------+-------+
2 rows in set (0.00 sec)
验证读写分离后可以做AB复制,主从复制
还没有评论,快来抢沙发!