mycat实现读写分离

article/2025/9/9 8:00:05

1、在本地复制多一个数据库(有条件拥有多个服务器的忽略)

1)找到mysql实例文件夹和数据文件夹(通常在C:\Program Files下和C:\ProgramData下)
在这里插入图片描述
在这里插入图片描述
直接都复制一份出来做从库
2)修改从库配置my.ini

[client]
port=3307
[mysqld]
port=3307
basedir="C:/Program Files/MySQL/MySQL Server 5.7-bak"
datadir="C:/Program Files/MySQL/MySQL Server 5.7-bak/Data"
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7-bak/Uploads"

反正就是有之前主库的 MySQL Server 5.7 都要替换为从库 MySQL Server 5.7-bak

然后以管理员身份打开 进入到从库的 bin目录下 输入命令

C:\Program Files\MySQL\MySQL Server 5.7-bak\bin> mysqld-nt install MySQL2  --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7-bak\my.ini"

加入window服务,这样就可以了
启动从库之前,一定要把 data目录下的 auto.cnf 文件删除了,再启动从库,不然从库的server-uuid和主库的server-uuid相同,到时候做主从复制的时候会有问题的,删除后再启动,他会自动生成一个新的auto.cnf 文件,server-uuid也会是新的

2、配置mysql主从同步

1)注意:
主DB server和从DB server数据库的版本一致

主DB server和从DB server数据库数据一致[ 这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录]

主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一
2)主库配置 在my.ini修改:
#开启主从复制,主库的配置
log-bin= mysql3306-bin

#指定主库serverid
server-id=101

#指定同步的数据库,如果不指定则同步全部数据库
binlog-do-db=需要同步的数据库名
#如果需要同步多个数据库配置多个即可
binlog-do-db=需要同步的数据库名1
binlog-do-db=需要同步的数据库名2

3)#授权用户slave01使用123456密码登录主mysql,用于从库访问主库
grant replication slave on . to ‘slave01’@'127.0.0.1’identified by ‘123456’;
flush privileges;
#备注 如果从库不是本机的话,可以使用通配符配置
#192.168.0.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP
#若将 192.168.0.% 改为 %,则任何ip均可作为其从数据库来访问主服务器

4)从库配置 在my.ini修改 就一个
#指定serverid,只要不重复即可

server-id=102

5)打开window的 服务 找到主库和从库的服务,分别重启两个的服务
在这里插入图片描述
6)在主库中执行查询语句
SHOW MASTER STATUS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOaSHMQJ-1639728103883)(https://img-log.csdnimg.cn/a58c3163c0da49c8bf3c532c7447adce.png)]

然后在从库中执行以下sql,master_log_file和master_log_pos分别对应上面在主库查到的两个数据

CHANGE  MASTER TOmaster_host='127.0.0.1',master_user='slave01',master_password='123456',master_port=3306,master_log_file='mysql3306-bin.000023',master_log_pos=484301916;

#启动slave同步
START SLAVE;

启动后查看从库状态 show slave status 显示以下
在这里插入图片描述

3、使用mycat实现读写分离

1)下载mycat https://github.com/MyCATApache/Mycat-Server
解压
进入 conf目录
修改这两个配置文件 schema.xml 和 server.xml ,先备份一下
server.xml (如果只是对应一个数据库,那就写一个分片就可以了)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/"><system><property name="defaultSqlParser">druidparser</property></system><!--以下设置为应用访问帐号权限 --><user name="root"><property name="password">root</property><!--分片名,对应 schema.xml的分片id(通常直接改成需要同步的数据库名也可以)--><property name="schemas">test1,test2</property></user><!--以下设置为应用只读帐号权限 --><user name="user"><property name="password">user</property><property name="schemas">test1,test2</property><property name="readOnly">true</property></user>
</mycat:server>

schema.xml (如果只是对应一个数据库,那就写一个就可以了)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="test1" checkSQLschema="ture" sqlMaxLimit="100" dataNode='dn1'></schema><schema name="test2" checkSQLschema="ture" sqlMaxLimit="100" dataNode='dn2'></schema><dataNode name="dn1" dataHost="dthost1" database="数据库名1"/><dataNode name="dn2" dataHost="dthost2" database="数据库名2"/><dataHost name="dthost1" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="wh1" url="localhost:3306" user="root" password="root">       <readHost host="rh1" url="localhost:3307" user="root" password="root"/></writeHost> </dataHost><dataHost name="dthost2" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="wh2" url="localhost:3306" user="root" password="root">       <readHost host="rh2" url="localhost:3307" user="root" password="root"/></writeHost> </dataHost>
</mycat:schema>

mycat就配置完成了,开启mycat ,使用管理员身份执行
cd到mycat的bin目录下,执行 mycat.bat start 开启,开启成功后,可以使用链接数据库软件链接mycat,和链接mysql是一样的,端口默认是 8066 ,账号密码是 上面server.xml 配置的 root/root 。
然后在项目中的jdbc链接配置中url端口3306改为8066,交给mycatl管理,就可以实现读写分离了,非常的方便。

mycat的schema.xml 和 server.xml 的配置属性说明可以到
https://blog.csdn.net/weixin_41843699/article/details/92029826
这个博客上查看

因为这个是我做完后,根据记忆整理的,可能会有遗漏,如果在做的过程中,有什么问题可以在发一下评论


http://chatgpt.dhexx.cn/article/PxhBZU9J.shtml

相关文章

汉诺塔递归算法(Python编程)

一、问题描述。 汉诺塔是学习计算机递归算法的经典入门案例&#xff0c;是一个数学难题。其问题为如何将所有圆盘从A移动到C&#xff0c;要求一次只能移动一个盘子&#xff0c;盘子只能在3个标杆&#xff08;A/B/C&#xff09;之间移动&#xff0c;更大的盘子不能放在更小的盘子…

汉诺塔递归调用(C语言实现)

预备知识 1.递归算法 递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。 递归过程一般通过函数或子过程来实现。 递归算法的实质&#xff1…

python实现汉诺塔递归算法超详细过程

python实现汉诺塔递归算法 def hanoi(n, x, y, z):if n 1:print(x, -->, z)else:hanoi(n-1, x, z, y)print(x, -->, z)hanoi(n-1, y, x, z)n int(input(请输入层数&#xff1a;)) hanoi(n, x, y, z) if n 1: #如果n等于1时print(x, -->, z) #直接将x移…

多图详解汉诺塔递归实现思路--含实现代码

前言 为了节约大家的时间&#xff0c;本文对汉诺塔的定义就不做赘述了&#xff0c;如果有小伙伴不清楚汉诺塔的规则可以直接点蓝字跳转过去。 本篇博客内容 汉诺塔实现的思路用递归的方式实现汉诺塔 汉诺塔实现的思路 我们先以两个瓷盘为例&#xff1a; 由于小瓷盘1位于顶部&a…

汉诺塔递归算法C++实现

算法介绍 其实算法非常简单&#xff0c;当盘子的个数为n时&#xff0c;移动的次数应等于2^n – 1&#xff08;有兴趣的可以自己证明试试看&#xff09;。后来一位美国学者发现一种出人意料的简单方法&#xff0c;只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型…

汉诺塔递归算法(C语言)

汉诺塔递归算法 一、引言二、解决汉诺塔问题&#xff08;1&#xff09;递归算法 三、C语言实现&#xff08;1&#xff09;代码实现&#xff08;2&#xff09;算法思想 四、结论 一、引言 汉诺塔问题是一个经典的数学谜题&#xff0c;它是在印度流传下来的&#xff0c;传说中有…

汉诺塔递归调用

1.递归算法 递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。 递归过程一般通过函数或子过程来实现。 递归算法的实质&#xff1a;是把问题转…

汉诺塔递归的空间复杂度_算法之美:解读递归算法原理和效率

对于很多人来说,都知道递归,也能看的懂递归,但在实际项目过程中,却不知道如何使用递归,这里给递归做个总结。 递归的定义 在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递和归,这正是递归思想…

汉诺塔递归问题的分析与Python实现

背景 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如图)。游戏的目标&#xff1a;把A杆上的金盘全部移到C杆上&#xff0c;并仍保持原…

汉诺塔递归算法/搬金盘的婆罗门 - Python实现

汉诺塔递归算法/搬金盘的婆罗门 - Python实现 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用…

汉诺塔递归的空间复杂度_学习算法绕不开的~~汉诺塔

大家好,我是老郝。本文就汉诺塔问题向大家阐述递归的思想。 【问题描述】 有三根柱子,最左边的柱子上从大到小放着很多的圆盘,要求把圆盘一个一个的放到最右边的柱子上并且只能小盘子压在大盘子上。(据说古代阿三要他们的和尚把64个圆盘从左到右放一遍,看到最后你就知道阿三…

汉诺塔递归的空间复杂度_【干货】Java算法复杂度

同一问题可用不同算法解决&#xff0c;而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 算法复杂度分为时间复杂度和空间复杂度。其作用&#xff1a; 时间复杂度是度量算法执行的时间长短&#xff1b;而空间复杂度是度量算法所需…

汉诺塔递归问题

汉诺塔问题&#xff1a; 这是一道著名的算法题&#xff0c;也是递归思想的典型体现。 可以总结&#xff0c;当圆盘数为n时&#xff0c;将最下层圆盘和其余上部份所有圆盘看作两个整体&#xff0c;则满足以下步骤&#xff1a; 1、把n-1个圆盘从A经过C移动到B 2、把第n个圆盘从…

汉诺塔递归算法python详细解析图_汉诺塔递归算法的图解(自我总结)

汉诺塔介绍 汉诺塔简单介绍&#xff1a; 有三根相邻的柱子&#xff0c;假定从左到右为A,B,C&#xff0c;A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘&#xff0c;要把所有盘子一个一个移动到柱子B上&#xff0c;并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。…

C#汉诺塔递归算法实现

目录: 一、什么是递归1.先来看一下一个递归的例子2.递归的基本原理 二、汉诺塔问题1.汉诺塔的故事2.回到编程&#xff0c;汉诺塔问题主要就是解决这个问题&#xff1a;3.怎么解决汉诺塔问题要解决汉诺塔问题就要用到递归思想&#xff0c;这里拿四层汉诺塔举例子&#xff1a; 4.…

递归算法 —— Hanoi汉诺塔游戏

前言 博客主页&#xff1a;干脆面la的主页 gitte链接&#xff1a;干脆面la的gitee仓库 刚学习完递归函数接触汉诺塔问题的时候&#xff0c;汉诺塔问题困扰了我很久。博主花了很长时间理解这道题目&#xff0c;因此整理出了用递归解决汉诺塔问题的思路&#xff0c;希望对大家有所…

计算任意位数的黑洞数

黑洞数是指这样的整数&#xff1a; 由这个数字每位数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。 例如3位黑洞数是495&#xff0c;因为954-459495&#xff0c;4位数字是6174&#xff0c;因为7641-14676174。 def max( x ):data[]while x/1!0:kx%10xx//10data.…

蓝桥杯 黑洞数 解题报告

任意一个5位数&#xff0c;比如&#xff1a;34256&#xff0c;把它的各位数字打乱&#xff0c;重新排列&#xff0c;可以得到一个最大的数&#xff1a;65432&#xff0c;一个最小的数23456。求这两个数字的差&#xff0c;得&#xff1a;41976&#xff0c;把这个数字再次重复上述…

黑洞数—python

黑洞数:黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。或者是冰雹原理中的“1”黑洞数 如果有…

6174 黑洞数字

关于6174这个数字的猜想是&#xff1a;从0到9取任意4个不全相同的数字&#xff0c;从大到小排列得到一个4位大数&#xff0c;从小到大排列得到一个4位小数&#xff0c;二者大减小做差&#xff0c;得到一个新的差值&#xff0c;这个值不足4位数补0&#xff0c;重复排列做差的操作…