数据库Master主服务器:172.17.0.2
数据库Slave从服务器:172.17.0.3
MySQL-Proxy调度服务器:172.17.0.4
#MySQL的安装与配置
...
#编译安装lua
MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua
下载地址:http://www.lua.org/download.html
$ curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
$ tar zxf lua-5.3.4.tar.gz
$ cd lua-5.3.4
$ make linux test
$ make install
#安装配置MySQL-Proxy
下载地址:https://downloads.mysql.com/archives/proxy/
$ tar –zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
$ mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
#配置mysql-proxy,创建主配置文件
$ cd /usr/local/mysql-proxy
$ mkdir lua #创建lua脚本存放目录
$ mkdir logs #创建日志目录
$ cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
$ cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本
#修改读写分离配置文件
$ vim rw-splitting.lua
--- config
--
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, //默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, //默认为8
is_debug = false
}
end
#修改完成后,启动mysql-proxy
$ cd /usr/local/mysql-proxy/bin
$ ./mysql-proxy --proxy-read-only-backend-addresses=172.17.0.3:3306 --proxy-backend-addresses=172.17.0.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua --log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log --log-level=info &
解释:
proxy-read-only-backend-addresses=172.17.0.3 #指定后端从slave读取数据
proxy-backend-addresses=172.17.0.2 #指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置
log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
#查看状态
$ lsof -i :4040
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysql-pro 788 root 9u IPv4 65474 0t0 TCP *:yo-main (LISTEN)
#创建用于读写分离的数据库连接用户
登陆主数据库服务器172.17.0.2,通过命令行登录管理MySQL服务器
$ mysql -u root -p
mysql> GRANT ALL ON *.* TO [email protected] IDENTIFIED BY '123456';
mysql> flush privileges;
由于我们配置了主从复制功能,因此从数据库服务器172.17.0.3上已经同步了此操作。
为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能
登陆从数据库服务器172.17.0.3,通过命令行登录管理MySQL服务器
$ mysql -u root -p
关闭Slave同步进程
mysql> stop slave;
#连接MySQL-Proxy
#通过navicate连接,截图如下:
登录成功后,插入数据,发现数据并没有插入成功,然后分别去主库和从库查看,主库数据新增成功,从库数据没有变化。
#通过命令行
$ mysql -h172.17.0.4 -P4040 -umysqlproxy -p123456