使用mysql-proxy实现mysql读写分离

时间:2021-05-10 04:13:58

 

使用mysql-proxy实现mysql读写分离

 

 

静态分离:直接将服务器地址写入程序

   优点:
   缺点:
动态分离:通过代理服务器进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在从服务器上读数据。

(代理服务器不需要安装Mysql)

 

#=======================================================

(1)使用mysql-proxy实现读写分离

 

# iptables -F

 

    (master,slave,proxy,client服务器各一台)

 

     注意:(首先进行主从复制配置。然后开始在代理服务器上使用mysql-proxy进行读写分离。最后在客户端测试)

   使用mysql-proxy实现mysql读写分离

 

代理服务器进行的操作(10.0.199.3):

  # tar -xvf 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

    #  vim  /etc/ld.so.conf

     /usr/local/mysql-proxy/lib (导入)

   #  cd /usr/local/mysql-proxy/bin

  # ./mysql-proxy --proxy-backend-addresses=10.0.199.1:3306 --proxy-read-only-backend-
addresses=10.0.199.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon --user=mysql --log-level=warning --log-file=/var/log/mysql-proxy.log --max-open-files=2048  --event-threads=4 --proxy-address=10.0.199.3:3306  

  解释:

  --proxy-backend-addresses            指定主服务器地址(写数据) 10.0.199.1

  --proxy-read-only-backend-addresses  指定从服务器地址(读数据) 10.0.199.2
  --proxy-lua-script                   指定用于读写分离的脚本程序
  --daemon                             指定以守护进程的方式运行
  --user=mysql                         指定运行的用户
  --log-level                          指定日志记录级别
  --log-file                           指定日志文件位置
  --max-open-files                     指定最大课打开的文件数,受操作系统限制
  --event-threads                      设置工作线程数
  --proxy-address                      设置监听的本机地址和端口 10.0.199.3(代理服务器)

 

 

    # lsof -i:3306 查看是否启动

 

 

主从服务器进行的操作(199.1、199.2):

 

# iptables -F

  在主从服务器上对代理服务器进行授权,使代理服务器能够使用主从服务器上的此用户进行连接主从。

  mysql> grant all on *.* to 'repuser'@'10.0.199.3' identified by 'aixocm'; 

  mysql> flush privileges;            

  repuser是任意用户名 需要在代理服务器上创建该用户

  因为下面在客户端进行测试时,需要用被授权的用户即该用户进行登录操作数据库                                                                    mysql> create user repuser;

 

 

客户端进行的操作(10.0.199.4)

测试:
客户端不必安装Mysql,但是必须要有mysql命令
# yum install mysql
# mysql -u repuser -h 10.0.199.3 -paixocm  -e "select * from sxkj.stu"

# mysql -u repuser -h 10.0.199.3 -paixocm -e "create table sxkj.class(id int primary key,name varchar(10) not null)"
也可以进入mysql进行操作
再查看主从服务器数据

测试时 若出现以下错误:

使用mysql-proxy实现mysql读写分离

解决办法:

在主从服务器上:mysql> select user,host,password  from mysql.user;

                       mysql> drop user zll@10.0.199.3; 然后再重新进行授权。