您的位置: 首页 > 新闻资讯 > 高质量代理 > 正文

MySQL用云主机设置读写分离

发布时间:2019年10月04日 作者: 来源:互联网

  我们可以用读写分离来减轻主数据库负载,从而一方面提升了用户体验,一方面提升业务系统性能。那么这个操作要怎么实现呢?首先你得先准备好云主机,然后就可以跟着这份教程来进行操作了。


  背景信息


  应用层中直接使用代码实现,在进入Service之前,使用AOP来做出判断,是使用写库还是读库,判断依据可以根据方法名判断,例如以query、find、get等开头的就走读库,其他的走写库。


  本教程介绍如何使用中间件MySQL-proxy实现读写分离。


  MySQL Proxy是一个处于Client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制。常见的用途包括:负载平衡,故障查询分析,查询过滤和修改等等。


  MySQL-proxy的原理如下图:

  

MySQL用云主机设置读写分离


  MySQL Proxy是一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。


  使用中间件MySQL-proxy实现读写分离的操作步骤如下:


  步骤一:完成准备工作


  步骤二:配置读写分离


  步骤三:授权


  步骤四:验证读写分离


  步骤一:完成准备工作


  环境说明如下:


  主库IP:121.40.18.26


  从库IP:101.37.36.20


  MySQL-proxy代理IP:116.62.101.76


  完成以下操作,做好准备工作:


  新建3台ECS,并安装mysql。


  搭建主从环境,必须保证主从数据库数据一致。


  修改主从环境的mysql配置文件。


  主环境:


  vim /etc/my.cnf

  [mysqld]

  server-id=202 #设置服务器唯一的id,默认是1

  log-bin=mysql-bin # 启用二进制日志

  从环境:

  [mysqld]

  server-id=203

  重启主从服务器中的MySQL服务。

  /etc/init.d/mysqld restart

  在主服务器上建立帐户并授权slave。

  mysql -uroot -p95c7586783

  grant replication slave on *.* to 'syncms'@'填写slave-IP' identified by '123456';

  flush privileges;

  查看主数据库状态。

  mysql> show master status;

  

MySQL用云主机设置读写分离


  配置从数据库。


  change master to master_host='填写master-IP', master_user='syncms', master_password='123456', master_log_file='mysql-bin.000005', master_log_pos=602;

  启动slave同步进程并查看状态。

  start slave;

  show slave status\G

  

MySQL用云主机设置读写分离


  验证主从同步。


  在主数据库的表testproxy.test1中写入数据。


  mysql> create database testproxy;

  mysql> create table testproxy.test1(ID int primary key,name char(10) not null);

  mysql> insert into testproxy.test1 values(1,'one');

  mysql> insert into testproxy.test1 values(2,'two');

  mysql> select * from testproxy.test1;

  

MySQL用云主机设置读写分离


  在从数据库中运行以下命令,查找表testproxy.test1的数据。

  select * from testproxy.test1;

  

MySQL用云主机设置读写分离


  如果表testproxy.test1的内容与主数据库的一致,则主从同步成功。


  步骤二:配置读写分离


  完成以下操作,配置读写分离:


  安装MySQL-Proxy。

  wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

  mkdir /alidata

  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/ /alidata/mysql-proxy-0.8.5

  设置环境变量。

  vim /etc/profile #加入以下内容

  PATH=$PATH:/alidata/mysql-proxy-0.8.5/bin

  export $PATH

  source /etc/profile #使变量立即生效

  mysql-proxy -V

  

MySQL用云主机设置读写分离


  设置读写分离。

  cd /alidata/mysql-proxy-0.8.5/share/doc/mysql-proxy/

  vim rw-splitting.lua


  MySQL Proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时,不会进行读写分离。默认最小4个(最大8个)以上的客户端连接才会实现读写分离。现改为最小1个(最大2个),便于读写分离的测试。生产环境中,可以根据实际情况进行调整。


  调整前:

  

MySQL用云主机设置读写分离


  调整后:

  

MySQL用云主机设置读写分离


  将lua管理脚本admin.lua复制到读写分离脚本rw-splitting.lua所在目录。

  cp /alidata/mysql-proxy-0.8.5/lib/mysql-proxy/lua/admin.lua /alidata/mysql-proxy-0.8.5/share/doc/mysql-proxy/


  步骤三:授权


  完成以下操作,进行授权:


  在主库中操作授权。因主从同步的原因,从库也会执行。


  mysql -uroot -p95c7586783

  grant all on *.* to 'mysql-proxy'@'填写MySQL Proxy IP' identified by '123456';

  flush privileges;


  开启MySQL-Proxy。

  mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins=proxy -b 填写master-IP:3306 -r 填写slave-IP:3306 --proxy-lua-script="/alidata/mysql-proxy-0.8.5/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/alidata/mysql-proxy-0.8.5/share/doc/mysql-proxy/admin.lua"


  查看端口和相关进程。

  netstat -tpln

  

MySQL用云主机设置读写分离


  ps -ef | grep mysql

  


  步骤四:验证读写分离


  完成以下操作,验证读写分离:

  关闭从复制。

  stop slave;

  在MySQL-Proxy上操作,登录mysql-proxy后台管理。

  mysql -u admin -padmin -P 4041 -h MySQL-Proxy-IP

  select * from backends; #查看状态

  

MySQL用云主机设置读写分离


  第一次连接,会连接到主库上。


  mysql -umysql-proxy -p123456 -h 116.62.101.76 -P 4040

  insert into testproxy.test1 values(3,'three'); #新增一条数据,由于测试需要,关闭了从复制,因此该数据在主库中存在,在从库中不存在

  

MySQL用云主机设置读写分离


  多开几个连接进行测试,当查询表testproxy.test1的数据显示是从库的数据时,读写分离成功。


  mysql -umysql-proxy -p123456 -h 116.62.101.76 -P 4040

  select * from testproxy.test1;

  

MySQL用云主机设置读写分离


  以上就是教程的具体流程,如果在操作的时候遇到困难,也可以联系万变云,专业客服会给你指引。


相关文章内容简介

1 公有云主机使用常见问题解答

  在我们选用任何一款产品之前,我们心中都会有很多问题想要了解,毕竟最终要下购买决策,是当这个产品能够满足我们的使用需求,我们才会采用。在使用公有云的时候,有一些常见的问题是大家比较关心的,下面列举部分为大家进行解答。  一、弹性伸缩服务是否可以任意使用?  用户在咨询弹性伸缩服务时,觉得该产品挺好,但一经解释,发现... [阅读全文]

2 12个帮助你进行云主机性能测评的工具

  在我们购买云主机的时候,不仅仅要看服务商的资质,而且重要的是要识别云主机的性能。那么,我们能够如何如判断一个云主机的性能好坏呢?万变云今天推荐的这12款工具就能够派上用场,能够帮助你直观从数值上看到云主机的性能。  1、Super∵Pi  Super∵Pi是一个单线程基准测试,可以计算特定位数的Pi。使用Gauss-Legendre算法,是测试纯单线程x86浮... [阅读全文]

推荐阅读

  1. 18

    2020-01

    关于美国云服务的选择技巧大全

    美国云服务器因为无需备案,受到了很多企业的喜爱,如果网站急着要上线,那么选择美国云主机是不错的,而且海外服务器的带宽要比国内要大,具有一定的优势。下面我们跟着万变云看看怎

  2. 05

    2019-07

    企业租用服务器要注意几点

    企业租用服务器要注意几点,服务器已经成为不可缺少的网络设备,用户开展网上业务的时候一般都选服务器租用的方式,那么在选择服务器租用的时候应该注意哪些方面呢?小编就和大家一起

  3. 08

    2019-10

    云主机服务器机房好坏如何区别?

    相信谁也不希望使用到质量差的服务器,特别是现在云主机等虚拟云端服务器正在成为主流趋势,有别于传统物理主机,我们有时候很难直观得知它的好坏。而好的服务器又决定了我们网站业务

  4. 24

    2019-05

    租用服务器送产权什么意思?

    租用服务器送产权什么意思?服务器租用价格(price)是很多企业(Enterprise)都关心的问题,租用服务器的价格很多因素(factor)的影响。vps云主机vps与独立服务器的运行完全相同,中小型服务商可以以

  5. 18

    2019-06

    怎么提升服务器访问速度?

    怎么提升服务器访问速度?对于一个网站而言,页面优化不光是要提高排名,用户体验也十分重要,网站的访问速度是衡量网站用户体验的一个很重要的指标。访问速度对网站是极为关键的因素

  6. 21

    2019-09

    云主机需要重启吗?

    平时我们的电脑主机有重启这一个功能,那么云主机也需要重启吗?作为在云端的服务器,云主机通常长期都是开机的状态,我们都知道机器长期处于运转对机器的寿命是有一定影响的。那么,