实现mysql的读写分离:
Mycat 可以简单概括为
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
实验环境下,准备四台主机,分别是3台centos8 一台centos7
设置如下:
mycat:10.0.0.8
master:10.0.0.18
slave:10.0.0.28
client:10.0.0.7
设置根据个人习惯,如果觉得这样比较花里胡哨,可以直接跳过;
在10.0.0.18主节点上:vim /etc/my.cnf、
[mysqld]
server-id=18
重启服务:systemctl restart mysqld
[mysqld]
server-id=28
**重启服务:**systemctl enable --now mysqld
进入mysql
执行
CHANGE MASTER TO
MASTER_HOST=‘10.0.0.18’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘123456’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘binlog.000002’,
MASTER_LOG_POS=156;
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.0.0.18', #18是主节点的ip
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123456',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='binlog.000002', #主节点的二进制文件
-> MASTER_LOG_POS=156;
然后 start slave;
查看 show slave status\G 查看状态是否开启
在18主机上 将数据库导入 (一方面是测试主从,另外一方面是为了最后mycat验证操作,这里按个人条件,不同的sql文件都可以的)
首先要安装java
yum -y install java
java的版本 最好是1.8.0的 方便测试;
[root@mycat ~]#java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
下载安装mycat 版本最好是: 1.6.7.4
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
建立文件夹进行解压缩: mkdir /apps
将文件解压缩到指定目录下;
tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
解压好以后查看:mycat是最重要的文件
为了让mycat使用方便,使其生成一个path变量:
echo ‘PATH=/apps/mycat/bin:$PATH’ > /etc/profile.d/mycat.sh
. /etc/profile.d/mycat.sh
命令如下:
[root@mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh^C
[root@mycat ~]#. /etc/profile.d/mycat.sh
提醒:安装后 查看内存是否足够: 大于2G(不然无法开启mycat)
在8主机 mycat上打开:修改第一个文件vim /apps/mycat/conf/server.xml 将端口号改成3306
删除这后面的注释;
修改一下密码:
接着修改第二个文件:vim /apps/mycat/conf/schema.xml 实现读写分离策略
注意;1是我们开始导入文件的名字,2是我们作为主从的两台的ip
脚本:
"1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
"http://io.mycat/">
"TESTDB" checkSQLschema="false" sqlMaxLimit="100"
dataNode="dn1">
</schema>
"dn1" dataHost="localhost1" database="hellodb" />
"localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
select user()</heartbeat>
"host1" url="10.0.0.18:3306" user="root"
password="123456">
"host2" url="10.0.0.28:3306" user="root"
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
重启mycat数据库 mycat restart
当从节点停止服务 客户端上的查询服务无法执行 systemctl stop mysqld
在客户端执行查询操作,会提示被拒绝
但是:过一会会自动链接在主节点上;
执行select @@server_id 查看到的是master的ip;
信息可以再次查看,该信息来自主节点:
重新开启从节点后,执行select @@server_id查询到的ip重新变回 了从节点的ip
(注意:开启关闭节点是在 28和18上执行,不是在客户端)
而如果主节点 停止 则读可以,写无法执行
update students set age=@@server_id where stuID=5;
此时读操作无法转移到从节点,必须重启主节点的服务后,修改才能完成
至此 mycat实现了读写分离,设置完成
谢谢观赏