MySQL主从配置与Mycat读写分离

article/2025/9/9 2:33:26

MySQL主从配置与Mycat读写分离

一、主数据库配置

  1. 编辑配置文件

    添加如下内容

    server-id=1
    binlog-do-db=master_db1 #备份的数据库
    log-bin=mysql-bin
    binlog-ignore-db=mysql
    

    image-20200523133136523

  2. 重启mysql

  3. 创建一个允许从服务器来访问的用户(主服务器):

    grant replication slave on *.* to 'root'@'%' identified by '123456';GRANT FILE ON *.* TO 'root'@'%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;
    

    grant replication slave on . to ‘root’@’%’ identified by ‘123456’;

    说明:

    • root:Slave使用的账号

    • IDENTIFIED BY 123456:Slave使用的密码

    • %:Slave数据库IP

  4. 查看配置的信息

    show master status \G;
    

    如图:

    image-20200522155203831

    记住 File和Position的值,后面会用到

二、从数据库配置

  1. 编辑配置文件my.cnf,在[mysqld]下面添加这段内容
log-bin=mysql-bin
server-id=2
# 忽略日志的db
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
# 需要备份的db
replicate-do-db=master_db1
# 忽略备份的db
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
  1. 关联Master信息
stop slave;CHANGE MASTER TO MASTER_HOST='192.168.1.20',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_CONNECT_RETRY=60,MASTER_LOG_POS=154;start slave;

这里的MASTER_LOG_POS=154的154就是配置主服务器的时候说要记住的那个,

MASTER_LOG_FILE的值就是之前的Position的值

  1. 查看状态
show slave status \G;

image-20200522170042277

只有Slave_IO_Running与Slave_SQL_Running都为Yes才配置成功。

三、主从复制测试

  1. 在从服务器中创建数据库master_db1

image-20200523131328951

  1. 在主MySQL服务器创建test表,测试结果是从MySQL的服务器会自动复制主MySQL服务器的test表。
  2. 添加500w条数据进行测试,可以使用jdbc插入,也可以使用dataFactory。(可以先手动插入一条数据查看效果)image-20200603111431707

image-20200603111537557

四、启用Mycat读写分离

主机名IP和端口操作引擎
主MySQL服务器master192.168.1.20:3306InnoDB
从MySQL服务器node-1192.168.1.21:3306MyISAM
  1. 修改从数据库的表

    将表的引擎改为MyISAM

    image-20200523135553033

  2. 配置mycat读写分离

编辑schema.xml文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/"><schema name="zdxh" checkSQLschema="false" sqlMaxLimit="100"><!-- 测试读写分离 --><table name="test" primaryKey="ID" dataNode="dn4" /></schema><!-- 测试读写分离 --><dataNode name="dn4" dataHost="local-master-rw" database="master_db1" /><!-- 测试读写分离 --><dataHost name="local-master-rw" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- 写入配置--><writeHost host="hostM4" url="192.168.1.20:3306" user="root" password="123456"><!-- 添加只读库配置--><readHost host="hostS1" url="192.168.1.21:3306" user="root" password="123456" /></writeHost></dataHost></mycat:schema>

image-20200523145846248

五、Mycat读写分离测试

测试分为启用读写分离测试和不启用读写分离的情况赖测试

启用读写分离的查询

配置schema.xml

image-20200603092525583

在mycat中查询

count关键字查询

select count(id) from test;

image-20200603093857376

like关键字查询

select * from test where name like '%alanlee%';

image-20200603094541570

=查询

select * from test where name = 'alanlee';

image-20200603094709481

insert

insert into test(name) values('libuguan');

image-20200603095335013

update

update test set name = 'libuguan-007' where name = 'libuguan';

image-20200603095728778

delete

delete from test where name = 'libuguan-007';

image-20200603100214050

不启用读写分离的查询

配置schema.xml

image-20200529152232726

在mycat中查询

count关键字查询

select count(*) from test;

image-20200529151832264

like关键字查询

select * from test where name like '%alanlee%';

image-20200529153145449

=查询

select * from test where name = 'alanlee';

image-20200529153440308

insert

insert into test(name) values('libuguan-01');

image-20200603104934708

update

update test set name = 'libuguan-02' where name = 'libuguan-01';

image-20200603105102926

delete

delete from test where name = 'libuguan-02';

image-20200603105351203

统计

Sql语句启用读写分离机制(读库使用MyISAM)取消读写分离机制(读使用的是Innodb)
count0.00秒1.68秒
like2.36秒3.01秒
=0.92秒1.30秒
insert0.11秒0.05秒
update3.27秒3.02秒
delete2.93秒3.31秒

image-20200603110848207

总结

**启用mycat读写分离,查询操作的速度比不启用读写分离快很多。**原因是查询时使用的是MyISAM引擎。而插入、更新、删除的操作基本上没有变化,因为执行这3个操作时都是使用的InnoDB引擎。

六、遇到的问题

问题1

[ERROR] unknown variable ‘master-host=192.168.1.20’

image-20200522162243354

原因

MySQL5.6和之后的版本没有master-host参数了

解决

解决方案:

  1. 在my.cnf文件的[mysqld]下面添加以下配置
log-bin=mysql-bin
server-id=2
# 忽略日志的db
binlog-ignore-db=information_schema
binlog-ignore-db=cluster
binlog-ignore-db=mysql
# 需要备份的db
replicate-do-db=master_db
# 忽略备份的db
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

image-20200522165424009

  1. 重启mysql

  2. 命令行输入

CHANGE MASTER TO MASTER_HOST='192.168.1.20',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_CONNECT_RETRY=60,MASTER_LOG_POS=154;

需根据自己的机子修改参数值

  • MASTER_HOST
  • MASTER_LOG_FILE
  • MASTER_LOG_POS

image-20200522164835461

问题2

配置好了主从服务器之后,主服务器创建表后,从服务器不会复制

原因

没有赋予Slave机器有File权限,没有刷新权限。

解决

在主MySQL服务器中命令行执行

# 赋予Slave机器有File权限
GRANT FILE ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
# 刷新权限
FLUSH PRIVILEGES;

重启主MySQL服务器

还要检查其他的配置是否准确,例如MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS的参数值等等。


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

相关文章

mycat读写分离实验

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 首先搭建mysql主从环境&#xff0c;及mycat安装 配置mycat的schema.xml文件 <?xml version"1.0"?> <!DOCTYPE mycat…

MyCAT读写分离分库分表

MyCAT读写分离及分库分表 第1章 MyCAT分布式系统解决方案 1.1 分布式系统介绍: 分布式系统特性: 1. 透明性: a) 分布式系统对用户来说是透明的,一个分布式系统在用户面前的表现就像一个传统的单机处理机分时系统,可以让用户不比了解内部结构就可以使用 2. 扩展性: a) 分…

MYCAT读写分离,分库分表

一、读写分离 我这里的环境是mha&#xff08;双主双从&#xff09;mycat ip主机名 硬盘/G 内存/Gcpu/块192.168.86.10master012022192.168.86.20master022022192.168.86.30slave012022192.168.86.40slave022022192.168.86.100manager2022192.168.86.200mycat2022 https://bl…

mycat读写分离测试

网上的&#xff1a; MyCAT的读写分离机制如下&#xff1a; 1)事务内的SQL&#xff0c;全部走写节点&#xff0c;除非某个select语句以注释/*balance*/开头 2)自动提交的select语句会走读节点&#xff0c;并在所有可用读节点中间随机负载均衡 3)当某个主节点宕机&#xff0c…

MyCat读写分离

一、MyCat读写分离 数据库读写分离对于大型系统或者访问量很高的互联网应用来说&#xff0c;是必不可少的一个重要功能。对于MySQL来说&#xff0c;标准的读写分离是主从模式&#xff0c;一个写节点Master后面跟着多个读节点&#xff0c;读节点的数量取决于系统的压力&#xff…

MySQL-Mycat读写分离

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MySQL-Mycat读写分离 一、读写分离1.什么是读写分离2.读写分离的好处 Mycat是什么&#xff1f;架构 部署环境部署mycat补充 启动mycat启动报错 测试客户端连接报错 总结原理及…

读写分离时mycat不能链接mysql_Mycat读写分离配置实践

Mycat读写分离配置实践 发布时间&#xff1a;2020-08-16 01:08:20 来源&#xff1a;ITPUB博客 阅读&#xff1a;81 作者&#xff1a;jeanron100 工作这些年来&#xff0c;也去了一些地方&#xff0c;有了一些见闻&#xff0c;隐隐感觉很多文化和猫有着千丝万缕的联系。就拿IT行…

Mycat读写分离的简单实现

文章目录 1、Mycat读写分离的配置1.1、Mycat是什么1.2、Mycat能干什么1.2.1、数据库的读写分离1.2.1.1、数据库读写分离图解 1.2.2、数据库分库分表1.2.2.1、水平拆分&#xff08;分库&#xff09;1.2.2.2、垂直拆分&#xff08;分表&#xff09; 1.3、Mycat的搭建1.3.1、前期准…

mycat读写分离配置

为什么使用MyCat 如今随着互联网的发展&#xff0c;数据的量级也是撑指数的增长&#xff0c;从GB到TB到PB。对数据的各种操作也是愈加的困难&#xff0c;传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数…

实现mycat读写分离

前言 众所周知&#xff0c;随着用户量的增多&#xff0c;数据库操作往往会成为一个系统的瓶颈所在&#xff0c;而且一般的系统“读”的压力远远大于“写”&#xff0c;因此我们可以通过实现数据库的读写分离来提高系统的性能。 基础知识 要实现读写分离&#xff0c;就要解决主…

Mycat 读写分离实战

Mycat读写分离实战 一、主从复制搭建 1.实验环境 搭建一主一从的部署架构&#xff0c;master&#xff08;主库&#xff09;运行在阿里云服务器 47.108.136.201&#xff0c;slave&#xff08;从库&#xff09;运行在 IP 地址为 12.168.149.128 的Ubuntu虚拟机中两台机器均安装…

mycat-读写分离

简介&#xff1a; 主从复制的工作机制&#xff1a; ① Master将改变记录到二进制日志&#xff08;binary log&#xff09;中&#xff0c;这些记录叫做二进制日志事件&#xff08;binary log events&#xff09;&#xff1b; ② Slave将master的binary log events拷贝到它的中继…

使用mycat进行读写分离

目录 一、读写分离 1.1、什么是读写分离 1.2、为什么要用读写分离 1.3、使用mycat读写分离 1.3.1安装mycat 1.3.2、配置mycat 简单的理解&#xff0c;mycat就是一个数据中间件&#xff0c;可以让开发人员直接访问mycat&#xff0c;然后由mycat去访问具体的数据库服务器&a…

数据库:mycat实现读写分离

目录 一、mycat 1、mycat实现读写分离原理 2、mycat应用场景 3、mycat作用 4、mycat实现读写分离实战 一、mycat 1、mycat实现读写分离原理 ①用户进行读操作则由mycat转给配置的从数据库。 ②用户进行写操作则由mycat转给配置的主数据库。 ③转发规则由mycat配置文件中…

mycat实现读写分离

1、在本地复制多一个数据库&#xff08;有条件拥有多个服务器的忽略&#xff09; 1&#xff09;找到mysql实例文件夹和数据文件夹&#xff08;通常在C:\Program Files下和C:\ProgramData下&#xff09; 直接都复制一份出来做从库 2&#xff09;修改从库配置my.ini [client]…

汉诺塔递归算法(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;只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型…