运维之道 | Mysql主从复制 + Mycat读写分离
-
1、什么是读写分离
读写分离,基本的原理是让主数据库处理事务性增、删、改操作(INSERT、UPDATE、DROP),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 -
2、为什么要读写分离
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
因为数据库的“写”(写10000条数据到oracle可能需要几分钟)操作是比较耗时的;
但是数据库的“读”(从oracle读10000条数据可能需要几秒钟)操作是比较短时的;
所以读写分离,解决的是数据库的写入,影响了查询的效果。 -
3、主从复制、读写分离的基本设计
一台主、多台从,主提供写操作,从提供读操作。
一、安装配置JAVA - JDK环境
1、下载JDK安装包
- 下载Linux环境下的jdk1.8.0_231,请去JAVA官网中下载jdk的安装文件;
- 通过
wget
命令获取java压缩包
[root@localhost java]# wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1574751387_e7715500e2e4d54917604014600ce583
2、对JAVA安装包进行解压
[root@localhost java]# tar -zxvf jdk-8u231-linux-x64.tar.gz
3、修改环境配置
[root@localhost java]# vi /etc/profile
# JAVA
JAVA_HOME=/root/java/jdk1.8.0_231
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAME_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
[root@localhost ~]# source /etc/profile ///重启profile
[root@localhost ~]# javac ///测试java环境是否配置成功
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{
lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
...... 配置成功!!!
[root@localhost ~]# java -version ///查看java版本
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
二、安装Mycat(基于java环境)
1、获取Mycat安装包
[root@localhost soft]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2、解压Mycat安装包
[root@localhost soft]# tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3、进入到mycat文件的conf子文件夹修改server.xml文件
- 只需将配置的最后一部分密码修改即可,其他可按需求自行配置;
[root@localhost conf]# vi server.xml
......
<user name="user">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
......
4、修改conf文件中的 schema.xml文件
[root@localhost conf]# vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="villian">
</schema>
<dataNode name="villian" dataHost="localhost1" database="school" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write h