mysql优化---如何搭建mysql的主从关系和mycat中间件

article/2025/10/6 5:59:23

1. 如何搭建mysql的主从关系

解决mysql高并发的瓶颈。

1.1 复制概述

复制是指将主数据库的DDL 和 DML 操作通过==二进制日志==传到从库服务器中,然后在从库上对这些==日志重新执行==(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

1.2 复制原理

MySQL 的主从复制原理如下。

从上层来看,复制分成三步:

  • Master 主库在事务提交时,会把数据变更作为事件Events 记录在二进制日志文件 Binlog 中。

  • 主库推送二进制日志文件 Binlog 中的日志事件到从库的中继日志 Relay Log 。

  • slave重做中继日志中的事件,将改变反映它自己的数据。

1.3 复制优势

MySQL 复制的优点主要包含以下三个方面:

  • 主库出现问题,可以快速切换到从库提供服务。

  • 可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。

  • 可以在从库中执行备份,以避免备份期间影响主库的服务。

==mysql需要允许远程连接==

1.4 搭建步骤

1.4.1 master

1) 在master 的配置文件(/etc/my.cnf)中,配置如下内容:vi /etc/my.cnf  ---打开文件

#mysql 服务ID,保证整个集群环境中唯一
server-id=1#mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin#错误日志,默认已经开启
#log-err#mysql的安装目录
#basedir#mysql的临时目录
#tmpdir#mysql的数据存放目录
#datadir#是否只读,1 代表只读, 0 代表读写
read-only=0#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql#指定同步的数据库
#binlog-do-db=db01

 2) 执行完毕之后,需要重启Mysql:

systemctl restart mysqld

3) 创建同步数据的账户,并且进行授权操作:

设置远程访问。--- 若已经设置过则可忽略此步

grant replication slave on *.* to 'root'@'192.168.192.131' identified by 'root';	flush privileges

4) 查看master状态:mysql -uroot -proot进入mysql

show master status;

建议先截图留下,从节点的配置需要使用 

 字段含义:

File : 从哪个日志文件开始推送日志文件 给从节点
Position : 从哪个位置开始推送日志  从什么位置开始同步
Binlog_Ignore_DB : 指定不需要同步的数据库

1.4.2 slave---从节点搭建

1) 在 slave 端配置文件中,配置如下内容:

vi /etc/my.cnf ---开启文件

#mysql服务端ID,唯一
server-id=2#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin

 

2) 执行完毕之后,需要重启Mysql:  

systemctl restart mysqld

3) 执行如下指令 :

mysql -uroot -proot 进入mysql然后输入以下命令

change master to master_host= '192.168.135.156', master_user='root', master_password='root', master_log_file='mysqlbin.000001', master_log_pos=154;

 指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。

4) 开启同步操作

start slave;

show slave status;
show slave status\G;  ----竖着查看

  如果你的从节点虚拟机是克隆的主节点的,那么你需要修改一些配置,具体操作请参考以下链接

http://t.csdn.cn/kxXwA

配置完停止同步(stop slave)操作并从第三步重新配置

配置成功后可以去主节点创建数据库并添加一些数据,查看从节点是否也自动创建并添加了相同的数据库和数据 

5) 停止同步操作

stop slave;

2.MyCat的安装

1、 将压缩包上传到Linux指定的目录下并且解压

我们这里放在/usr/local 路径下

 版本使用的是1.6.7.4稳定版

解压命令:

tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

 

2、修改配置文件

2.1 主要是修改如下3个配置文件

①schema.xml:定义逻辑库,表、分片节点等内容

②rule.xml:定义分片规则

③server.xml:定义用户以及系统相关变量,如端口等

 2.2  修改schema.xml  

修改用户信息,与MySQL区分,如下:

配置好的信息,按自己的需要修改相关信息 

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><!-- 配置逻辑库 name:表示逻辑库的名称 sqlMaxLimit:sql最大连接数 dataNode:管理的节点名称 --><schema name="testdb" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1"></schema><!-- dataNode:表示自定义数据节点的标签 name:节点名称 dataHost:数据的主机名称 database:表示真实数据库的名称 --><dataNode name="dn1" dataHost="localhost1" database="xxx" /><!-- 定义真实服务所在的地址 name:表示名称 --><dataHost name="localhost1" maxCon="1000" minCon="0" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><!-- 按照心跳机制来判断真实的数据库是否正常运行 --><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hostM1" url="192.168.135.156:3306" user="root"password="root"><readHost host="hostS1" url="192.168.135.160:3306" user="root"password="root"></readHost></writeHost></dataHost></mycat:schema>

这里我配置了一个写主机(192.168.135.156)和一个读主机(192.168.135.160),实现读写分离

这里的testdb是我们mysql中的数据库名称

主要分schema、dataNode、dataHost三个主要配置.  

 2.3 修改配置文件server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/"><user name="mycat"><property name="password">root</property><property name="schemas">testdb</property></user></mycat:server>

 其中mycat、user为访问mycat的用户,testdb为mycat虚拟的数据库,供上层应用访问。

3、 验证数据库访问情况

Mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况。mysql -udhapp -pxxxxxx -h 192.168.56.20 -P 3306mysql -udhapp -pxxxxxx -h 192.168.56.21 -P 3306

#如远程访问报错,请建对应用户

grant all privileges on . to root@'%' identified by '123123'

4、 启动程序

1、 控制台启动 :去 mycat/bin 目录下执行 ./mycat console

2 、后台启动 :去 mycat/bin 目录下 ./mycat start

为了能第一时间看到启动日志,方便定位问题,我们选择1控制台启动。

 出现successfully表示启动成功

5、登录

1、登录后台管理窗口

​ 此登录方式用于管理维护 Mycat​ mysql -umycat -pxxxxxx -P 8066 -h 192.168.56.20

--- Mycat​ mysql -umycat -p密码 -P 8066 -h ip     --------(默认mycat端口号为8066)

 接下来就可以通过springboot项目来通过mycat访问相关数据库了,在使用idea测试前记得放行8066端口号或关闭防火墙


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

相关文章

什么是中间件

一、什么是中间件 中间件&#xff08;Middleware&#xff09;是处于操作系统和应用程序之间的软件&#xff0c;也有人认为它应该属于操作系统中的一部分。人们在使用中间件时&#xff0c;往往是一组中间件集成在一起&#xff0c;构成一个平台&#xff08;包括开发平台和运行平…

mysql的中间件比较

mysql分布式数据库中间件对比 目前数据库中间件有很多&#xff0c;基本这些中间件在下都有了解和使用&#xff0c;各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列&#xff0c;希望可以对大家有帮助。 1. 什么是中间件 传统的架构模式就是 应用连…

MySQL 中间件汇总比较

360 Atlas 较为活跃&#xff0c;Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上&#xff0c;对其进行了优化&#xff0c;增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务&#xff0c;每…

MySQL-中间件mycat(一)

目录 &#x1f341;mycat基础概念 &#x1f341;Mycat安装部署 &#x1f343;初始环境 &#x1f343;测试环境 &#x1f343;下载安装 &#x1f343;修改配置文件 &#x1f343;启动mycat &#x1f343;测试连接 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f9…

MySQL 分表方案及中间件介绍

背景 什么情况下需要分表&#xff1f;这里归纳了3点&#xff1a; (1)某个表被操作的频率过于频繁的时候&#xff08;可以查看某个表的访问频繁&#xff09;&#xff0c;在流量越来越大的时&#xff0c;可以考虑分表。 (2)某个表的数据量过于庞大的时候&#xff08;我给自己设…

中间件之MYSQL

体系结构 server层 负责建立连接、分析和执行 SQL 连接器&#xff1a;与客户端进行TCP三次握手&#xff1b;校验用户名和密码&#xff1b;读取权限。查询缓存&#xff1a;key-value缓存在mysql8.0后默认将其关闭&#xff1b;高级版本默认采用页缓存。解析器&#xff1a;词法…

mysql优化——mycat数据库中间件

文章目录 目录 文章目录 前言 一、mycat原理 二、mycat完成读写分离 2.1搭建MySQL的主从模式 2.2实现读写分离 三、mycat垂直分库 四、水平分表 五、水平拆分表的连表操作 六、全局表 总结 前言 Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以…

mysql中间件汇总

一、写在前面 mysql作为互联网公司都会用到的数据库&#xff0c;在使用过程中。会用主从复制来提高性能。会用分库分表解决写入问题。以下介绍mysql中间件的一些实现方案 二、Atlas Atlas时 360 公司开发维护的一个基于MySQL协议的数据中间层项目。 2.1 atlas架构 Atlas是一…

makfile的编译选项:CFLAGS、CPPFLAGS、LDFLAGS、LIBS

1、LDFLAGS & LIBS 关于makefile的依赖规则以及目标生成的步骤&#xff0c;这篇先不介绍&#xff0c;这里主要关注我在看makefile时遇到的一堆CFLAGS与LDFLAGS定义进行说明。 费了牛劲&#xff0c;才查到GNUmake中文手册中关于CFLAGS与LDFLAGS的说明&#xff0c;他们都是…

Makefile 编译与链接选项及CFLAGS与LDFLAGS说明

CFLAGS与LDFLAGS的说明&#xff0c;他们都是是隐含规则的变量&#xff0c;且是一种命令参数变量&#xff0e; makefile内嵌隐含规则的命令中&#xff0c;所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。这些变量允许对它进行修改&#xff1a;在Makefile中、通…

Go新项目-项目添加版本说明,以及参数传递:ldflags、gcflags,外加stripped说明(5)

在Go项目中&#xff0c;会存在展示该项目的版本信息&#xff0c;以及打包日期&#xff0c;项目版本&#xff0c;Go版本等&#xff1b;继Go新项目-编译项目的细节&#xff08;4&#xff09;以后再记录下编译优化方向&#xff0c;刚好也有项目版本输出的需求。 关键词&#xff1…

linux编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解

参考到下面博客&#xff0c;把编译步骤分解的很细 linuxC编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解 - yongfengnice - 博客园 CPPFLAGS : 预处理器需要的选项 如&#xff1a;-I (大写i指定头文件路径) CFLAGS&#xff1a;编译的时候使用的参数 –Wall –g -c LDFLAGS &…

【Java位运算】异或运算的使用

异或运算有个特性&#xff1a;两个相同的数做异或运算&#xff0c;结果为0。 n ^ n 0;常用的方式是查找数组中只出现一次的数字。 例如&#xff1a;在一个数组中&#xff0c;只有一个数字出现了一次&#xff0c;其余数字都出现了两次。 求这个数字。利用异或运算的特性进行计…

java中与运算,或运算,异或运算

Java的位运算符详解实例——与&#xff08;&&#xff09;、非&#xff08;~&#xff09;、或&#xff08;|&#xff09;、异或&#xff08;^&#xff09; 位运算符主要针对二进制&#xff0c;它包括了&#xff1a;“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻…

Java中的与、或、非以及异或( | ~ ^)运算符的运算原理

首先&#xff0c;我们要知道Java存储数据是保存的补码&#xff0c;如果对原码、反码以及补码不太懂&#xff0c;可以参考我的另一篇博客。 1. Java的 与( & ) 运算 所有的逻辑运算都是按位计算的&#xff0c;所以第一步就是先把数据转成二进制&#xff0c;然后相应位进行…

java运算符 与()、非(~)、或(|)、异或(^)

欢迎大家关注我的公众号【老周聊架构】&#xff0c;Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 位运算符主要针对二进制&#xff0c;它包括了&#xff1a;“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符&…

java中的异或非运算

一、java 与或非 操作 与&#xff08;&&#xff09;、非&#xff08;~&#xff09;、或&#xff08;|&#xff09;、异或&#xff08;^&#xff09; 1&#xff0e;与运算符 与运算符用符号“&”表示&#xff0c;其使用规律如下&#xff1a; 两个操作数中位都为1&#x…

java运算符异或(^)的用法

Java中的位运算符中有一个叫做异或的运算符&#xff0c;符号为&#xff08;^&#xff09;,其主要是对两个操作数进行位的异或运算&#xff0c;相同取0&#xff0c;相反取1。即两操作数相同时&#xff0c;互相抵消。 试例&#xff1a;13 与15 两个整数的异或 public static void…

一文搞懂 位运算 异或(Java实现)

提起异或想必很多小伙伴们既熟悉又陌生&#xff0c;熟悉是因为好像在离散数学或者学某个编程语言 时听过这个东西&#xff0c;而陌生呢&#xff0c;则是因为自己平时并没有用过&#xff0c;以至于当在某个场景 &#xff08;我猜是在看 题解或者某篇博客时&#xff09; 看到这…

java中异或运算的应用

java中异或运算(^)的应用 异或运算法则 1. a ^ b b ^ a   2. a ^ b ^ c a ^ (b ^ c) (a ^ b) ^ c;   3. d a ^ b ^ c 可以推出 a d ^ b ^ c.   4. a ^ b ^ a b. 异或运算 1、异或是一个数学运算符。应用于逻辑运算。   2、例如&#xff1a;真异或假的结果是…