mycat实现mysql读写分离

本文详细介绍了如何使用Mycat实现MySQL的读写分离,包括环境准备、JDK安装、Mycat部署、用户创建、配置文件编辑以及启动Mycat。通过示例展示了读写操作在主从节点间的分配,验证了读写分离的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建前准备:

主:172.25.90.3

从:172.25.90.1

mycat client:172.25.90.2

主从上需要线配置好主从复制


现在mycat的主机上配置jdk:

jdk-7u79-linux-x64.tar.gz

解压到/usr/local/:# tar zxf jdk-7u79-linux-x64.tar.gz /usr/local/

做软链接:# ln -s jdk1.7.0_79/ java

# vim /etc/profile

export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

# source /etc/profile

配置mycat:

安装包:Mycat-server-1.4-beta-20150604171601-linux.tar.gz

解压到/usr/local:

# tar zxf Mycat-server-1.4-beta-20150604171601-linux.tar.gz -C /usr/local/

添加用户:

# useradd mycat

# passwd mycat

# chown mycat.mycat -R /usr/local/mycat/

添加环境变量:

# vim /etc/profile

export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin

# source /etc/profile

# cd /usr/local/conf

配置:

# vim schema.xml

<?xml version="1.0"?>
        <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
        <mycat:schema xmlns:mycat="http://org.opencloudb/">
        <schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="defaultDN"></schema>

        <dataNode name="defaultDN" dataHost="dtHost" database="pcx_schema" />

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

                <heartbeat>select user()</heartbeat>

                <writeHost host="hostM1" url="172.25.90.3:3306" user="root" password="redhat"></writeHost>
                <writeHost host="hostS1" url="172.25.90.1:3306" user="root" password="redhat" />
        </dataHost>
</mycat:schema>

# vim server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
        <system>
        <property name="defaultSqlParser">druidparser</property>
        </system>
        <user name="root">
                <property name="password">redhat</property>
                <property name="schemas">pcx_schema</property>
        </user>

        <user name="user">
                <property name="password">redhat</property>
                <property name="schemas">pcx_schema</property>
                <property name="readOnly">true</property>
        </user>
</mycat:server>



# vim log4j.xml

  <root>
    <level value="debug" />
    <appender-ref ref="FILE" />
     <!--<appender-ref ref="FILE" />-->
  </root>


启动mycat:

因为之前把环境变量配置到了/etc/profile里了,所以

# mycat console&


读写分离:

在远端登录mycat:

[kiosk@foundation90 Desktop]$ mysql -h172.25.90.2 -P 8066 -u root -predhat
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.8-mycat-1.4-beta-20150604171601 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+------------+
| DATABASE   |
+------------+
| pcx_schema |
+------------+
1 row in set (0.00 sec)

MySQL [(none)]> use pcx_schema;
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 [pcx_schema]> show tables;
+----------------------+
| Tables_in_pcx_schema |
+----------------------+
| travelrecord         |
+----------------------+
1 row in set (0.01 sec)

MySQL [pcx_schema]> select * from travelrecord;
+---------+--------------+------------+------+------+
| id      | user_id      | traveldate | fee  | days |
+---------+--------------+------------+------+------+
|       1 | mysql-server | 2017-06-23 |  100 |   10 |
|       2 | mysql-server | 2017-06-23 |  100 |   10 |
| 5000001 | mysql-server | 2017-06-23 |  100 |   10 |
+---------+--------------+------------+------+------+
3 rows in set (0.01 sec)

MySQL [pcx_schema]> delete from travelrecord where id='1';
Query OK, 1 row affected (0.11 sec)





一开始,主和从是同步的:

mysql> select * from travelrecord;
+---------+--------------+------------+------+------+
| id      | user_id      | traveldate | fee  | days |
+---------+--------------+------------+------+------+
|       1 | mysql-server | 2017-06-23 |  100 |   10 |
|       2 | mysql-server | 2017-06-23 |  100 |   10 |
| 5000001 | mysql-server | 2017-06-23 |  100 |   10 |
+---------+--------------+------------+------+------+

现在间从机上的io_thread关闭
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.12 sec)

我们在远端对数据库修改:

MySQL [pcx_schema]> delete from travelrecord where id='1';
Query OK, 1 row affected (0.11 sec)

MySQL [pcx_schema]> select * from travelrecord;
+---------+--------------+------------+------+------+
| id      | user_id      | traveldate | fee  | days |
+---------+--------------+------------+------+------+
|       1 | mysql-server | 2017-06-23 |  100 |   10 |
|       2 | mysql-server | 2017-06-23 |  100 |   10 |
| 5000001 | mysql-server | 2017-06-23 |  100 |   10 |
+---------+--------------+------------+------+------+



我们再来看看主和从:

主:

mysql> select * from travelrecord;
+---------+--------------+------------+------+------+
| id      | user_id      | traveldate | fee  | days |
+---------+--------------+------------+------+------+
|       2 | mysql-server | 2017-06-23 |  100 |   10 |
| 5000001 | mysql-server | 2017-06-23 |  100 |   10 |
+---------+--------------+------------+------+------+
2 rows in set (0.00 sec)

从:

mysql> select * from travelrecord;
+---------+--------------+------------+------+------+
| id      | user_id      | traveldate | fee  | days |
+---------+--------------+------------+------+------+
|       1 | mysql-server | 2017-06-23 |  100 |   10 |
|       2 | mysql-server | 2017-06-23 |  100 |   10 |
| 5000001 | mysql-server | 2017-06-23 |  100 |   10 |
+---------+--------------+------------+------+------+
3 rows in set (0.00 sec)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值