mysql读写分离-mysql proxy实现
2017-06-02 17:13
411 查看
这篇使用apache的mysql proxy实现mysql的读写分离。要实现读写分离首先应该实现mysql数据库的主从复制,关于主从复制可以参考:http://blog.csdn.net/j903829182/article/details/72844954,这里的读写分离就是在http://blog.csdn.net/j903829182/article/details/72844954基础上实现的。
场景描叙:
数据库Master主服务器:192.168.9.161
数据库Slave从服务器:192.168.9.163
MySQL-Proxy调度服务器:192.168.9.165
上面有出现了一台192.168.9.165机器,所以可以在虚拟机上在安装一个linux系统,
虚拟机安装linux操作系统参考:http://www.centoscn.com/image-text/setup/2014/0723/3341.html,
linux安装mysql参考:http://www.centoscn.com/mysql/2016/0315/6844.html
一:给调度服务器192.168.9.165安装mysql,安装过程省略。
二:安装lua环境
由于MySQL-Proxy的脚本是lua语言写的,我们需要lua的编译环境,所以需要先安装lua的环境。
1,先检查依赖包:
yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
libevent* glib* readline-devel
2,获取lua源码包,解压,进行编译安装
在一个相应目录下创建一个目录存用于存放lua解压的包:
通过在线获取lua在线包:wget http://www.lua.org/ftp/lua-5.1.4.tar.gz,也可以通过官网下载后拷贝到linux中。基本安装步骤:
解压:tar zxvf lua-5.2.3.tar.gz
cd lua-5.2.3
编译:make linux
安装:make install
3,配置lua的环境变量:
cp etc/lua.pc /usr/lib/pkgconfig/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig
三:安装配置MySQL-Proxy
1,下载mysql-proxy,可以通过wget https://downloads.mysql.com/archives/proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz下载,也可以直接到官网下载以后,直接拷贝进去。
2,加压到相应目录,tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
3,在mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit的目录下面创建log目录:mkdir log
4,在mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit的目录创建mysql-proxy.cnf文件
文件内如如下:
执行:
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --permanent --zone=public --add-port=8888/udp
firewall-cmd --reload 重启防火墙使最新防火墙生效
注意: mysql-proxy.cnf文件的权限必须是660 授权:sudo chmod 777 mysql-proxy.cnf
5,找到rw-splitting.lua文件,把下面的内如改为1
把4,8改为1,改后如下:
6,配置mysql-proxy的环境变量,把它的目录添加到环境变量中,找到/etc/profile文件,进行添加环境变量
添加环境变量参考:http://www.cnblogs.com/whoamme/p/4039998.html
PATH=$PATH:/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin
export PATH
添加之后执行,source /etc/profile,使立即生效。
7,启动mysql proxy
切换到mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin目录下,执行:
sudo ./mysql-proxy --defaults-file=/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86- 64bit/mysql-proxy.cnf&
如果log目录下的日志文件有变化了,说明启动有效果了,如果启动失败了也可以到log目录下看日志;如果日志没变化,则在bin目录下执行sudo ./mysql-proxy
8,关闭mysql proxy
使用killall -9 mysql-proxy命令是关闭mysql proxy的进程
四:测试读写分离效果
1,创建用于读写分离的数据库连接用户
登陆主数据库服务器192.168.9.161,通过命令行登录管理MySQL服务器
mysql -u root -p
mysql> GRANT ALL ON *.* TO 'proxy'@'192.168.9.165' IDENTIFIED BY 'proxy';
由于我们配置了主从复制功能,因此从数据库服务器192.168.9.163上已经同步了此操作。
2,为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能
登陆从数据库服务器192.168.9.163,通过命令行登录管理MySQL服务器
mysql -u root -p
关闭Slave同步进程
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
3,连接MySQL-Proxy
要启动MySQL-Proxy然后在从机使用 mysql -uproxy -p -P8888 -h192.168.9.165 登入数据库
4,登陆成功后,在first_db数据的first_tb表中插入两条记录
mysql> use first_db;
Database changed
mysql> insert into first_tb(name) values ('jacktest3');
Query Ok, 1 row affected (0.00 sec)
mysql> insert into first_tb
(name) values ('jacktest4');
Query Ok, 1 row affected (0.00 sec)
5,查询记录
mysql> select * from first_tb;
通过查询发现并没有上面4中插入的数据
6,推出mysql登入
mysql> quit
退出MySQL-Proxy
7,分别登陆到主从数据库服务器,对比记录信息
首先,检查主数据库服务器
mysql> select * from first_tb;
两条新记录都已经存在
然后,检查从数据库服务器
mysql> select * from first_tb;
没有新记录存在
由此验证,我们已经实现了MySQL读写分离,目前所有的写操作都全部在Master主服务器上,用来避免数据的不同步;另外,所有的读操作都分摊给了其它各个Slave从服务器上,用来分担数据库压力。
8,开启从数据库的同步复制功能
登入从数据库,使用start slave 命令开启,在查询first_tb表,发现有新数据了,在登入代理机器165,同样查询first_tb,发现也有数据了,因为165机器只从163机器数据库中读取数据。由此证明读写分离了。
参考资料:
http://www.cnblogs.com/luckcs/articles/2543607.html
http://blog.csdn.net/e421083458/article/details/19697701
场景描叙:
数据库Master主服务器:192.168.9.161
数据库Slave从服务器:192.168.9.163
MySQL-Proxy调度服务器:192.168.9.165
上面有出现了一台192.168.9.165机器,所以可以在虚拟机上在安装一个linux系统,
虚拟机安装linux操作系统参考:http://www.centoscn.com/image-text/setup/2014/0723/3341.html,
linux安装mysql参考:http://www.centoscn.com/mysql/2016/0315/6844.html
一:给调度服务器192.168.9.165安装mysql,安装过程省略。
二:安装lua环境
由于MySQL-Proxy的脚本是lua语言写的,我们需要lua的编译环境,所以需要先安装lua的环境。
1,先检查依赖包:
yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
libevent* glib* readline-devel
2,获取lua源码包,解压,进行编译安装
在一个相应目录下创建一个目录存用于存放lua解压的包:
通过在线获取lua在线包:wget http://www.lua.org/ftp/lua-5.1.4.tar.gz,也可以通过官网下载后拷贝到linux中。基本安装步骤:
解压:tar zxvf lua-5.2.3.tar.gz
cd lua-5.2.3
编译:make linux
安装:make install
3,配置lua的环境变量:
cp etc/lua.pc /usr/lib/pkgconfig/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig
三:安装配置MySQL-Proxy
1,下载mysql-proxy,可以通过wget https://downloads.mysql.com/archives/proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz下载,也可以直接到官网下载以后,直接拷贝进去。
2,加压到相应目录,tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
3,在mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit的目录下面创建log目录:mkdir log
4,在mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit的目录创建mysql-proxy.cnf文件
文件内如如下:
[mysql-proxy] log-file =/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/log/mysql-proxy.log proxy-address=192.168.9.165:8888 proxy-backend-addresses=192.168.9.161:3306 proxy-read-only-backend-addresses=192.168.9.163:3306 proxy-lua-script=/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua admin-lua-script = /opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/admin-sql.lua admin-username=proxy admin-password=proxy log-level=debug keep-alive=true daemon=true配置文件使用的是8888端口,所以我们还需要开放8888端口:
执行:
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --permanent --zone=public --add-port=8888/udp
firewall-cmd --reload 重启防火墙使最新防火墙生效
注意: mysql-proxy.cnf文件的权限必须是660 授权:sudo chmod 777 mysql-proxy.cnf
5,找到rw-splitting.lua文件,把下面的内如改为1
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,改后如下:
if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, max_idle_connections = 1, is_debug = false } end
6,配置mysql-proxy的环境变量,把它的目录添加到环境变量中,找到/etc/profile文件,进行添加环境变量
添加环境变量参考:http://www.cnblogs.com/whoamme/p/4039998.html
PATH=$PATH:/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin
export PATH
添加之后执行,source /etc/profile,使立即生效。
7,启动mysql proxy
切换到mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin目录下,执行:
sudo ./mysql-proxy --defaults-file=/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86- 64bit/mysql-proxy.cnf&
如果log目录下的日志文件有变化了,说明启动有效果了,如果启动失败了也可以到log目录下看日志;如果日志没变化,则在bin目录下执行sudo ./mysql-proxy
8,关闭mysql proxy
使用killall -9 mysql-proxy命令是关闭mysql proxy的进程
四:测试读写分离效果
1,创建用于读写分离的数据库连接用户
登陆主数据库服务器192.168.9.161,通过命令行登录管理MySQL服务器
mysql -u root -p
mysql> GRANT ALL ON *.* TO 'proxy'@'192.168.9.165' IDENTIFIED BY 'proxy';
由于我们配置了主从复制功能,因此从数据库服务器192.168.9.163上已经同步了此操作。
2,为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能
登陆从数据库服务器192.168.9.163,通过命令行登录管理MySQL服务器
mysql -u root -p
关闭Slave同步进程
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
3,连接MySQL-Proxy
要启动MySQL-Proxy然后在从机使用 mysql -uproxy -p -P8888 -h192.168.9.165 登入数据库
4,登陆成功后,在first_db数据的first_tb表中插入两条记录
mysql> use first_db;
Database changed
mysql> insert into first_tb(name) values ('jacktest3');
Query Ok, 1 row affected (0.00 sec)
mysql> insert into first_tb
(name) values ('jacktest4');
Query Ok, 1 row affected (0.00 sec)
5,查询记录
mysql> select * from first_tb;
通过查询发现并没有上面4中插入的数据
6,推出mysql登入
mysql> quit
退出MySQL-Proxy
7,分别登陆到主从数据库服务器,对比记录信息
首先,检查主数据库服务器
mysql> select * from first_tb;
两条新记录都已经存在
然后,检查从数据库服务器
mysql> select * from first_tb;
没有新记录存在
由此验证,我们已经实现了MySQL读写分离,目前所有的写操作都全部在Master主服务器上,用来避免数据的不同步;另外,所有的读操作都分摊给了其它各个Slave从服务器上,用来分担数据库压力。
8,开启从数据库的同步复制功能
登入从数据库,使用start slave 命令开启,在查询first_tb表,发现有新数据了,在登入代理机器165,同样查询first_tb,发现也有数据了,因为165机器只从163机器数据库中读取数据。由此证明读写分离了。
参考资料:
http://www.cnblogs.com/luckcs/articles/2543607.html
http://blog.csdn.net/e421083458/article/details/19697701
相关文章推荐
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- Mysql 读写分离实现方案一:Mysql Proxy
- mysql实现读写分离中间件MySQL Proxy
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MysqL读写分离的实现-Mysql proxy中间件的使用
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
- 关于Mysql Proxy LUA实现Mysql读写分离
- mysql proxy、mysql-mmm实现读写分离高可用性 推荐
- Amoeba实现mysql主从读写分离2
- MYSQL--之--amoeba 实现读写分离,负载均衡
- Amoeba实现mysql主从读写分离1
- Mysql读写分离实现的三种方式
- MYSQL 主从复制读写分离实现
- MYSQL实现读写分离