架构图
数据库同步
Master节点
开启Binary log
master节点修改my.ini配置文件
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
重启MySQL服务
SHOW MASTER STATUS
创建用户
//1,在主库创建账号,用于从库的连接
//2,赋予新建的账户从库权限(不同版本设置方式不同,此处为mysql8)
mysql> CREATE USER qiao IDENTIFIED BY '123456';
mysql> grant replication slave on *.* to 'qiao'@'%';
mysql> flush privileges;
Slave节点
开启log
slave节点修改my.ini配置文件
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
注:这里面的server-id 一定要和主库的不同
重启MySQL服务
关联Master
change master to master_host='127.0.0.1',
master_port=3307,
master_user='qiao',
master_password='123456',
master_log_file='master-bin.000001',
master_log_pos=0;
master_host:主库的ip
master_port:主库的端口,
master_user:连接主库的账号’,
master_password:账号的密码,
master_log_file:log文件名,
master_log_pos=0;//写0会赋予默认值
开启同步
mysql> start slave ;//启动同步
其他命令:
mysql> show slave status\G //查看启动状态,注意不要加分号 mysql> stop slave ; //停止同步
Mycat部署
安装
1、jdk安装(略)
2、mycat安装(官网http://www.mycat.org.cn/)
- wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
- tar -zxf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/
配置
schema.xml
主配置文件(读写分离、高可用、分表、节点控制)
#定义mycat工作库mycat_testdb是mycat的一个逻辑库,可以自定义,但是涉及另外一个server.xml配置文件。mycat_testdb逻辑库对应dn1这个数据节点
<schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
# 定义名为dn1这个数据节点的逻辑主机地址。和真实的后端数据库中的school库名。
<dataNode name="dn1" dataHost="host1" database="school" />
# host1这个逻辑主机的最大并发连接数。最小连接(类似预热数据,提前连接好,节省临时连接的消耗)。
balance默认为1,为负载均衡到所有从库读操作。
负载均衡类型,目前的取值有4 种:
(1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
(2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡。
简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
(3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
(4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
writeType默认为0,写操作只分配到第一个writeHost数据库实例组。指定后端数据库软件类型。
dbDriver是驱动。
switchType="1"是主库宕机,自动切换到其他预备主数据库实例组
dbDriver(使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。)
<dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
# mycat监控后端mysql是否可用,走的心跳信息
<heartbeat>select user()</heartbeat>
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可写”节点,真实的数据库密码,不能瞎写
<writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123">
# 定义host1逻辑主机中的真实物理主机,这是逻辑主机中的一个真实“可读”节点,真实的数据库密码,不能瞎写
<readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" />
server.xml
mycat软件本身相关的配置
启动
echo 'export PATH=/usr/local/mycat/bin:$PATH' >> /etc/profile
source /etc/profile
mycat start
springboot 整合
配置
#配置数据源
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#这里配置的是Mycat中server.xml中配置账号密码,不是数据库的密码。
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#mycat的逻辑库 端口也是mycat的
spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB
使用
结合项目的ORM正常使用,过程中对mycat无感知
资料:
https://www.cnblogs.com/yuan9910/p/13807619.html
https://www.cnblogs.com/psc0218/p/13555350.html
https://blog.csdn.net/qq_38361863/article/details/109365127