一、读写分离
读写分离即把数据库的读写操作分布在两个数据库上或者更多的数据库上,数据库进行数据同步。
二、读写分类的实现方式
读写分离的两种方法:使用中间件或者内部进行配置。常用如下:
(1)配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:写入访问对应的数据库,查询访问相应的数据库,不同数据库之间做好数据一致性。
(2)动态切换数据源,根据配置的文件,业务动态切换访问的数据库。
(3)通过MyCat来实现读写分离:使用mycat中间件,mycat连接数据库,数据源连接mycat。
三、mycat实现读写分离的安装配置
架构图如下所示:
配置之前做好数据库的主从同步。
主从同步参考:主从复制_Romanticn_chu的博客-CSDN博客
(1)安装配置mycat
1、安装JDK
[root@localhost ~]# tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local
[root@localhost local]# ln -s /usr/local/src/jdk1.8.0_161 ./java
[root@localhost local]# cd java/bin/
[root@localhost bin]# ./java -version (查看)
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM(build 25.161-b12,mixed mode)
2、创建mycat用户
[root@localhost ~]# useradd mycat
[root@localhost ~]# passwd mycat
3、下载软件包解压并授予权限
[root@localhost ~]# tar -xzvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local
[root@localhost ~]# chown -R mycat:mycat /usr/local/mycat
4、配置环境变量 (vim /etc/profile)
JAVA_HOME=/usr/java/java
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
5、启动
/usr/local/mycat/bin/mycat start
(2)mycat相关配置
修改server.xml文件 (因篇幅问题,只显示了要修改的位置)
<user name="root【此处是连接mycat的用户】" defaultAccount="true"> (全部用户)
<property name="password">Lolipop909【连接数据库的密码,即上述用户的密码】</property>
<property name="schemas">TESTDB</property>
<!-- 表级 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">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
修改schema.xml文件 (其中的一些东西需统一)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB(此处要跟server.xml中的一致)" checkSQLschema="false" sqlMaxLimit="100">
<table name="test1(此处要是数据库中已存在的数据库)" dataNode="dn1" primaryKey='id' />
</schema>
<dataNode name="dn1" dataHost="c1" database="test1(此处要和table中相同)" />
<dataHost name="c1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.1.1.181:3306" user="root"
password="Csbu@1234"> (此处的root可以是任意用户,但需要拥有所有权限,且该用户需已存在)
<readHost host="hostS2" url="10.1.1.236:3306" user="root" password="Csbu@1234" />
</writeHost>
</dataHost>
</mycat:schema>
重新启动mycat (/uar/local/mycat/bin/mycat start)
查看日志 若日志没有异常,且启动成功,即配置成功 (tailf -20 /usr/local/mycat/logs/mycat.log)