搭建环境
一、搭建M-S复制
㈠ 环境说明
IP | 主机名 | 角色 | 软件环境 |
---|---|---|---|
192.168.121.151 | web01 | web服务器 | mysql客户端 |
192.168.121.153 | master | master(主) | mysql:5.7.31 |
192.168.121.154 | lave | salve(从) | mysql:5.7.31 |
192.168.121.155 | mycat | mycat | jdk+mycat |
主从复制的原理 :主服务器开启bin-log(记录了写操作) 从服务器获取到主服务器的bin-log 记录到relay-log中。从服务器在通过异步的线程方式,对于relay-log进行重放操作。
mysql主从复制集群见30分钟搞懂MySQL主从复制集群搭建-CSDN博客进行部署。
二、MyCAT实现读写分离
1、介绍
Mycat 数据库中间件
国内最活跃的、性能最好的开源数据库中间件!
官方网址:http://www.mycat.io/
https://github.com/MyCATApache/MyCAT-Server/
因为mycat是由java语言开发,必须使用java的运行环境才能进行启动和操作
2、mycat安装和测试启动
①解压安装MyCAT
tar xvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local
实际解压到目录即可,无需安装
②软件目录介绍
目录或文件 | 作用 |
---|---|
bin | 相关软件管理命令等 |
conf | 配置文件目录 |
logs | 日志目录 |
③启动mycat
默认情况下启动mycat是可以启动的
#通过控制台 进行前端启动 可以看到执行过程
/usr/local/mycat/bin/mycat console
注意如果启动不成功,可能是由于没有解析主机名称。需要在hosts文件中进行解析。
3、配置读写分离
读写分离的配置文件:
文件名称 | 作用 |
---|---|
server.xml | 配置mycat的对外的用户、密码、映射数据库名称等信息 |
schema.xml | 配置后端真实数据库的用户、密码、真实数据库名称等信息 |
Mycat是由java开发,java开发的软件大部分配置文件是xml格式。注意它的基本格式。
xml格式注意点:
1、xml声明信息
2、具有一个根标签
3、双标签和单标签格式
4、注意闭合标签
5、注释格式为 <!-- 这里是注释内容 -->
①查看server.xml
默认server.xml可以不用修改
/usr/local/mycat/conf
vim server.xml
修改server.xml
配置mycat对外的使用用户信息
②修改schema.xml
schema标签里配置name的server.xml里的虚拟数据库名称,dataNode 填写后面使用的dataNode名称
dataNode标签和dataHost指定配置使用
dataHost标签里配置writeHost和readHost(密码,地址,用户名称)
精简过的配置文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定义逻辑数据库 TESTDB -->
<!-- checkSQLschema="false": 不检查 SQL 中的 schema 前缀 -->
<!-- sqlMaxLimit="100": 自动为所有查询添加 LIMIT 100 限制 -->
<!-- dataNode="dn1": 指定默认的数据节点为 dn1 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- 定义数据节点 dn1,映射到物理数据库 test -->
<!-- dataHost="localhost1": 指定数据节点使用的数据源为 localhost1 -->
<!-- database="test": 指定物理数据库名称 -->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 定义数据源 localhost1,包含主从服务器配置 -->
<!-- maxCon/minCon: 最大/最小连接数 -->
<!-- balance="1": 负载均衡模式(1=主库读+从库读) -->
<!-- writeType="0": 所有写操作都发到主库 -->
<!-- switchType="1": 自动切换主从 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测 SQL,用于检查数据库连接是否正常 -->
<heartbeat>select user()</heartbeat>
<!-- 主服务器配置 -->
<writeHost host="hostM1" url="192.168.121.153:3306" user="root" password="123456">
<!-- 从服务器配置,用于分担读压力 -->
<readHost host="hostS2" url="192.168.121.154:3310" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
③启动mycat服务
/usr/local/mycat/bin/mycat start
#确认mycat是否真的启动,查看它的端口 9066 8066
netstat -lntp|grep 8066
netstat -lntp|grep 9066
Tip:如果配置之后,启动mycat,不能够启动
通过查看/usr/local/mycat/logs/wrapper.log
4、mycat客户端
web01服务器上
yum install mysql -y
通过 yum 包管理器安装 MySQL 客户端
连接mycat客户端
mysql -h192.168.121.155 -uroot -p123456 -P8066
执行查询命令测试结果
mysql > show databases;
mysql > use TESTDB;
mysql > show tables;
4.1mycat管理端
连接mycat管理端
mysql -h192.168.121.155 -uroot -p123456 -P9066
执行管理命令查看
mysql > show @@help; //查看管理监控端的所有帮助命令
mysql > show @@heartbeat; //查看服务器状态
5、读写分离测试
vim schema.xml
修改balance=“1”表示开启读写分离
编辑 MyCat 的日志配置文件 log4j2.xml
vim /usr/local/mycat/conf/log4j2.xml
AsyncRoot
:使用异步日志(通过单独线程写入日志),大幅提升性能level="debug"
:记录所有 DEBUG 及以上级别的日志(包含大量细节)includeLocation="true"
:在日志中包含调用位置(类名、行号),方便定位问题
5.1 写入测试
mysql01创建一个测试表
mysql -uroot -p
use test;
create table ds_mycat(id int, name char(1));
web01
mysql -h 192.168.121.155 -P 8066 -uroot -p123456
use TESTDB;
MySQL [TESTDB]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| ds_mycat |
| test_home |
+----------------+
2 rows in set (0.00 sec)
MySQL [TESTDB]> insert into ds_mycat values (2,'b');
Query OK, 1 row affected (0.01 sec)
进入mycat/logs目录下查看mycat.log文件
输入/insert into 进行查找
可以看到写入的主机ip是mysql主服务器
5.2 读取测试
web01
mysql -h 192.168.121.155 -P 8066 -uroot -p123456
use TESTDB;
MySQL [TESTDB]> select * from ds_mycat where id =2 ;
+------+------+
| id | name |
+------+------+
| 2 | b |
+------+------+
1 row in set (0.00 sec)
进入mycat/logs目录下查看mycat.log文件
输入/select 进行查找
可以看到写入的主机ip是mysql从服务器
通过测试结果证明mycat读写分离成功