一.主从复制
主从复制原理:
Mysql开启binlog日志后,会把对数据库的增、删、改等数据库变动情况记录在二进制文件中,主从复制的过程就是主库(Master)开启binlog日志,从库(Slave)拉取日志,并执行这些操作,从而达到主从复制的目的。
主从复制参考文章:mysql 主从复制 基于binlog 简单实践
二.读写分离
读写分离原理:
读写分离原理如图所示,应用服务器连接的数据库并不是真实的数据库,它可能是数据库中间件创建的虚拟数据库,它的主要作用是代理(类似于Nginx),根据应用服务器不同的请求以及设定的规则,将数据库请求分发到相应数据库服务器。
基于Mycat实现读写分离:
1.搭建java环境。因为Mycat是用java写的,必须运行在java环境。
2.下载地址:
https://github.com/MyCATApache/Mycat-download
选择版本下载后解压即可。
3.目录结构:
--bin 启动目录
--conf 配置文件存放配置文件:
--server.xml:是Mycat服务器参数调整和用户授权的配置文件。
--schema.xml:是逻辑库定义和表以及分片定义的配置文件。
--rule.xml: 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。
--log4j.xml: 日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为debug debug级别下,会输出更多的信息,方便排查问题。
--autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相关的id分片规则配置文件
--lib MyCAT自身的jar包或依赖的jar包的存放目录。
--logs MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件
4.配置文件:
server.xml(mycat服务器参数配置,用户配置等)
<user name="mycat"><!--用户名-->
<property name="password">123456</property><!--密码-->
<property name="schemas">my_db</property><!--数据库名,对应schema.xml中的schema的name属性-->
<property name="readOnly">false</property><!--是否只读-->
</user>
schema.xml(配置真实数据库服务器信息等)
<!--逻辑库-->
<schema name="my_db" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<!--节点-->
<dataNode name="dn1" dataHost="localhost1" database="tuoxingwang" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--写库,主库-->
<writeHost host="hostM1" url="192.168.1.100:3306" user="mycat"
password="123456789">
<!--读库,从库-->
<readHost host="hostS2" url="192.168.1.101:3306" user="mycat" password="123456789" />
</writeHost>
</dataHost>
Balance参数配置:
1. balance=“0”, 所有读操作都发送到当前可用的writeHost上。
2. balance=“1”,所有读操作都随机的发送到readHost。
3. balance=“2”,所有读操作都随机的在writeHost、readhost上分发。
WriteType参数设置:
1. writeType=“0”, 所有写操作都发送到可用的writeHost上。
2. writeType=“1”,所有写操作都随机的发送到readHost。
3. writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
5.启动:
启动脚本在bin目录下:
//启动
./mycat start
//停止
./mycat stop
//重启
./mycat restart
6.连接mycat:
客户端:
mysql -umycat -p123456 -p8066 --default_auth=mysql_native_pasowrd
管理端:
mysql -umycat -p123456 -p9066 --default_auth=mysql_native_pasowrd