mysql读写分离心得

mycat 环境配置

1、准备环境

192.168.227.131   mycat 位置

192.168.227.130  master位置(增删改)

192.168.227.132  slave位置 (查询)

image-20240710180322117

2、配置主从关系

130 master 132 slave

2.1、master主机需要进行修改

​ 配置文件/etc/my.cnf

server-id = 132
log-bin = mysql-bin

image-20240706133741311

2.2、重新启动master

systemctl restart mysqld

image-20240706111255466

2.3、master下面创建用户 tongbu及密码并设置权限

create user 'tongbu'@'%' identified with mysql_native_password by 'aaaAAA111';
grant replication slave on *.* to 'tongbu'@'%';
show master status;

image-20240706134109153

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;


image-20240706114555022

2.5、开启slave

start slave ;
show slave status\G;

image-20240706134556693
一定要保证这两个都是yes的状态,如果不是话,可以试着把防火墙关闭,selinux也关闭

systemctl stop firewalld.service
#关闭selinux ,需要找到这个配置文件 config
vim  /etc/selinux/config
# 将这个内容改成disabled,然后在重启虚拟机
SELINUX=disabled
reboot  

在这里插入图片描述

2.6、验证主从同步

主机创建一个新的数据库

image-20240706134524221

在从机中读取看看能不能读取到这个新的数据库

image-20240706134701266

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/

image-20240710221419413

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;

image-20240710224204136

6、在 131 mycat 中间件配置 Mycat 原型库的数据源(datasource)信息

6.1 进入DataSource目录;

#进入DataSource目录;
cd /usr/local/mycat/conf/datasources/

image-20240710224403489

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

image-20240712221722409

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

image-20240710230123614

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

image-20240711090509124

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

image-20240711092018724

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

image-20240712220943906

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

image-20240711093142092

二、验证读写分离

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");

image-20240711143348767

2.3 在131 mycat的中间件环境

mysql -h 192.168.227.131 -u root -p -P 8066 -e "select * from discuz.t1;"

image-20240712220011910

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");

image-20240712220011910

在从库中在实验一次

insert into t1 values(04,'lisi','IT')

image-20240712220112757

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值