MySQL中间件Mycat实现读写分离

179 阅读4分钟

Mycat概述

一个彻底开源的,面向企业应用开发的大数据库集群

支持事务、ACID、可以替代MySQL的加强版数据库

一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

Mycat实现mysql读写分离

初始化环境

image.png

#4台服务器上都初始化,关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

```js

主mysql服务器配置(192.168.59.113)

1)#修改配置文件
vim /etc/my.cnf
server-id = 1
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true2)#重启服务
systemctl restart mysqld
 
(3)#进入数据库授权,查看二进制文件及节点号
mysql -uroot -p123123
grant replication slave on *.* to 'myslave'@'192.168.59.%' identified by '123456';
flush privileges;
show master status;
 
(4)#在数据库中传入一个数据库文件hellodb
source /bak/test.sql

```js

(1)#修改配置文件

1655014699257.jpg (2)#重启服务

image.png (3)#进入数据库授权,查看二进制文件及节点号

image.png (4)#在数据库中传入一个数据库文件hellodb

image.png

image.png

从mysql服务器配置(192.168.59.112)

1)#修改配置文件
vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index2)#重启服务
systemctl restart mysqld
 
(3)#进入数据库授权,查看二进制文件及节点号
mysql -uroot -p123123
change master to master_host='192.168.59.113',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
 
start slave;
show slave status\G;
 
##一定要出现
#Slave_IO_Running:Yes
#Slave_SQL_Running:Yes

```js

(1)#修改配置文件 image.png (2)#重启服务 systemctl restart mysqld

(3)#进入数据库授权,查看二进制文件及节点号

image.png

安装mycat(192.168.59.114)

1)#主机上安装java
yum install java -y
 
(2)#创建/apps文件夹
mkdir /apps
 
(3)#网络下载mycat包并解压至/apps下
wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
tar zxvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/
 
(4)#设置变量环境
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh5)#启动mycat
mycat start
 
(6)#查看日志文件,最后可以看到启动成功
tail -f /apps/mycat/logs/wrapper.log 

```js

(1)#主机上安装java image.png (2)#创建/apps文件夹

image.png (3)#网络下载mycat包并解压至/apps下 image.png

image.png (4)#设置变量环境 image.png (5)#启动mycat image.png

(6)#查看日志文件,最后可以看到启动成功 image.png

第一次在客户机上测试(192.168.59.118)

#这里密码初始为123456   需要加端口
mysql -uroot -p123456 -h 192.168.59.114 -P8066

```js

image.png

image.png

修改 mycat 配置文件

vim /apps/mycat/conf/server.xml
 
#去掉44行注释,50行末注释,51行末注释
 
#第45行,修改端口号
<property name="serverPort">3306</property>
 
#密码用户 在110111 可以修改这边不修改了

```js

#去掉44行注释,50行末注释,51行末注释

image.png #第45行,修改端口号 image.png #密码用户 在110 和111 可以修改这边不修改了

image.png

主服务器上建立一个用户

mysql -uroot -p123123
GRANT ALL ON *.* TO 'root'@'192.168.59.%' IDENTIFIED BY '123456';
 
#查看创建成功
use mysql;
select user,host from user;

```js

image.png

image.png

修改 /apps/mycat/conf/schema.xml

(1)#删除所有内容,重新写入以下
vim  /apps/mycat/conf/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="dn1"></schema>
        <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.59.113:3306" user="root" password="123456">
                 <readHost host="host2" url="192.168.59.112:3306" user="root" password="123456"/>
 
                </writeHost>
        </dataHost>
</mycat:schema>
 
(2)#如果本地mycat服务器上安装了mysql需要关掉,否则端口会冲突
systemctl stop mysqld.service3)#重启mycat,并查看3306端口
 mycat restart    
 ss -antp|grep 3306
 
```js

(1)#删除所有内容,重新写入以下 image.png (2)#如果本地mycat服务器上安装了mysql需要关掉,否则端口会冲突 image.png (3)#重启mycat,并查看3306端口 image.png

客户端测试

#这时可以不加端口直接进入数据库了
mysql -uroot -p123456 -h 192.168.59.114
 
#看是否能查到表
mysql -uroot -p123456 -h 192.168.59.114
show databases;
use TESTDB;
show tables;
 
#查看当前的查询来自哪台服务器
select @@server_id;

```js

#这时可以不加端口直接进入数据库了 image.png 查看是否能查到表 image.png

测试读写分离

#在主、从服务器打开日志
set global general_log=1; 
 
#在客户机查看是否开启成功
show variables like 'general%';
 
#在主从服务器实时查看日志
tail -f /usr/local/mysql/data/localhost.log
 
#在客户机上汪表里插入数据,并查看主从服务器实时日志
insert into teachers values(5,'Xiao Ming',46,'F');
 
#在客户机查看表信息,并查看主从服务器实时日志
select * from teachers;

```js

#在主、从服务器打开日志

image.png

image.png

#在客户机查看是否开启成功

image.png

#在主从服务器实时查看日志

image.png image.png

#在客户机表里插入数据,并查看主从服务器实时日志

image.png

image.png

#在客户机查看表信息,并查看主从服务器实时日志

image.png

image.png