mysql主从同步+mycat2读写分离

mysql主从同步(基于mysql8)

准备主从节点,这里是一主两从

修改主节点mysql的my.cnf配置,在[mysqld]下增加配置

server-id=1
log-bin=master-bin
# 复制的数据库名
bin-lob-do-db=nacos-config
# 复制策略,默认STATMENT(sql复制),可选ROW(行记录复制)、MIXED(混合复制)
binlog-format=STATMENT

mysql主从同步+mycat2读写分离_第1张图片

  修改两个从节点myqsl的my.cnf配置,server-id分别为2和3

server-id=2
relay-log=slave-relay
server-id=3
relay-log=slave-relay

重启所有节点的mysql

然后连接主节点,在主节点执行sql给从节点赋权

GRANT XA_RECOVER_ADMIN ON *.* to 'root'@'%';
GRANT ALL PRIVILEGES ON *.* to 'root'@'%';
FLUSH PRIVILEGES;

mysql主从同步+mycat2读写分离_第2张图片

在主节点执行sql查询主节点的状态

show master status;

mysql主从同步+mycat2读写分离_第3张图片

切换从节点,在所有从节点都执行sql绑定主节点。注意master_log_file和master_log_pos为主节点查询到的file和position

change master to master_host='192.168.xx.xx' , master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=6155;

再执行start slave开启从节点

start slave;

开启完成之后可以查询子节点的状态确认是否成功绑定主节点,如果master_log和master_position设置正确,并且slave_io_running和slave_sql_running都为yes,且表示绑定成功

show slave STATUS;

mysql主从同步+mycat2读写分离_第4张图片

 如果绑定失败,可以执行stop slave;和RESET slave; 再重新绑定主节点。

然后在主节点执行语句,观察是否同步到从节点即可。

mycat2实现读写分离(一主两从)

主从同步已经完成之后,就可以利用mycat2实现读写分离,将写请求发送到主节点,读请求发送到从节点。

首先确认安装java8环境

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

CREATE DATABASE IF NOT EXISTS `mycat`;

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

下载 并安装 Mycat

这里选择了mycat2-1.21-release-jar-with-dependencies.jar

和mycat2-install-template-1.21.zip

mkdir -p /home/mycat2
cd /home/mycat2
# 下载安装包
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
unzip mycat2-install-template-1.21.zip
cd mycat
# 复制 Mycat 2 所需依赖 jar 到 mycat 的 lib 文件夹
cp ../mycat2-1.21-release-jar-with-dependencies.jar lib/
# 授予 bin 目录下所有命令可执行权限
chmod 777 bin/*

配置 Mycat 原型库的数据源(datasource)信息,到/home/mycat2/mycat/conf/datasources目录编辑prototypeDs.datasource.json

{
    // 数据库类型
    "dbType":"mysql",
    "idleTimeout":60000,
    "initSqls":[],
    "initSqlsGetConnection":true,
    // 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的
    "instanceType":"READ_WRITE",
    "maxCon":1000,
    "maxConnectTimeout":3000,
    "maxRetryCount":5,
    "minCon":1,
    // 数据源名称,这里不要修改
    "name":"prototypeDs",
    // 数据库密码
    "password":"123456",
    "type":"JDBC",
    // 数据库连接,这里直接配置在主节点
    "url":"jdbc:mysql://localhost:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
    // 数据库用户
    "user":"root",
    "weight":0
}

复制主从数据库的数据源信息

cp prototypeDs.datasource.json master.datasource.json
cp prototypeDs.datasource.json slave1.datasource.json
cp prototypeDs.datasource.json slave2.datasource.json

编辑master数据源信息

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        # 主数据源为可读可写
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        # 名称为master
        "name":"master",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://localhost:3306/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"root",
        "weight":0
}

编辑slave数据源信息

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        # 从数据源配置为只读即可
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        # 名称为slave1
        "name":"slave1",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://localhost:3307/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"root",
        "weight":0
}
{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        # 从数据源配置为只读即可
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        # 名称为slave2
        "name":"slave2",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://localhost:3308/nacos-config?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"root",
        "weight":0
}

配置集群(cluster)信息

cd /home/mycat2/mycat/conf/clusters
cp prototype.cluster.json nacos-config.cluster.json
vim nacos-config.cluster.json
{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetry":3,
                "minSwitchTimeInterval":300,
                "slaveThreshold":0
        },
        "masters":[
                "master"
        ],
        "replicas":[
                "slave1",
                "slave2"
        ],
        "maxCon":200,
        # 集群名称
        "name":"nacos-config-cluster",
        "readBalanceType":"BALANCE_ALL",
        "switchType":"NOT_SWITCH"
}

配置物理库和 Mycat 中数据源集群的关系

cd /home/mycat2/mycat/conf/schemas
touch nacos-config.schema.json
vim nacos-config.schema.json
{
        # 物理库为nacos-config
        "schemaName":"nacos-config",
        "shardingTables":{},
        # 目标名称为cluser配置中的集群名称
        "targetName":"nacos-config-cluster",
        "views":{}
}

修改 Mycat 登录用户信息

cd /home/mycat2/mycat/conf/users
vim root.user.json
{
        "dialect":"mysql",
        "ip":null,
        # 由于mycat原型库建在主节点,所以这里使用主节点的密码
        "password":"123456",
        "transactionType":"proxy",
        "username":"root"
}

启动 Mycat

cd /home/mycat2/mycat/bin
./mycat start

启动完成,在navicat创建连接并验证,mycat端口默认8066

mysql主从同步+mycat2读写分离_第5张图片

 mysql主从同步+mycat2读写分离_第6张图片

 mysql主从同步+mycat2读写分离_第7张图片

 插入数据再到主库和从库查询是否有这笔数据

mysql主从同步+mycat2读写分离_第8张图片

 mysql主从同步+mycat2读写分离_第9张图片

 mysql主从同步+mycat2读写分离_第10张图片

你可能感兴趣的:(mysql,数据库)