MyCat2搭建mysql主从分离

2023-05-16

前言

此次搭建MyCat2读写分离使用的Linux环境是Debian11.3,使用的mysql版本是8.0.16
在这里插入图片描述

1. 准备三台服务器

准备如下三台Debian服务器,而且这三台服务器之间能够相互通信,可以用ping命令测试,如下图所示,表示三台服务器之间通信正常,执行vim /etc/hostname命令修改162和163两台服务器的主机名分别为debian162,debian163,分别执行init 6重启,重启之后162和163的主机名分别为debian162,debian163,这个后面会用到,便于后面区分。

192.168.227.161     安装MyCat2
192.168.227.162      mysql主机,mysql8.0.16已安装
192.168.227.163      mysql从机,mysql8.0.16已安装

192.168.227.161 ping通 192.168.227.162和192.168.227.163
在这里插入图片描述
192.168.227.162 ping通 192.168.227.163和192.168.227.161
在这里插入图片描述
192.168.227.163 ping通 192.168.227.162和192.168.227.161
在这里插入图片描述

192.168.227.162和192.168.227.163已安装mysql8.0.16
在这里插入图片描述
在这里插入图片描述

2. 搭建MySQL主从复制

(1)修改主机MySQL的配置文件my.cnf,并执行/etc/init.d/mysql restart命令重启mysql服务,我这里mysql启动文件是放在/etc/init.d目录下
在这里插入图片描述
在这里插入图片描述

(2)修改从机MySQL的配置文件my.cnf,并执行/etc/init.d/mysql restart命令重启mysql服务,我这里mysql启动文件是放在/etc/init.d目录下
在这里插入图片描述
在这里插入图片描述
(3)进入主机mysql中执行授权

grant replication slave on  *.*  to 'root'@'%';

在这里插入图片描述
(4)给mysql从机配置mysql主机
在Mysql主机登录mysql,执行show master status查询主机MySQL的File和Position参数
在这里插入图片描述
然后登录从机mysql,执行以下命令

CHANGE MASTER TO
MASTER_HOST='192.168.227.162',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456',
master_log_file='mysql-bin.000001',
master_log_pos=375;

在这里插入图片描述
(5)登录MySQL从机,执行start slave启动主从复制,执行show slave status\G查看,如下图所示主从复制启动成功
在这里插入图片描述

3. 安装并启动MyCat2

将Mycat2的安装压缩包上传至/opt目录下

mycat2-1.21-release-jar-with-dependencies.jar
mycat2-install-template-1.21.zip

首先执行unzip mycat2-install-template-1.21.zip 完成解压,然后将mycat2-1.21-release-jar-with-dependencies.jar移动到解压的mycat/lib目录下
在这里插入图片描述
修改mycat/conf/datasources目录下的prototypeDs.datasource.json配置文件,修改内容如下:
在这里插入图片描述
修改mycat/bin目录下的文件权限,否则会拒绝执行

chmod 755 ./*
在这里插入图片描述
进入到mycat/bin目录下执行./mycat start启动mycat,执行./mycat status查看启动状态,执行tail -f /opt/mycat/wrapper.log查看启动日志,如下表示启动成功。
在这里插入图片描述
用navicat登录mycat,和登录mysq一样,只是端口不一样,如下图所示
在这里插入图片描述
成功创建数据库mydb1
在这里插入图片描述
登录主机mysql和从机mysql看看
在这里插入图片描述

4. 添加读写分离配置

(1) 第一种方式:使用注解添加读写分离配置

创建
/*+ mycat:createDataSource{"name":"rwSepw", "url":"jdbc:mysql://192.168.227.162:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "password":"123456"} */

/*+ mycat:createDataSource{"name":"rwSepr", "url":"jdbc:mysql://192.168.227.163:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "password":"123456"} */

查询
/*+ mycat:showDataSources{} */

在这里插入图片描述
或者是第二种方式直接编辑配置文件来添加读写分离配置
编辑rwSepw.datasource.json文件,添加如下内容

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "logAbandoned":true,
        "maxCon":1000,
        "maxConnectTimeout":30000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"rwSepw",
        "password":"123456",
        "queryTimeout":0,
        "removeAbandoned":false,
        "removeAbandonedTimeoutSecond":180,
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.227.162:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
        "user":"root",
        "weight":0
}

编辑rwSepr.datasource.json文件,添加如下内容

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "logAbandoned":true,
        "maxCon":1000,
        "maxConnectTimeout":30000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"rwSepr",
        "password":"123456",
        "queryTimeout":0,
        "removeAbandoned":false,
        "removeAbandonedTimeoutSecond":180,
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.227.163:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
        "user":"root",
        "weight":0
}

效果和使用注解添加一样

(2) 使用注解添加集群配置
第一种

创建
/*+ mycat:createCluster{"name":"prototype", "masters":["rwSepw"], "replicas":["rwSepr"]} */
查看
/*+ mycat:showClusters{} */

或者是修改/opt/mycat/conf/clusters/prototype.cluster.json,添加如下内容

{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetryCount":3,
                "minSwitchTimeInterval":300,
                "showLog":false,
                "slaveThreshold":0.0
        },
        "masters":[
                "rwSepw"
        ],
        "maxCon":2000,
        "name":"prototype",
        "readBalanceType":"BALANCE_ALL",
        "replicas":[
                "rwSepr"
        ],
        "switchType":"SWITCH"
}

在这里插入图片描述

最后重启mycat

 cd /opt/mycat/bin
 ./mycat restart

在这里插入图片描述

5. 测试MyCat2读写分离

我们可以这样测试:

首先创建一张test表
create table test(
id int,
hostname varchar(20)
);
在mycat执行SQL语句 insert into test(id, hostname) values(1, @@hostname);
在mysql从机执行SQL语句 insert into test(id, hostname) values(2, @@hostname);
最后在mycat执行select * from test;查看结果如下

第一次查询结果
在这里插入图片描述
第二次查询结果
在这里插入图片描述
从上面结果可以看到已经实现了读写分离。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyCat2搭建mysql主从分离 的相关文章

  • Preg_replace() 删除除查询结尾之外的所有内容

    首先 为我糟糕的英语感到抱歉 我有这样的疑问 SELECT t1 SELECT COUNT FROM table a t2 WHERE t1 id t2 id c AND t2 status 1 AS aula FROM table c t
  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希

随机推荐

  • docker私有镜像仓库搭建

    目录 1 拉取registry镜像2 启动registry容器3 编辑daemon json文件4 重新加载docker配置5 访问私库web页面6 推送镜像到registry私库 1 拉取registry镜像 span class tok
  • docker企业级镜像仓库harbor搭建

    目录 1 下载harbor离线安装包2 解压harbor安装包3 编辑harbor配置文件4 编辑docker配置文件5 安装docker compose6 运行安装脚本7 访问harbor网页端8 登录harbor9 推送docker镜像
  • mysql中一张表的user_id替换成对应user_name保存

    在MySQL中将一个表中的user id替换成对应的user name xff0c 需要使用join语句将两个表连接起来 xff0c 然后使用update语句更新表中的数据 具体操作如下 xff1a 假设有两个表 xff1a 表A和表B x
  • Window10系统快捷方式小箭头的去除与恢复

    复制下面的代码 新建一个文本文件 粘贴后另存为 bat文件 xff0c 然后以管理员身份打开就可以去掉桌面上图标的小箭头或恢复桌面上图标的小箭头 去掉小箭头 span class token variable reg span span c
  • SUSE系统设置

    目录 1 防火墙设置2 配置ssh服务3 修改hostname4 配置ip dns 网关5 配置镜像源6 配置apache 服务器7 安装ping命令 1 防火墙设置 span class token variable SUSE11下 xf
  • mysql8.0多实例安装

    目录 1 下载mysql二进制安装包2 解压mysql二进制安装包3 创建mysql用户和用户组4 编辑my cnf文件5 初始化mysql实例6 启动mysql实例7 登录mysql实例 1 下载mysql二进制安装包 mysql8 0
  • oracle12c数据库安装(静默安装)

    目录 前言1 安装前准备工作2 安装数据库软件3 配置监听4 创建数据库 前言 本教程是在Linux下安装oracle12c数据库 xff0c 由于在有些情况下并没有图形化安装界面 xff0c 所以这里介绍在linux下通用的安装方式 xf
  • oracle19c数据库安装(静默安装)

    目录 前言1 安装前准备工作2 安装数据库3 配置监听4 创建数据库 前言 oracle19c数据库安装相对于oracle12c安装还是有些不一样的 xff0c 所以今天再来记录一下安装过程 xff0c 本次安装仍然是基于Oracle li
  • Apollo配置中心搭建

    目录 1 下载安装包和源码包2 创建数据库和表3 启动Apollo服务端4 访问Apollo客户端 1 下载安装包和源码包 下载地址 找到要安装的版本 xff0c 我这里选择的是1 3 0版本 下载好安装包后上传至linux的 usr lo
  • linux下搭建redis集群

    目录 1 准备三台服务器2 配置服务器3 安装redis4 配置集群5 测试集群 1 准备三台服务器 这是准备的三台服务器IP地址如下 xff0c 首先需要执行ping ip地址 xff0c 检查三台服务器之间是否能够相互通信 xff0c
  • linux下搭建redis哨兵

    1 准备三台Linux服务器 span class token variable 准备以下三台服务器 span span class token number 192 168 span span class token number 227
  • linux下安装elasticsearch

    目录 1 准备一台服务器2 下载elasticsearch安装包3 安装elasticsearch 1 准备一台服务器 这里使用的时redhat8 5 红帽新版的系统 xff0c 这里给的内存大小时4G 2 下载elasticsearch安
  • 用命令语句修改mysql某字段长度

    在MySQL中修改某个字段的长度 xff0c 需要使用ALTER TABLE语句 xff0c 具体操作如下 xff1a 假设要修改表A中的字段col1的长度为50 ALTER TABLE A MODIFY col1 VARCHAR 50 以
  • maven打普通包jar包(依赖一并打入)

    1 创建一个maven项目 这里可以看到新创建的maven项目 2 在pom xml添加项目需要的依赖 span class token generics span class token punctuation lt span depen
  • 纯Java项目批处理(打包方法二)

    1 创建一个普通的Java项目 主类 span class token keyword public span span class token keyword class span span class token class name
  • myCat搭建mysql的两主两从读写分离

    目录 前言1 搭建两主两从 xff08 主从复制 xff09 2 测试主从复制效果3 修改myCat配置文件4 启动myCat5 测试效果 前言 这里为了方便快速搭建我是使用docker容器完成的mysql实例 和使用在linux上安装的m
  • Red Hat Enterprise Linux9安装

    目录 前言1 启动iso镜像进入安装首页2 选择语言3 进入安装摘要界面4 选择安装目的地5 禁用KDUMP6 软件选择7 网络和主机名8 设置root用户密码9 开始安装10 重启11 登录系统12 挂载系统iso镜像13 配置本地镜像源
  • epel在线镜像源

    目录 前言阿里云镜像源腾讯镜像源华为镜像源清华大学镜像源中国科技大学镜像源 前言 此epel镜像源适用于红帽系列系统 xff0c 如Red Hat Enterprise CentOS AnoliOS Rocky Linux Almalinu
  • SUSE本地镜像源配置

    SUSE Enterprise Linux 11 12镜像源配置 mount dev sr0 mnt zypper ar file mnt local sles SUSE Enterprise Linux 15镜像源配置 先执行 mount
  • MyCat2搭建mysql主从分离

    前言 此次搭建MyCat2读写分离使用的Linux环境是Debian11 3 xff0c 使用的mysql版本是8 0 16 1 准备三台服务器 准备如下三台Debian服务器 xff0c 而且这三台服务器之间能够相互通信 xff0c 可以