mycat 环境配置
1、准备环境
192.168.227.131 mycat 位置
192.168.227.130 master位置(增删改)
192.168.227.132 slave位置 (查询)
2、配置主从关系
130 master 132 slave
2.1、master主机需要进行修改
配置文件/etc/my.cnf
server-id = 132
log-bin = mysql-bin
2.2、重新启动master
systemctl restart mysqld
2.3、master下面创建用户 tongbu及密码并设置权限
create user 'tongbu'@'%' identified with mysql_native_password by 'aaaAAA111';
grant replication slave on *.* to 'tongbu'@'%';
show master status;
2.4、slave中配置master IP、用户名、密码、bin-log文件名以及position
change master to
master_host='192.168.227.130',
master_user='tongbu',
master_password='aaaAAA111',
master_log_file='mysql-bin.000029',
master_log_pos=157;
change master to
master_host='192.168.227.132',
master_user='tongbu',
master_password='aaaAAA111',
master_log_file='mysql-bin.000008',
master_log_pos=1678;
2.5、开启slave
start slave ;
show slave status\G;
一定要保证这两个都是yes的状态,如果不是话,可以试着把防火墙关闭,selinux也关闭
systemctl stop firewalld.service
#关闭selinux ,需要找到这个配置文件 config
vim /etc/selinux/config
# 将这个内容改成disabled,然后在重启虚拟机
SELINUX=disabled
reboot
2.6、验证主从同步
主机创建一个新的数据库
在从机中读取看看能不能读取到这个新的数据库
3、131 环境下 mycat 下载以及操作
3.1 需要mycat 的压缩包以及一个依赖jar包
#下载Mycat安装包
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
#下载Mycat 2所需依赖 jar
wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
3.2 解压压缩包,并移动到该目录下,拷贝jar包,权限设置
unzip mycat2-install-template-1.21.zip
\mv mycat /usr/local/
#Cp Mycat 2 所需依赖JAR包至Mycat的LIB目录;
cp mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
#授予Mycat bin目录下文件执行权限;
chmod +x /usr/local/mycat/bin/*
#查看Mycat程序是否部署成功;
ls -l /usr/local/mycat/
4、在主从服务器端口(130、132)都创建一个用户,并授权登录
# 注意的是上面做了主从的话,那就主库创建用户即可,否则的话,就需要都创建
# 这里 的IP代表的是mycat访问的ip地址
create user 'mycat'@'192.168.227.131' identified by '123456';
#必须要整的一个权限 mysql8才有的
GRANT XA_RECOVER_ADMIN ON *.* TO 'mycat'@'192.168.227.131';
grant all privileges on *.* to 'mycat'@'192.168.227.131';
#刷新权限
flush privileges;
5、在主机130 上面创建数据库
create database mycat;
6、在 131 mycat 中间件配置 Mycat 原型库的数据源(datasource)信息
6.1 进入DataSource目录;
#进入DataSource目录;
cd /usr/local/mycat/conf/datasources/
6.2 修改 prototypeDs.datasource.json
【内容】 这里的user 一定得是mycat ,使用的原型库也得是mycat
cat>prototypeDs.datasource.json<<EOF
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"prototypeDs",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://192.168.227.130:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"mycat",
"weight":0
}
EOF
7、用discuz 数据库进行验证
7.1 在131 的环境下创建master.datasource.json 和 slave-01.datasource.json
\cp prototypeDs.datasource.json master.datasource.json
\cp prototypeDs.datasource.json slave-01.datasource.json
7.2 修改master.datasource.json代码;
【内容】 password 和user一定要对应你的主库的root 以及密码
cat>master.datasource.json<<EOF
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"master",
"password":"",
"type":"JDBC",
"url":"jdbc:mysql://192.168.227.130:3306/discuz?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
EOF
7.3 修改slave-01.datasource.json代码;
【内容】 password 和user一定要对应你的主库的root 以及密码
cat>slave-01.datasource.json<<EOF
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"slave-01",
"password":"",
"type":"JDBC",
"url":"jdbc:mysql://192.168.227.132:3306/discuz?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
EOF
7.4 配置物理库(schema)和 Mycat 中数据源/数据源集群的关系
#进入Schemas目录;
cd /usr/local/mycat/conf/schemas/
#不能删除 prototype.cluster.json,否则启动 Mycat 时会报错;
\cp prototype.cluster.json master-slave.cluster.json
#修改master-slave.cluster.json代码;
cat>master-slave.cluster.json<<EOF
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"master"
],
"replicas":[
"slave-01"
],
"maxCon":5000,
"name":"master-slave",
"readBalanceType":"BALANCE_ALL",
"switchType":"NOT_SWITCH"
}
EOF
#创建discuz.schema.json文件,代码;
cat>discuz.schema.json<<EOF
{
"schemaName": "discuz",
"targetName": "master-slave",
"normalTables": {}
}
EOF
7.5 修改 root.user.json 登录用户信息
#进入Users目录;
cd /usr/local/mycat/conf/users/
#修改root.user.json文件,代码;
{
"dialect":"mysql",
"ip":null,
"password":"",
"transactionType":"xa",
"username":"root"
}
# Mycat 服务端口信息,无需修改该文件;
ls -l /usr/local/mycat/conf/server.json
7.6 启动mycat
#启动服务;
/usr/local/mycat/bin/mycat start
#查看服务状态;
/usr/local/mycat/bin/mycat status
#查看Mycat帮助信息;
/usr/local/mycat/bin/mycat --help
【报错信息】
[root@localhost users]# /usr/local/mycat/bin/mycat start
Starting mycat2...
[root@localhost users]# /usr/local/mycat/bin/mycat status
mycat2 is not running.
【解决办法】
因为mycat是基于Java语言开发的,所以我们需要安装jdk
yum install -y jdk-11-openjdk
二、验证读写分离
2.1 查看mycat的端口
netstat -ntl|grep -E --color "8066|9066"
没有发现8066端口的话,可能是防火墙没有关闭
1)8066用于WEB连接Mycat,9066用于SA|DBA管理端口;
2.2 主库中建库(discuz) 建表t1,插入 132slave
create database discuz;
use discuz;
create table t1(id char(20),name char(20),job char(20));
insert into t1 values(01,"zhaoyi","IT");
2.3 在131 mycat的中间件环境
mysql -h 192.168.227.131 -u root -p -P 8066 -e "select * from discuz.t1;"
2.4 131mycat这边是否能查询到数据,能查询到,则成功
# 需要和 /usr/local/mycat/conf/users/root.user.json 里面保持一致
mysql -h192.168.227.131 -uroot -p -P8066 -e "select * from discuz.t1;"
#从库中进行执行
insert into t1 values(02,"qianer","IT");
insert into t1 values(03,"zhangsan","IT");
insert into t1 values(04,"lisi","IT");
在从库中在实验一次
insert into t1 values(04,'lisi','IT')