读写分离的含义:
MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于
读操作量比较大的场景,可减轻master的压力。
使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后
端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,
判断出是读操作还是写操作,然后分发至对应的mysql服务器上。
实验环境:
server1:172.25.38.1 master
server2:172.25.38.2 slave
server3:172.25.38.3 mysql-proxy
实验准备:
可以参考我写的主从复制:https://blog.csdn.net/aaaaaab_/article/details/81515111
第一:在172.25.38.1和172.25.38.2两台mysql搭建主从复制架构。
第二、在proxy机器上安装配置mysql-proxy,实现master/slave架构读写分离。
第一步只演示主从复制效果,详细配置点击上方网址:
在从端可以看到与主端master已经连接:
mysql> show slave status\G 已经达成主从复制
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.254.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: server2-relay-bin.000002
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在主端插入字段信息测试主从复制:
mysql> use love;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_love |
+----------------+
| ours |
+----------------+
1 row in set (0.00 sec)
mysql> insert into ours values('xxx','789'); 插入字段信息
Query OK, 1 row affected (0.28 sec)
从端可以同步查看:
mysql> use love;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from ours; 可以查看表格信息
+----------+----------+
| username | password |
+----------+----------+
| xfl | 123 |
| xyy | 456 |
| xxx | 789 |
+----------+----------+
3 rows in set (0.00 sec)
在代理端(proxy)配置读写分离:
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz 解压
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# cd mysql-proxy-0.8.5-linux-el6-x86-64bit 进入解压路径
[root@server3 mysql-proxy-0.8.5-linux-el6-x86-64bit]# ls
bin include lib libexec licenses share
[root@server3 mysql-proxy-0.8.5-linux-el6-x86-64bit]# cd ..
[root@server3 ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
[root@server3 ~]# cd /usr/local/mysql-proxy/
[root@server3 mysql-proxy]# ls
bin include lib libexec licenses share
[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# ls
bin conf include lib libexec licenses share
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# ls
[root@server3 conf]# cd ..
[root@server3 mysql-proxy]# ls
bin conf include lib libexec licenses share
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# ls
[root@server3 conf]# cd ..
[root@server3 mysql-proxy]# ls
bin conf include lib libexec licenses share
[root@server3 mysql-proxy]# cd bin/
[root@server3 bin]# ls
mysql-binlog-dump mysql-myisam-dump mysql-proxy
[root@server3 bin]# pwd
/usr/local/mysql-proxy/bin
[root@server3 bin]# vim ~/.bash_profile 编写环境变量
[root@server3 bin]# source ~/.bash_profile 刷新生效
[root@server3 bin]# ls
mysql-binlog-dump mysql-myisam-dump mysql-proxy
[root@server3 bin]# cd ..
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# pwd
/usr/local/mysql-proxy/conf
[root@server3 conf]# ls
mysql-proxy.conf
[root@server3 conf]# cd ..
[root@server3 mysql-proxy]# ls
bin conf include lib libexec licenses share
[root@server3 mysql-proxy]# cd share/
[root@server3 share]# ls
doc
[root@server3 share]# cd doc/
[root@server3 doc]# ls
mysql-proxy
[root@server3 doc]# cd mysql-proxy/
lua语言:
Lua是一个小巧的脚本语言。是巴西里约热内卢天主教大学里的一个研究小组,
由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo
所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,
这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,
提供在特定平台上的即时编译功能。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。
不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。Lua由标准C编
写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所
有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
[root@server3 mysql-proxy]# ls lua脚本的默认位置
active-queries.lua ro-balance.lua tutorial-resultset.lua
active-transactions.lua ro-pooling.lua tutorial-rewrite.lua
admin-sql.lua rw-splitting.lua tutorial-routing.lua
analyze-query.lua tutorial-basic.lua tutorial-scramble.lua
auditing.lua tutorial-constants.lua tutorial-states.lua
commit-obfuscator.lua tutorial-inject.lua tutorial-tokenize.lua
commit-obfuscator.msc tutorial-keepalive.lua tutorial-union.lua
COPYING tutorial-monitor.lua tutorial-warnings.lua
histogram.lua tutorial-packets.lua xtab.lua
load-multi.lua tutorial-prep-stmts.lua
README tutorial-query-time.lua
[root@server3 mysql-proxy]# vim rw-splitting.lua
min_idle_connections = 1, ##最小连接数
max_idle_connections = 2, ##最大连接数后实现读写分离
[root@server3 mysql-proxy]# pwd
/usr/local/mysql-proxy/share/doc/mysql-proxy
[root@server3 mysql-proxy]# ll /usr/local/mysql-proxy/share/doc/mysql-proxy
total 288
-rw-r--r-- 1 7161 wheel 3780 Aug 19 2014 active-queries.lua
-rw-r--r-- 1 7161 wheel 2468 Aug 19 2014 active-transactions.lua
-rw-r--r-- 1 7161 wheel 8864 Aug 19 2014 admin-sql.lua
-rw-r--r-- 1 7161 wheel 10816 Aug 19 2014 analyze