您的位置:首页 > 数据库 > MySQL

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文件

                 文件内如如下:

                

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息