Mysql读写分离(Mycat版)【转】

文章地址:https://www.cnblogs.com/diantong/p/11044635.html

(1).读写分离概述

1)工作原理

  读写分离是让主数据库处理事务性增删改操作(insert、delete、update),让从数据库处理查询查询操作(select)。

2)作用

  1.分担负载

  2.主从只负责各自的写和读,极大的缓解X锁和S锁争用

  3.从库可配置MyISAM引擎,提升查询性能以及节约系统开销

  4.增加冗余,提高可用性

3)实现方法

一、应用程序和网站程序的实现。指的是在应用程序内部及连接器中实现读写分离。

  优点:1.应用程序内部实现读写分离,安装就可以使用;2. 减少一定部署难度;3.访问压力在一定级别以下,性能很好。

  缺点:1.架构一旦调整,代码要跟着变;2.难以实现高级应用,如自动分库,分表;3.无法适用大型应用场景。

二、中间件实现。指的是在外部中间件程序实现读写分离。

  优点:1.架构设计更灵活;2.可以在程序上实现一些高级控制,如:透明化水平拆分,failover,监控;3.可以依靠些技术手段提高mysql性能;4.对业务代码的影响小,同时也安全

  缺点:需要一定的开发运维团队的支持。

4)常见的Mysql中间键

  Cobar、MyCAT、OneProxy、Vitess、Kingshard、Atlas、MaxScale与MySQL Route。

  使用mycat原因是这是一款开源的免费的Mysql中间件,基于Cobar基础上二次开发,其功能也是相当完善。而且目前Mycat社区很活跃,支持度比较高,维护短期内应该不会中断。

(2).实验环境

youxi1  192.168.5.101  CentOS7.5  Mysql5.7.16  Mysql端口3306  Mycat中间件

youxi2  192.168.5.102  CentOS7.5  Mysql5.7.16  Mysql端口3306  Master

youxi3  192.168.5.103  CentOS7.5  Mysql5.7.16  Mysql端口3306  Slave

(3).Mycat服务的安装与配置

  使用mycat中间件搭建读写分离,那么应访问的是mycat中间件,再由mycat访问主从服务器。

  Mycat的官网是http://www.mycat.io,我下载的版本是Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz,然后上传到youxi1服务器上。

  Mycat需要安装JDK1.7或以上版本,我下载的是jdk-8u191-linux-x64.tar.gz,然后上传到youxi1服务器上。

  然后解压到/usr/local/目录下


1

2

3

4

5

6

[[email protected] ~]# tar zxf Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz -C /usr/local/

[[email protected] ~]# ls /usr/local/

bin  etc  games  include  lib  lib64  libexec  mycat  sbin  share  src

[[email protected] logs]# ls /usr/local/mycat/

bin catlet conf lib version.txt

[[email protected] logs]# mkdir /usr/local/mycat/logs  //少一个logs目录就创建一个

  添加mysql用户以及修改文件夹权限


1

2

3

4

5

6

7

8

9

10

11

[[email protected] ~]# useradd mycat

[[email protected] ~]# echo "mycat:123456" | chpasswd

[[email protected] ~]# chown -R mycat:mycat /usr/local/mycat/

[[email protected] ~]# ll /usr/local/mycat/

总用量 12

drwxr-xr-x 2 mycat mycat 190 6月 18 15:30 bin

drwxrwxrwx 2 mycat mycat 6 2月 13 14:46 catlet

drwxrwxrwx 4 mycat mycat 4096 6月 18 15:30 conf

drwxr-xr-x 2 mycat mycat 4096 6月 18 15:30 lib

drwxr-xr-x 2 mycat mycat 6 6月  20 15:09 logs

-rwxrwxrwx 1 mycat mycat 185 2月 13 15:02 version.txt

说明:bin 程序目录,存放了封装成服务的版本,还存放了nowrap的shell脚本命令,方便大家选择和修改。mycat支持的命令有{ console | start | stop | restart | status | dump }

   conf目录下存放了配置文件,其中server.xml是Mycat服务器参数调整和用户授权的配置文件,schema.xml是逻辑库、表和分片定义的配置文件,rule.xml是分片规则的配置文件。另外分片规则的一些具体参数信息单独作为一个文件,也是存放在这个目录下。配置文件修改后,需要重启Mycat或者通过9066端口reload。

   lib目录下主要存放mycat依赖的一些jar文件。

   另外mycat启动后还会生成${sys:MYCAT_HOME}/logs/mycat.log,日志会存放在其中(默认250M上限,时间上限为1天,超出会创建新的日志文件,并且会自动备份),可以在conf/log4j.xml中配置日志文件,默认输出级别为info,可以调整为debug,输出更多信息方便排错。

  注意:Linux下部署安装MySQL,默认不忽略表名大小写,需要手动到/etc/my.cnf下配置lower_case_table_names=1,使Linux环境下MySQL忽略表名大小写,否则使用MyCAT的时候会提示找不到表的错误!

  解压JDK,添加jdk的环境变量文件,然后加载环境变量


1

2

3

4

5

6

7

8

9

10

11

12

13

14

[[email protected] ~]# mkdir /usr/local/java/

[[email protected] ~]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/java/

[[email protected] ~]# ls /usr/local/java/

jdk1.8.0_191

[[email protected] ~]# vim /etc/profile.d/java.sh  //配置环境变量

JAVA_HOME=/usr/local/java/jdk1.8.0_191

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH

[[email protected] ~]# source /etc/profile.d/java.sh  //加载环境变量

[[email protected] ~]# java -version  //查看是否生效

java version "1.8.0_191"

Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

(4).Mycat启动

  添加mycat的环境变量文件,然后加载环境变量


1

2

3

4

[[email protected] ~]# vim /etc/profile.d/mycat.sh

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH

[[email protected] ~]# source /etc/profile.d/mycat.sh

  注意:JDK的环境变量和Mycat的环境变量也可以一次性添加到/etc/profile文件中,然后重新加载。不过没有分开编辑好管理。

  配置mycat本身的用户信息server.xml文件


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[[email protected] ~]# vim /usr/local/mycat/conf/server.xml

//直接拉到最后修改<user>部分,设置访问mycat的用户信息,以及其能够访问的逻辑库

<user name="root">  //设置用户名。如果存在defaultAccount="true",则表示在不指定用户的情况下,默认以该用户访问mycat。

  <property name="password">123456</property>  //设置当前用户的密码

  <property name="schemas">TESTDB</property>  //能够访问的逻辑库(虚拟库),逻辑库需要在同目录下的schema.xml定义

//没有设置任何权限,则默认具有所有权限

  <!-- 表级 DML 权限设置 -->

  <!--

  <privileges check="false">

    <schema name="TESTDB" dml="0110" >

      <table name="tb01" dml="0000"></table>

      <table name="tb02" dml="1111"></table>

    </schema>

  </privileges>

  -->

</user>

<user name="user">  //设置用户名

  <property name="password">123456</property>  //设置当前用户的密码

  <property name="schemas">TESTDB</property>  //能够访问的逻辑库(虚拟库)

  <property name="readOnly">true</property>  //设置只读权限

</user>

  配置schema.xml文件,定义逻辑库信息


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

[[email protected] ~]# cp /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak  //提供的是分库分表,用法比较高级了

[[email protected] ~]# vim /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">  //框定服务配置范围

/*schema标签用于定义mycat中的逻辑库。

 *name是逻辑库名;

 *checkSQLschema默认为false,含义为是否去掉表名前的逻辑库名,只能去除当前定义的逻辑库名;

 *sqlMaxLimit是隐式limit,如果查询没有定义limit,则自动加上limit;

 *dataNode指定所属的数据节点,也就是常说的数据分片。*/

  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode=‘dn1‘/>

//dataNote标签用于定义数据节点。name是数据节点名称;dataHost指定所属数据库实例;database指定数据库实例上的实际数据库名(要和真实数据库一样的名字)。

  <dataNode name="dn1" dataHost="dthost" database="ha"/>

/*dataHost标签用于定义数据库实例。

 *name数据库实例名称;

 *maxCon指定每个读写实例连接池的最大连接;

 *minCon指定每个读写实例连接池的最小连接,初始化连接池的大小

 *balance和writeType请看下方说明;

 *dbType指定后端连接的数据库类型,支持二进制的mysql协议,以及其他使用JDBC连接的数据库,例如mongodb、oracle、spark等;

 *dbDriver指定后端数据库使用的驱动,可选值JDBC和native,其中native对应二进制的mysql协议,即mysql和maridb,其余都使用JDBC;

 *switchType请看下发说明

 *slaveThreshold slave服务器读的安全边界,如果Seconds_Behind_Master大于这个值,这台slave服务器会被临时剔除,以免被读。*/

  <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">

//heartbeat标签用于定义心跳语句,用语句执行成功与否来判断数据库的可用性

    <heartbeat>select user()</heartbeat>

/*writeHost和readHost标签都指定数据库的相关配置,用于实例化后端连接池。writeHost定义写实例,readHost定义读实例。

 *host是writeHost或readHost的名称,也是唯一标识;

 *usrl指定后端实例连接地址;

 *user指定后端存储实例需要的用户名(数据库的用户名);

 *password指定后端存储实例需要的密码(数据库用户的密码);

 *weight权重,是配置在readHost中作为读节点的权重*/

    <writeHost host="youxi2" url="192.168.5.102:3306" user="mycat" password="123456" />

    <writeHost host="youxi3" url="192.168.5.103:3306" user="mycat" password="123456" />

  </dataHost>

</mycat:schema>

  注意:如果使用readHost标签,请使用writeHost标签将readHost标签包裹。

说明:

  balance负载均衡类型。0表示不开启读写分离,所有读操作(select查询)都发送到当前writeHost上。1表示全部的readHost和备用writeHost都参与读操作(select查询)的负载均衡。2表示读操作随机在writeHost和readHost上发布。3表示所有读操作随机分发到当前writeHost对应的readHost上执行,writeHost不用执行。

  writeType负载均衡类型。0表示所有写操作发送到配置的第一个writeHost,挂了后切换到还生存的第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件dnindex.properties中。1表示所有写操作都随机发送到配置的writeHost,mycat1.5以后已经废弃。

  switchType切换类型。-1表示不自动切换。1表示自动切换,默认值。2表示基于Mysql主从同步状态决定是否切换,心跳语句为show slave status。3表示基于MySQL galary cluster的切换机制(适合集群),心跳语句为show status like ‘wsrep%‘。

  启动测试Mycat,并设置开机自启


1

2

3

4

5

6

7

8

9

10

11

12

13

14

[[email protected] conf]# mycat start  //因为已经配置环境变量,所以可以不写绝对路径

Starting Mycat-server...

[[email protected] conf]# tail /usr/local/mycat/logs/wrapper.log

STATUS | wrapper  | 2019/06/20 15:26:47 | --> Wrapper Started as Daemon

STATUS | wrapper  | 2019/06/20 15:26:47 | Launching a JVM...

INFO   | jvm 1    | 2019/06/20 15:26:47 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0

INFO   | jvm 1    | 2019/06/20 15:26:48 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org

INFO   | jvm 1    | 2019/06/20 15:26:48 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

INFO   | jvm 1    | 2019/06/20 15:26:48 |

INFO   | jvm 1    | 2019/06/20 15:26:57 | MyCAT Server startup successfully. see logs in logs/mycat.log  //成功启动

[[email protected] conf]# echo "/usr/local/mycat/bin/mycat start" >> /etc/rc.local

[[email protected] conf]# chmod +x /etc/rc.d/rc.local

[[email protected] conf]# vim /usr/local/mycat/conf/wrapper.conf

wrapper.java.command=/usr/local/java/jdk1.8.0_191/bin/java  //第5行,指向java

  注意:如果防火墙是打开的,记得添加mysql的端口号。


1

2

3

4

5

6

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=8066/tcp

success

[[email protected] ~]# firewall-cmd --reload

success

[[email protected] ~]# firewall-cmd --zone=public --list-ports

8066/tcp

(5).配置主从复制

1)youxi2上操作

  创建mycat中schema.xml文件设置的用户名和密码,以及指定的数据库。创建复制用的用户


1

2

3

4

5

6

7

8

9

10

11

mysql> grant all privileges on *.* to ‘mycat‘@‘192.168.5.%‘ identified by ‘123456‘;  //mycat指定的用户

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> grant replication slave on *.* to ‘slave‘@‘192.168.5.%‘ identified by ‘123456‘;  //复制用的用户

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;  //刷新权限表

Query OK, 0 rows affected (0.00 sec)

mysql> create database ha;  //mycat指定的数据库

Query OK, 1 row affected (0.00 sec)

  修改配置文件,并重启


1

2

3

4

5

[[email protected] ~]# vim /etc/my.cnf

server-id=1

log-bin=mysql-bin-master

binlog-do-db=ha

[[email protected] ~]# systemctl restart mysqld

  查看master状态


1

2

3

4

5

6

7

8

mysql> show master status\G

*************************** 1. row ***************************

             File: mysql-bin-master.000001

         Position: 154

     Binlog_Do_DB: ha

 Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

  注意:如果防火墙是打开的,记得添加mysql的端口号。


1

2

3

4

5

6

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=3306/tcp

success

[[email protected] ~]# firewall-cmd --reload

success

[[email protected] ~]# firewall-cmd --zone=public --list-ports

3306/tcp

2)youxi3上操作

  创建mycat中schema.xml文件设置的用户名和密码,以及指定的数据库。


1

2

3

4

5

6

7

8

mysql> grant all privileges on *.* to ‘mycat‘@‘192.168.5.%‘ identified by ‘123456‘;  //mycat指定的用户

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;  //刷新权限表

Query OK, 0 rows affected (0.00 sec)

mysql> create database ha;  //mycat指定的数据库

Query OK, 1 row affected (0.01 sec)

  修改配置文件


1

2

3

[[email protected] ~]# vim /etc/my.cnf

server-id=2

[[email protected] ~]# systemctl restart mysqld

  配置master信息


1

2

3

4

5

6

7

8

mysql> stop slave;

Query OK, 0 rows affected (0.01 sec)

mysql> change master to master_host=‘192.168.5.102‘,master_user=‘slave‘,master_password=‘123456‘,master_log_file=‘mysql-bin-master.000001‘,master_log_pos=154;

Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

  查看slave状态


1

2

3

4

5

6

7

8

9

10

11

12

13

14

mysql> show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.5.102

                  Master_User: slave

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin-master.000001

          Read_Master_Log_Pos: 154

               Relay_Log_File: youxi3-relay-bin.000003

                Relay_Log_Pos: 327

        Relay_Master_Log_File: mysql-bin-master.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

  注意:如果防火墙是打开的,记得添加mysql的端口号。


1

2

3

4

5

6

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=3306/tcp

success

[[email protected] ~]# firewall-cmd --reload

success

[[email protected] ~]# firewall-cmd --zone=public --list-ports

3306/tcp

(6).测试

  在youxi1上连接mycat,当然也可以使用软件客户端远程连接mycat。并创建测试数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[[email protected] ~]# mysql -uroot -p123456 -h192.168.5.101 -P8066  //这边的用户名和密码必须是mycat配置文件server.xml中定义的用户

mysql> show databases;  //注意这里显示的是mycat定义的逻辑库TESTDB

+----------+

| DATABASE |

+----------+

| TESTDB   |

+----------+

1 row in set (0.00 sec)

mysql> use TESTDB;

Database changed

mysql> show tables;

Empty set (0.00 sec)

mysql> create table user_tb(user int,name varchar(20));

Query OK, 0 rows affected (0.03 sec)

mysql> insert into user_tb values(1,‘zhangsan‘);

Query OK, 1 row affected (0.05 sec)

  再到youxi2和yousi3上查看


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[[email protected] ~]# mysql -uroot -p123456 

mysql> select from ha.user_tb;  //查询时需要查询实际存在的数据库

+------+----------+

| user | name     |

+------+----------+

|    1 | zhangsan |

+------+----------+

1 row in set (0.00 sec)

[[email protected] ~]# mysql -uroot -p123456

mysql> select from ha.user_tb;

+------+----------+

| user | name     |

+------+----------+

|    1 | zhangsan |

+------+----------+

1 row in set (0.01 sec)

  再试一下只读用户user


1

2

3

4

5

6

7

8

[[email protected] ~]# mysql -uuser -p123456 -h192.168.5.101 -P8066

mysql> use TESTDB;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> insert into user_tb values(2,‘lisi‘);

ERROR 1495 (HY000): User readonly

  如果master服务器youxi2宕机,那么mycat将只能读不能写。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//youxi2上停止mysqld,模拟宕机

[[email protected] ~]# systemctl stop mysqld

//此时的再进行测试

[[email protected] logs]# mysql -uroot -p123456 -h192.168.5.101 -P8066

mysql> use TESTDB;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select from user_tb;

+------+----------+

| user | name     |

+------+----------+

|    1 | zhangsan |

+------+----------+

1 row in set (0.03 sec)

mysql> insert into user_tb values(2,‘lisi‘);

ERROR 1184 (HY000): java.net.ConnectException: 拒绝连接

  注意:再次启动mysqld,能够恢复正常

参考:https://www.cnblogs.com/conanwang/p/5961019.html

原文地址:https://www.cnblogs.com/zxcnn/p/11751897.html

时间: 2024-10-06 13:25:55

Mysql读写分离(Mycat版)【转】的相关文章

MySQL读写分离---Mycat

原文地址:https://www.cnblogs.com/Zzzzn/p/12343668.html

mycat实现MySQL读写分离

mycat实现MySQL读写分离 mycat是什么 Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统.Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务.对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储. Mycat的几个典型的应用场景: 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换: 分表分库,对于超过

《Mycat学习笔记》 第二篇. MySql 读写分离与日志分析——主从多结点

1    环境说明 接上篇环境   <Mycat学习笔记> 第一篇. MySql 读写分离与日志分析——主从单结点 http://www.cnblogs.com/kaye0110/p/5134588.html 增加一套 mysql 实例,端口为3308 ,通过Binlog方式同步主机情况 localhost : 3306 主机,    在mycat 中配置为 writehost 1 localhost : 3307 从机 a ,在mycat 中配置为 readhost localhost :

linux下mysql主从复制(第二篇读写分离) mycat 中间件

linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-20151019230038-win.tar.gz 解压包 1.解压后的文件如下: 1.1 接下来进入到conf 目录下配置四个文件server.xml.schema.xml.rule.xml.log4j.xml 下面一一介绍 1.2 首先在我们主服务上面test 库下新建两张表如下: CREATETABLE`t_u

基于MYCAT中间件实现MYSQL读写分离

基于mycat实现mysql读写分离 完成主从复制的配置 /* 主节点:192.168.47.101 从节点:192.168.47.102 */ /*mycat为同一网段客户端*/ /* 修改主节点基础配置文件 */ /* */ [mysqld] server-id=101 log-bin /*重启服务 */ #systemctl restart mariadb /*创建从节点的账号 */ CREATE USER 'xie'@'192.168.47.102' IDENTIFIED BY '123

MySQL读写分离(ProxySQL)

MySQL读写分离(ProxySQL) 读写分离原理 读写分离就是用户在发送请求时,请求经过中间件,中间件将请求中的读和写操作分辨出来将读请求发送给后端的从服务器,将写请求发送给后端的主服务器,再又主服务器通过主从复制将数据复制给其他从服务器 常见MySQL中间件 名称 公司 站点地址 mysql-proxy Oracle https://downloads.mysql.com/archives/proxy Atlas Qihoo https://github.com/Qihoo360/Atla

实现MySQL读写分离,MySQL性能调优

实现MySQL读写分离 1.1 问题 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 1.2 方案 使用4台RHEL 7.2虚拟机,如图-1所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100

Database基础(六):实现MySQL读写分离、MySQL性能调优

一.实现MySQL读写分离 目标: 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 方案: 使用4台RHEL 7.2虚拟机,如下图所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100作为MyS

mysql读写分离的三种实现方式

1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自己维护更新,增减服务器在代码处理 2 amoeba参考官网:http://amoeba.meidusa.com/优点:直接实现读写分离和负载均衡,不用修改代码,有很灵活的数据解决方案缺点:自己分配账户,和后端数据库权限管理独立,权限处理不够灵活 3 mysql-proxy参考 mysql-proxy

mysql读写分离

mysql读写分离  静态分离:直接将服务器地址写入程序  动态分离:通过代理服务器对数据进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在          从服务器上读数据.    1.使用mysql-proxy实现读写分离  # ./mysql-proxy --proxy-backend-addresses=10.0.5.150:3306 --proxy-read-only-backend-addresses=10.0.5.151:3306 --proxy-lua-script