MyCat搭建mysql读写分离介绍,并使用SpringBoot测试
MyCat搭建mysql读写分离介绍,并使用SpringBoot测试
一、mysql主从复制
MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
二、主从复制原理
MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
三、什么是MyCat
MyCAT是一款由阿里Cobar演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。
MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
官方网站:http://www.mycat.org.cn/
四、环境搭建
有三台服务器分别为:
ip | 用途 |
---|---|
192.168.0.105 | 主数据库 |
192.168.0.106 | 从数据库 |
192.168.0.107 | mycat虚拟数据库 |
(1)安装mysql
三台服务器中其中主从数据库需要安装mysql,mycat不需要安装。
开始安装:
- 先检查系统是否装有mysql
rpm -qa | grep mysql
- 1
- 下载mysql的repo源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
- 1
报错: -bash: wget: 未找到命令
安装插件
yum -y install wget
- 1
- 安装mysql-community-release-el7-5.noarch.rpm包
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
- 1
- 安装MySQL
sudo yum install mysql-server
- 1
- 重置MySQL密码
mysql -u root
- 1
报错:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’ (2)
原因:原因是/var/lib/mysql的访问权限问题。
chown root /var/lib/mysql/
- 1
- 重启MySQL服务
service mysqld restart
- 1
- 接着登陆设置密码
mysql -u root
use mysql;
update user set password=password('123456') where user='root';
exit;
- 1
- 2
- 3
- 4
接着继续重启MySQL服务
service mysqld restart
- 1
- 接着设置Root账户远程连接密码
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
- 1
- 2
重启服务器
service mysqld restart
- 1
- 开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent&firewall-cmd --reload
- 1
(2)配置主从
1、主数据库
192.168.0.105
修改/etc/my.cnf,添加如下内容:
server-id=105 ###服务器id
log-bin=mysql-bin ###开启日志文件
- 1
- 2
重启mysql服务:
service mysqld restart
- 1
验证是否已经配置成功,如果能够查询对应配置文件中的server_id 说明已经配置成功。
show variables like '%server_id%';
- 1
查看状态,如果能够看到同步的文件,和行数 说明已经配置成功。
show master status;
- 1
2、从数据库
192.168.0.106
修改/etc/my.cnf,添加如下内容。
server-id=106 ###从服务器server_id
log-bin=mysql-bin ###日志文件同步方式
binlog-do-db=test ###同步数据库
- 1
- 2
- 3
重启mysql服务:
service mysqld restart
- 1
验证是否已经配置成功,如果能够查询对应配置文件中的server_id 说明已经配置成功。
show variables like '%server_id%';
- 1
从服务器同步主服务器配置
change master to master_host='192.168.0.105',master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=120;
- 1
开始同步
start slave;
- 1
检查从服务器复制功能状态
SHOW SLAVE STATUS;
- 1
到此主从复制环境创建成功!,可以在主数据库创建一个数据库去从数据库中查看是否有同步。
(3)配置MyCat
192.168.0.107
下载MyCat,选择Linux版本下载。
下载地址 https://github.com/MyCATApache/Mycat-Server/releases
上传至服务器:
scp G:\SpringBoot2X\Mycat-server-1.6.5-release-20180122220033-linux.tar.gz root@192.168.2.123:/home/bxc/bxc/mycat
- 1
解压:
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
- 1
进入conf 目录,有三个重要文件;
文件 | 说明 |
---|---|
server.xml | Mycat的配置文件,设置账号、参数等 |
schema.xml | Mycat对应的物理数据库和数据库表的配置 |
rule.xml | Mycat分片(分库分表)规则 |
配置 schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- TESTDB1 是mycat的逻辑库名称,链接需要用的 -->
<schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- database 是MySQL数据库的库名 -->
<dataNode name="dn1" dataHost="localhost1" database="mybxc" />
<!--
dataNode节点中各属性说明:
name:指定逻辑数据节点名称;
dataHost:指定逻辑数据节点物理主机节点名称;
database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99, 表示指定0-99这100个数据库;
dataHost 节点中各属性说明:
name:物理主机节点名称;
maxCon:指定物理主机服务最大支持1000个连接;
minCon:指定物理主机服务最小保持10个连接;
writeType:指定写入类型;
0,只在writeHost节点写入;
1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个;
dbType:指定数据库类型;
dbDriver:指定数据库驱动;
balance:指定物理主机服务的负载模式。
0,不开启读写分离机制;
1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡;
2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡;
-->
<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.2.120:3306" user="root" password="root">
<!-- 可以配置多个从库 -->
<readHost host="hostS2" url="192.168.2.121:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
配置 server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!-- 读写都可用的用户 -->
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mycat_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">mycat_testdb</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
注意数据库的名字;
然后进入bin目录启动mycat :
./mycat start
- 1
五、测试
使用NaviCat 连接Mycat服务的虚拟数据库:
ip:192.168.0.107
port:8066
账号:root
密码123456
就可以对数据进行增删该查了。
六、SpringBoot测试
新建SpringBoot项目,添加依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
application.properties配置
#mysql
spring.datasource.url=jdbc:mysql://192.168.2.123:8066/mycat_testdb?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis-plus
#mybatis-plus.mapper-locations=classpath:com/mht/springbootmybatisplus/mapper/xml/*.xml
mybatis-plus.type-aliases-package=com.bxc.eurekaprovide.Entity
mybatis-plus.configuration.map-underscore-to-camel-case: true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
下面就和普通操作数据库一样了。
文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_43692950/article/details/107731431
- 点赞
- 收藏
- 关注作者
评论(0)