MYSQL+MYCAT读写分离实战

****1、实战MYSQL+MYCAT读写分离实战,实现MYSQL数据库1主2从架构。**2、写出MYSQL 1主2从架构部署过程和MYCAT实战全部过程,将所有部署过程写出来和划出架构图。

在这里插入图片描述

1.配置MySQL的一主二从

1.1安装MySQL

| wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
#安装 MYSQL8 YUM 源;
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
#安装 MYSQL8.0 软件服务;
sed -i ‘s#gpgcheck=1#gpgcheck=0#g’ /etc/yum.repos.d/mysql-community.repo
yum install mysql-community-server -y
#开机启动 MYSQL 服务&启动 MYSQL 服务;
systemctl enable mysqld.service
systemctl start mysqld.service
#查看 MYSQL 密码;
grep ‘temporary password’ /var/log/mysqld.log
登录密码时需要带‘’
[root@itzfl ~]# mysql -uroot -p’rpsqzLq8*/wC’
#修改密码规则和长度限制;
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘aaaAAA111.’;
set global validate_password.policy=0;
set global validate_password.length=1;
#修改密码为 123456,指令如下;
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’;
#默认 root 用户不能远程登录,需要更新密码信息;
use mysql;
update mysql.user set host=‘%’ where user=“root”;
use mysql;
grant system_user on . to ‘root’;
flush privileges;
#若在想修改 root 密码,命令如下;
update user set authentication_string=password(“root”) where user=‘root’ and host=‘localhost’;
#mysql8.0 之前的版本中加密规则是 mysql_native_password, 而在 mysql8 之后,加密规则是
caching_sha2_password
使用 navicat 进行 mysql 登录时出现弹窗报错
grant system_user on . to ‘root’;
ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
FLUSH PRIVILEGES;|

1.2配置主从

修改mysql的配置文件
分别将server-id 设置不同
在master设置 bin-log
配置和之前的一样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在master创建数据库 从库都会同步

2.MYCAT安装

2.1MYCAT安装环境

192.168.140.148 MYCAT
192.168.140.144 MYSQL-MASTER
192.168.140.145 MYSQL-SLAVE1
192.168.140.150 MYSQL-SLAVE2

2.2JDK

2.2.1安装jdk

[root@itzfl ~]# rz

[root@itzfl ~]# ls
anaconda-ks.cfg       jdk1.8.0_131.tar.gz  模板  图片  下载  桌面
initial-setup-ks.cfg  公共                 视频  文档  音乐
[root@itzfl ~]# tar -xzf jdk1.8.0_131.tar.gz 
[root@itzfl ~]# ls
anaconda-ks.cfg       jdk1.8.0_131         公共  视频  文档  音乐
initial-setup-ks.cfg  jdk1.8.0_131.tar.gz  模板  图片  下载  桌面
[root@itzfl ~]# mkdir -p /usr/java
[root@itzfl ~]# mv jdk1.8.0_131 /usr/java/
[root@itzfl ~]# cd !$
cd /usr/java/
[root@itzfl java]# cd jdk1.8.0_131/
[root@itzfl jdk1.8.0_131]# ls
bin             jre          release
COPYRIGHT       lib          src.zip
db              LICENSE      THIRDPARTYLICENSEREADME-JAVAFX.txt
include         man          THIRDPARTYLICENSEREADME.txt
javafx-src.zip  README.html
[root@itzfl jdk1.8.0_131]# 

2.2.2配置JAVA环境变量,/etc/profile配置文件中末尾加入如下代码

[root@itzfl jdk1.8.0_131]# clear
[root@itzfl jdk1.8.0_131]# vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_131/


[root@itzfl jdk1.8.0_131]# source !$
source /etc/profile


2.2.3查看环境变量

[root@itzfl jdk1.8.0_131]# $JAVA_HOME/bin/java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@itzfl jdk1.8.0_131]# 
[root@itzfl jdk1.8.0_131]# /usr/java/jdk1.8.0_131/bin/java -version 
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@itzfl jdk1.8.0_131]# 

两种查看方式
但是不能用Java -version查看 因为没有加载到path路径
所以 加一个path路径就可以实现java -version启动

[root@itzfl jdk1.8.0_131]# export PATH=$PATH:/usr/java/jdk1.8.0_131/bin/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.8.0_131/bin/

在etc/profile
 也加入这个路径

[root@itzfl jdk1.8.0_131]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@itzfl jdk1.8.0_131]#

2.3安装MYCAT

下载Mycat安装包
 wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
下载Mycat 2所需依赖 jar
[root@itzfl ~]# wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar

[root@itzfl ~]# unzip mycat2-install-template-1.21.zip 

[root@itzfl ~]# \mv mycat /usr/local/
#Cp Mycat 2 所需依赖JAR包至Mycat的LIB目录;
[root@itzfl ~]# cp mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
[root@itzfl ~]# 
#授予Mycat bin目录下文件执行权限;
chmod +x /usr/local/mycat/bin/*
#查看Mycat程序是否部署成功;
ls -l /usr/local/mycat/

2.4MYCAT配置文件

2.4.1在主从节点均创建给 Mycat 程序使用的用户并授权

分别在144 145 150 创建mycat用户

#创建用户&授权 mycat 用户访问;
create user mycat@'%' identified by '123456';
GRANT XA_RECOVER_ADMIN ON *.* to 'mycat'@'%';
GRANT ALL PRIVILEGES ON *.* to 'mycat'@'%';
FLUSH PRIVILEGES;

2.4.2在Master主节点创建Mycat使用的数据库 mycat

create database mycat;
#这个库称为Mycat 的原型库(prototype),
Mycat 在启动时会自动在原型库下创建其运行时所需的数据表。

mycat自己的数据会写入到这个数据库中
就是通过mysql 

2.4.3配置 Mycat 原型库的数据源(datasource)信息

这个库必须配置,否则在启动 Mycat 时会报错,操作指令如下:
配置好后 mycat机器才能连接到mysql下面的mycat数据库

cd /usr/local/mycat/conf/datasources/
#修改prototypeDs.datasource.json代码;


[root@itzfl datasources]# vim prototypeDs.datasource.json 

{
        "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.140.144:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"mycat",
        "weight":0
}
~           

2.4.4添加物理数据库discuz1数据库的数据源信息

添加数据存储的主库和从库,配置连接主库和从库的ip和密码

#进入DataSource目录;
cd /usr/local/mycat/conf/datasources/
#拷贝模板文件,生成master和slave配置文件;


[root@itzfl datasources]#  \cp prototypeDs.datasource.json  master.datasource.json
[root@itzfl datasources]# \cp prototypeDs.datasource.json  slave-01.datasource.json
[root@itzfl datasources]# \cp prototypeDs.datasource.json  slave-02.datasource.json
[root@itzfl datasources]# ls
master.datasource.json       slave-01.datasource.json
prototypeDs.datasource.json  slave-02.datasource.json
[root@itzfl datasources]# 




修改master.datasource.json代码;
[root@itzfl datasources]# vim master.datasource.json 

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"master",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.140.144:3306/discuz1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"mycat",
        "weight":0
}

修改slave-01.datasource.json代码;
[root@itzfl datasources]# vim slave-01.datasource.json 

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"slave-01",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.140.145:3306/discuz1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"mycat",
        "weight":0
}
~                                                                 
~                                                                 
修改slave-02.datasource.json代码;~       
[root@itzfl datasources]# vim slave-02.datasource.json 

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"slave-02",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.140.150:3306/discuz1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"mycat",
        "weight":0
}
~                                                                 
~       

2.4.5配置Discuz数据源的集群(cluster)信息 mycat关联一主二从

进入Clustesr目录;
cd /usr/local/mycat/conf/clusters/
#不能删除 prototype.cluster.json,否则启动 Mycat 时会报错;

[root@itzfl datasources]# cd /usr/local/mycat/conf/clusters/
[root@itzfl clusters]# ls
prototype.cluster.json
[root@itzfl clusters]# \cp prototype.cluster.json master-slave.cluster.json
[root@itzfl clusters]# ls
master-slave.cluster.json  prototype.cluster.json



[root@itzfl clusters]# vim master-slave.cluster.json 

{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetry":3,
                "minSwitchTimeInterval":300,
                "slaveThreshold":0
        },
        "masters":[
                "master"
        ],

        "replicas":[
                "slave-01"
                "slave-02"

        ],

        "maxCon":5000,
        "name":"master-slave",
        "readBalanceType":"BALANCE_ALL",
        "switchType":"NOT_SWITCH"
}

2.4.6配置物理库(schema)和 Mycat 中数据源/数据源集群的关系

进入Schemas目录;
cd /usr/local/mycat/conf/schemas/
#创建discuz.schema.json文件,代码;


[root@itzfl schemas]# ls
discuz1.schema.json             mysql.schema.json
information_schema.schema.json
[root@itzfl schemas]# vim discuz1.schema.json 
[root@itzfl schemas]# vim discuz1.schema.json 

{
    "schemaName": "discuz1",
    "targetName": "master-slave",
    "normalTables": {}
}


2.4.7修改 Mycat 登录用户信息

#进入Users目录;
cd /usr/local/mycat/conf/users/
新建mycat.user.json

[root@itzfl users]# ls
mycat.user.json  root.user.json
[root@itzfl users]# vim mycat.user.json 

{
        "dialect":"mysql",
        "ip":null,
        "password":"123456",
        "transactionType":"xa",
        "username":"mycat"
}


2.4.8启动Mycat服务,查看其运行状态

#启动服务;
/usr/local/mycat/bin/mycat start
#查看服务状态;
/usr/local/mycat/bin/mycat status
#查看Mycat帮助信息;
/usr/local/mycat/bin/mycat --help


[root@itzfl ~]# /usr/local/mycat/bin/mycat start
Starting mycat2...
[root@itzfl ~]# 


[root@itzfl ~]# /usr/local/mycat/bin/mycat start
Starting mycat2...
[root@itzfl ~]# ps -ef |grep java
root      18002  18000 66 17:58 ?        00:00:02 java -DMYCAT_HOME=./conf -Dfile.encoding=UTF-8 -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1984 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx32G -Xms1G -Xms256m -Xmx4096m -Djava.library.path=lib -classpath lib/wrapper.jar:lib/libwrapper-aix-ppc-32.a:lib/libwrapper-aix-ppc-64.a:lib/libwrapper-hpux-parisc-64.sl:lib/libwrapper-linux-ppc-64.so:lib/libwrapper-linux-x86-32.so:lib/libwrapper-linux-x86-64.so:lib/libwrapper-macosx-ppc-32.jnilib:lib/libwrapper-macosx-universal-32.jnilib:lib/libwrapper-macosx-universal-64.jnilib:lib/libwrapper-solaris-sparc-32.so:lib/libwrapper-solaris-sparc-64.so:lib/libwrapper-solaris-x86-32.so:lib/wrapper-windows-x86-32.dll:lib/wrapper-windows-x86-64.dll:lib/wrapper.jar:lib/mycat2-1.21-release-jar-with-dependencies.jar -Dwrapper.key=6YGIjt4ARzihLUD1 -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=18000 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.tanukisoftware.wrapper.WrapperSimpleApp io.mycat.MycatCore start
root      18034  12390  0 17:58 pts/1    00:00:00 grep --color=auto java



查看日志


[root@itzfl datasources]# !ta
tail -fn 10  /usr/local/mycat/logs/wrapper.log 
INFO   | jvm 1    | 2022/08/27 19:13:06 | 2022-08-27 19:13:06,864[INFO]com.alibaba.druid.pool.DruidDataSource.init:990{dataSource-2} inited
INFO   | jvm 1    | 2022/08/27 19:13:07 | 2022-08-27 19:13:07,832[INFO]io.mycat.config.MycatRouterConfigOps.recoveryXA:735readXARecoveryLog start
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,985[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server a2dece8a-e4ef-4c29-b2b3-a863e0493194 started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,986[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server 30030d69-cd92-44b0-b5d7-6d9186a2466c started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,987[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server 3152ed0c-deb8-4809-aefc-3cd9e3ef7c9c started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,987[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server 2302a753-040d-491a-b30a-d049804740cc started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,989[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server 88ed2bc1-2e82-4858-b1b5-74c1650240a1 started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,990[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server a381084d-fc95-4c1b-b411-0ef32bd53f74 started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,992[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server ca55bc12-c587-4b01-a973-f1c0457cd75f started up.
INFO   | jvm 1    | 2022/08/27 19:13:08 | 2022-08-27 19:13:07,992[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server 2659af49-b635-430d-ba2c-e9448fe090b1 started up.


netstat -ntl|grep -E --color "8066|9066"
tcp6       0      0 127.0.0.1:9066          :::*                    LISTEN     
tcp6       0      0 :::8066                 :::*                    LISTEN     
[root@itzfl datasources]# 

3.MYCAT读写分离测试

3.1查看8066和9066端口是否启动

其中8066用于WEB连接Mycat,9066用于SA|DBA管理端口;

netstat -ntl|grep -E --color "8066|9066"
tcp6       0      0 127.0.0.1:9066          :::*                    LISTEN     
tcp6       0      0 :::8066                 :::*                    LISTEN     
[root@itzfl datasources]# 

3.2进入MyCAT命令行界面

[root@master ~]# mysql -h192.168.140.148 -uroot -p123456 -P8066
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 0
Server version: 5.7.33-mycat-2.0 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

3.2.1 客户端创建数据库并且插入数据在主库查看否同步进去

客户端插入数据

在这里插入图片描述

在主库查看

在slave-01
在这里插入图片描述

slave-02
在这里插入图片描述

写入成功

3.2.2在从库插入数据 在客户端查询是否有数据 实现主写从读

在slave-01
在这里插入图片描述
在这里插入图片描述

在客户端读取数据

3.2.3通过8066端口查询是否能够查到数据,如果能够查询到,证明读写分离验证成功。mysql -h192.168.140.148 -uroot -p123456 -P8066 -e “select * from discuz.t1;”

在这里插入图片描述

在这里插入图片描述

4.总结、

1在做读写分离的时候出现好多问题 比如创建的mycat用户没有授权 导致mycat服务器端不能通过mycat用户连接到数据库.
2.出现错误在日志文件里面发现错误在哪里,进行纠正
3.配置必须小心 仔细

猜你喜欢

转载自blog.csdn.net/xiaolong1155/article/details/126562633