精华内容
下载资源
问答
  • MySQL读写分离

    2019-04-03 16:50:16
    MySQL读写分离如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?
  • mysql读写分离

    2018-12-27 16:39:08
    配置mysql读写分离,看完这篇就够了,希望大家共享知识
  • Mysql读写分离

    千次阅读 2018-10-28 20:48:20
    Mysql读写分离 1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中...

    Mysql读写分离

    1、什么是读写分离?

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。

    2、为什么要读写分离?

    因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
    但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
    所以读写分离,解决的是,数据库的写入,影响了查询的效率。

    3、什么时候读写分离?

    数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库 主从同步 。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是 表折分,或是搜索引擎。

    4、主从复制与读写分离

    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于前面我们学习过的rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

    环境部署:

    Master机:server5(172.25.51.5)
    Slave 机: server6(172.25.51.6)
    调度器proxy:server4(172.25.51.4)

    Mysql读写分离配置:

    一、调度器(proxy)

    1、server4安装读写分离proxy
    [root@server4 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
    [root@server4 ~]# cd /usr/local/
    [root@server4 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
    

    示图:软链接
    在这里插入图片描述

    2、修改读写分离的lua脚本
    [root@server4 ~]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
    [root@server4 mysql-proxy]# vim rw-splitting.lua 
     38 if not proxy.global.config.rwsplit then
     39         proxy.global.config.rwsplit = {
     40                 min_idle_connections = 1,
     41                 max_idle_connections = 2,
     42 
     43                 is_debug = false
     44         }
     45 end
    
    
    3、编写配置文件
    [root@server4 ~]# cd /usr/local/mysql-proxy
    [root@server4 mysql-proxy]# mkdir conf
    [root@server4 mysql-proxy]# mkdir logs
    [root@server4 mysql-proxy]# cd conf/
    [root@server4 conf]# pwd
    /usr/local/mysql-proxy/conf
    [root@server4 conf]# vim mysql-proxy.conf
    [mysql-proxy]
    user=root
    proxy-address=172.25.51.4:3306     ##代理层
    proxy-read-only-backend-addresses=172.25.51.6:3306   ##读
    proxy-backend-addresses=172.25.51.5:3306             ##写
    proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
    log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
    log-level=debug
    daemon=true
    keepalive=true
    
    4、修改权限,使权限变小(否则无法启动)
    [root@server4 conf]# chmod 660 mysql-proxy.conf 
    
    5、启动mysql-proxy
    [root@server4 conf]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf 
    

    示图:mysql-proxy端口3306
    在这里插入图片描述

    二、测试

    1、Master授权远程登陆
    mysql> grant select,insert,update on westos.* to wxh@'172.25.51.%' identified by 'Westos#123';
    
    2、Master和Slave安装lsof(list open files)
    [root@server5 ~]# yum install -y lsof
    [root@server5 ~]# lsof -i :3306           ##列出被进程所打开的文件信息
    
    示图:Master上发现主库只与从库建立连接

    在这里插入图片描述

    示图:Slave上发现从库只与主库建立连接

    在这里插入图片描述

    3、读写分离测试
    <1>开启一个shell连接
    [root@foundation51 ~]# mysql -h 172.25.51.4 -u wxh -p
    

    在这里插入图片描述

    示图:Master上调度器与主库连接(2个连接)

    在这里插入图片描述

    示图:Slave上调度区与从库连接

    在这里插入图片描述

    <2>开启两个shell连接
    示图:Master上调度器与主库连接(2个连接)

    在这里插入图片描述

    示图:Slave上无与调度器连接

    在这里插入图片描述

    <3>开启三个shell连接(读写分离)
    示图:Master上调度器与主库连接(2个连接)在这里插入图片描述在这里插入图片描述综上:三台以上客户端连接,才会实现读写分离

    验证读写分离成功:我们在连接Slave的客户端上写入数据,看是否写入到Master,如果写入,表示读写分离成功。

    (第3个客户端虽然连接从库,但是写入时,mysql-proxy自动实现主库写入;)

    示图:连接Slave的客户端写入数据

    在这里插入图片描述

    示图:Master上可查看到写入的数据,则读写分离成功

    在这里插入图片描述

    展开全文
  • mysql 读写分离

    2013-08-28 13:02:27
    可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求。 优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配 缺点:自己维护更新,增减服务器在代码处理 ...

    http://xhway.blog.51cto.com/3022449/553990

    1 程序修改mysql操作类
    可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求。
    优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配
    缺点:自己维护更新,增减服务器在代码处理

    2 amoeba
    参考官网:http://amoeba.meidusa.com/
    优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案
    缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活

    mysql-proxy
    参考 mysql-proxy
    优点:直接实现读写分离和负载均衡,不用修改代码,master和slave用一样的帐号
    缺点:字符集问题,lua语言编程,还只是alpha版本,时间消耗有点高

    如果你不能安装软件来解决读写分离,那可以尝试阿权的项目解决思路。
    如果你可以安装软件,那amoeba是不错的,mysql-proxy不太建议,目前只有alpha版本,效率还不太理想,amoeba目前在阿里巴巴是内部项目,正在生产环境使用的。

    展开全文
  • mysql读写分离,负载均衡,备份高可用性,数据库集群,主从数据库复制
  • MySQL读写分离技术

    2021-01-27 16:18:23
    阅读目录1、简介2、基本环境3、配置主从复制4、MySQL读写分离配置4.1、安装lua4.2、安装mysql-proxy5、MySQL读写分离测试1)、修改rw-splitting.lua文件2)、修改完成后,启动mysql-proxy3)、创建用于读写分离的...
  • mysql读写分离配置

    2018-09-29 22:22:02
    mysql读写分离配置
  • MySQL读写分离又一好办法 使用 com.mysql.jdbc.ReplicationDriver 在用过Amoeba 和 Cobar,还有dbware 等读写分离组件后,今天我的一个好朋友跟我讲,MySQL自身的也是可以读写分离的,因为他们提供了一个新的驱动,...
  • MySQL 读写分离

    万次阅读 2013-12-15 09:47:42
    MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库……

    一 什么是读写分离

          

    MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。可以看下这张图:


     

    二 读写分离的好处


    1.增加冗余

    2.增加了机器的处理能力

    3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

     

    三 读写分离提高性能之原因

     

    1.物理服务器增加,负荷增加
    2.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用
    3.从库可配置myisam引擎,提升查询性能以及节约系统开销
    4.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的
    5.读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

    6.可以在从库启动是增加一些参数来提高其读的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上

    7.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”

    8.MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

     

    四 读写分离示意图

      

        

     

    五 读写分离模拟

     

    实验环境简介

    serv01:代理服务器 192.168.1.11 serv01.host.com

    serv08:主服务器(主要写数据,可读可写) 192.168.1.18 serv08.host.com

    serv09:从服务器(主要读数据) 192.168.1.19 serv09.host.com

     

    操作系统版本

    RHEL Server6.1 64位系统

     

    使用到的软件包版本

    mysql-5.5.29-linux2.6-x86_64.tar.gz

     mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz

     

    第一步,搭建MySQL服务器,清空日志。注意:代理服务器中不需要装MySQL

     

    第二步,拷贝mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz文件,解压文件

    [root@larrywen 1005]# scp mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz 192.168.1.11:/opt
    
    [root@serv01 opt]# tar -xvf mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz -C /usr/local/
    
    [root@serv01 opt]# cd /usr/local/
    
    [root@serv01 local]# mv mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit/ mysql-proxy
    [root@serv01 local]# ll mysql-proxy/
    total 24
    drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 bin
    drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 include
    drwxr-xr-x. 4 7157 wheel 4096 Aug 17  2011 lib
    drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 libexec
    drwxr-xr-x. 3 7157 wheel 4096 Aug 17  2011 licenses
    drwxr-xr-x. 3 7157 wheel 4096 Aug 17  2011 share
    
    --可以查看帮助
    [root@serv01 bin]# ./mysql-proxy --help-all
    

     

    第三步,serv08主服务器创建用户,serv09从服务器创建用户,注意用户名和密码一致

    serv08
    mysql> grant all on *.* to 'larry'@'192.168.1.%' identified by 'larry';
    Query OK, 0 rows affected (0.00 sec)
    
    serv09
    mysql> grant all on *.* to 'larry'@'192.168.1.%' identified by 'larry';
    Query OK, 0 rows affected (0.00 sec)
    


    第四步,serv09从服务器更改设置,开启slave,查看slave状态。创建测试数据库,插入测试数据

    serv09
    mysql> change master to  master_host='192.168.1.18',  master_user='larry', master_password='larry', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=107;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show slave status \G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.18
                      Master_User: larry
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 107
                   Relay_Log_File: serv09-relay-bin.000002
                    Relay_Log_Pos: 253
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 107
                  Relay_Log_Space: 410
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 2
    1 row in set (0.00 sec)
    
    ERROR: 
    No query specified
    
    mysql> select user,password,host from mysql.user;
    +------+-------------------------------------------+-----------------+
    | user | password                                  | host            |
    +------+-------------------------------------------+-----------------+
    | root |                                           | localhost       |
    | root |                                           | serv08.host.com |
    | root |                                           | 127.0.0.1       |
    | root |                                           | ::1             |
    |      |                                           | localhost       |
    |      |                                           | serv08.host.com |
    | rep  | *0CDC8D34246E22649D647DB04E7CCCACAB4368B6 | 192.168.1.%     |
    +------+-------------------------------------------+-----------------+
    7 rows in set (0.00 sec)
    
      
    mysql> create database larrydb;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use larrydb;
    Database changed
    mysql> create table user(id int, name varchar(30));
    Query OK, 0 rows affected (0.01 sec)
    mysql> insert into user values(1,'larrywen');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into user values(2,'wentasy');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    +------+----------+
    2 rows in set (0.00 sec)
    
    
    serv09
    mysql> select * from larrydb.user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    +------+----------+
    2 rows in set (0.00 sec)
    


    第五步,为了查看现象,serv09从服务器关闭slave

    mysql> stop slave;
    Query OK, 0 rows affected (0.01 sec)
    


    第六步,serv 01查看是否有MySQL用户,修改rw-splitting.lua文件,修改如下几个参数

    [root@serv01 mysql-proxy]# id mysql
    uid=500(mysql) gid=500(mysql) groups=500(mysql)
    
    [root@serv01 mysql-proxy]# vim rw-splitting.lua 
    [root@serv01 mysql-proxy]# cat rw-splitting.lua | grep -e min_idle_connections -e max_idle_connections -e is_debug
        min_idle_connections = 1,--最小空闲连接数,为了测试,这里设置为1
        max_idle_connections = 1,--最大空闲连接数,为了测试,这里设置为1
        is_debug = true--是否打开Debug调试,为了查看调试信息,这里设置为true
    

     

    第七步,启动mysql-proxy

    [root@serv01 mysql-proxy]# /etc/init.d/mysql-proxy start
    Starting mysql-proxy:
      
    --先确定是否可以连接
    [root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.18
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 6
    Server version: 5.5.29-log Source distribution
    
    Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> exit
    Bye
    [root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.19
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 5.5.29-log Source distribution
    
    Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> exit
    Bye
    


    第八步,查看现象

    [root@serv01 ~]# /etc/init.d/mysql-proxy start
    Starting mysql-proxy: 
    [root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.11
    
    [connect_server] 192.168.1.11:51054
      [1].connected_clients = 0
      [1].pool.cur_idle     = 0
      [1].pool.max_idle     = 1
      [1].pool.min_idle     = 1
      [1].type = 1
      [1].state = 0
      [1] idle-conns below min-idle
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    [read_query] 192.168.1.11:51054
      current backend   = 0
      client default db = 
      client username   = larry
      query             = select @@version_comment limit 1
      sending to backend : 192.168.1.19:3306
        is_slave         : false
        server default db: 
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    Your MySQL connection id is 10
    Server version: 5.5.29-log Source distribution
    
    Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
    mysql> use larrydb;
    [read_query] 192.168.1.11:51054
      current backend   = 0
      client default db = 
      client username   = larry
      query             = SELECT DATABASE()
      sending to backend : 192.168.1.19:3306
        is_slave         : false
        server default db: 
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    [read_query] 192.168.1.11:51054
      current backend   = 0
      client default db = 
      client username   = larry
      sending to backend : 192.168.1.19:3306
        is_slave         : false
        server default db: 
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : false
    Database changed
    mysql> select * from user;
    [read_query] 192.168.1.11:51054
      current backend   = 0
      client default db = larrydb
      client username   = larry
      query             = select * from user
      sending to backend : 192.168.1.19:3306
        is_slave         : false
        server default db: larrydb
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    +------+----------+
    2 rows in set (0.00 sec)
    
    mysql> insert into user values(3,'jsutdb');
    [read_query] 192.168.1.11:51644
      current backend   = 0
      client default db = larrydb
      client username   = larry
      query             = insert into user values(3,'jsutdb')
      sending to backend : 192.168.1.19:3306
        is_slave         : false
        server default db: larrydb
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    Query OK, 1 row affected (0.00 sec)
    
    
    serv08
    mysql> select * from user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    +------+----------+
    2 rows in set (0.00 sec)
    
    serv09
    mysql> select * from larrydb.user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    |    3 | jsutdb   |
    +------+----------+
    3 rows in set (0.00 sec)
    


    第九步,以上的测试虽有效果,但不是预期。排查原因,重新配置。发现proxy-read-only-backend-addressesproxy-backend-addresses参数配置出错,proxy-read-only-backend-addresses应该配置成从服务器的IP地址,proxy-backend-addresses应该配置成主服务器的IP地址。

    [root@serv01 ~]# vim /etc/init.d/mysql-proxy 
    [root@serv01 ~]# cat /etc/init.d/mysql-proxy
    #!/bin/sh
    #
    # mysql-proxy This script starts and stops the mysql-proxy daemon
    #
    # chkconfig: - 78 30
    # processname: mysql-proxy
    # description: mysql-proxy is a proxy daemon to mysql
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    #PROXY_PATH=/usr/local/bin
    PROXY_PATH=/usr/local/mysql-proxy/bin
    
    prog="mysql-proxy"
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
    
    # Set default mysql-proxy configuration.
    #PROXY_OPTIONS="--daemon"
    PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.1.19:3306 --proxy-backend-addresses=192.168.1.18:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"
    
    #PROXY_PID=/usr/local/mysql-proxy/run/mysql-proxy.pid
    PROXY_PID=/var/run/mysql-proxy.pid
    
    # Source mysql-proxy configuration.
    if [ -f /etc/sysconfig/mysql-proxy ]; then
            . /etc/sysconfig/mysql-proxy
    fi
    
    PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
    
    # By default it's all good
    RETVAL=0
    
    # See how we were called.
    case "$1" in
      start)
            # Start daemon.
            echo -n $"Starting $prog: "
            $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=debug --log-file=/var/log/mysql-proxy.log --proxy-address=192.168.1.11:3306
            RETVAL=$?
            echo
            if [ $RETVAL = 0 ]; then
                    touch /var/lock/subsys/mysql-proxy
            fi
           ;;
      stop)
            # Stop daemons.
            echo -n $"Stopping $prog: "
            killproc $prog
            RETVAL=$?
            echo
            if [ $RETVAL = 0 ]; then
                    rm -f /var/lock/subsys/mysql-proxy
                    rm -f $PROXY_PID
            fi
           ;;
      restart)
            $0 stop
            sleep 3
            $0 start
           ;;
      condrestart)
           [ -e /var/lock/subsys/mysql-proxy ] && $0 restart
          ;;
      status)
            status mysql-proxy
            RETVAL=$?
           ;;
      *)
            echo "Usage: $0 {start|stop|restart|status|condrestart}"
            RETVAL=1
           ;;
    esac
    
    exit $RETVAL
    

     

    第十步,测试。插入数据,可以发现连接的是主服务器,查询的时候也是主服务器。说明主服务器和从服务器均有读的的功能。

    [root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.11
    
    [connect_server] 192.168.1.11:57891
      [1].connected_clients = 0
      [1].pool.cur_idle     = 0
      [1].pool.max_idle     = 1
      [1].pool.min_idle     = 1
      [1].type = 1
      [1].state = 1
      [1] idle-conns below min-idle
    [read_query] 192.168.1.11:57891
      current backend   = 0
      client default db = 
      client username   = larry
      query             = select @@version_comment limit 1
      sending to backend : 192.168.1.18:3306
        is_slave         : false
        server default db: 
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    
    
    mysql> insert into user values(5,'test');
    Query OK, 1 row affected (0.01 sec)
    [read_query] 192.168.1.11:57893
      current backend   = 0
      client default db = larrydb
      client username   = larry
      query             = insert into user values(5,'test')
      sending to backend : 192.168.1.18:3306
        is_slave         : false
        server default db: larrydb
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    mysql> select * from user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    |    5 | test     |
    +------+----------+
    3 rows in set (0.00 sec)
    [read_query] 192.168.1.11:57893
      current backend   = 0
      client default db = larrydb
      client username   = larry
      query             = select * from user
      sending to backend : 192.168.1.18:3306
        is_slave         : false
        server default db: larrydb
        server username  : larry
        in_trans        : false
        in_calc_found   : false
        COM_QUERY       : true
    
    serv08主服务器查看数据,可以查询到,说明主服务器可以写
    mysql> select * from larrydb.user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    |    5 | test     |
    +------+----------+
    3 rows in set (0.00 sec)
    
    serv09从服务器查询数据,发现不可查询到,说明从服务器只读
    mysql> mysql> select * from larrydb.user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    |    3 | jsutdb   |
    |    4 | db       |
    +------+----------+
    4 rows in set (0.00 sec)
    


    第十一步,开启slave。发现数据同步成功。

    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from larrydb.user;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | larrywen |
    |    2 | wentasy  |
    |    3 | jsutdb   |
    |    4 | db       |
    |    5 | test     |
    +------+----------+
    5 rows in set (0.00 sec)
    


    六 参考资料


      我的邮箱wgbno27@163.com
      新浪微博@jutdb         
      微信公众平台:JustOracle(微信号:justoracle)
      数据库技术交流群:336882565(加群时验证 From CSDN XXX)
      All is well
      2013年12月15日
      By Larry Wen
    


    katoonSina CSDN
    @Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]
    展开全文
  • mysql 读写分离案例

    2013-03-13 17:22:15
    mysql 读写分离案例 mysql 读写分离案例
  • 通过 sprigboot 搭建mysql读写分离 mysql服务器需搭建主从复制
  • spring mysql 读写分离

    2018-03-23 21:19:09
    spring mysql 读写分离,可以一主一从,也可以一主多从
  • MySQL读写分离.pdf

    2021-09-14 12:55:22
    MySQL读写分离.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,126
精华内容 35,650
关键字:

mysql读写分离

mysql 订阅