运维之道 | Mysql主从复制+mycat读写分离

article/2025/9/9 2:22:24

运维之道 | Mysql主从复制 + Mycat读写分离

  • 1、什么是读写分离
    读写分离,基本的原理是让主数据库处理事务性增、删、改操作(INSERT、UPDATE、DROP),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

  • 2、为什么要读写分离
    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性,还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
    因为数据库的“写”(写10000条数据到oracle可能需要几分钟)操作是比较耗时的;
    但是数据库的“读”(从oracle读10000条数据可能需要几秒钟)操作是比较短时的;
    所以读写分离,解决的是数据库的写入,影响了查询的效果。

  • 3、主从复制、读写分离的基本设计
    一台主、多台从,主提供写操作,从提供读操作。
    在这里插入图片描述

一、安装配置JAVA - JDK环境

1、下载JDK安装包

  • 下载Linux环境下的jdk1.8.0_231,请去JAVA官网中下载jdk的安装文件;

在这里插入图片描述

  • 通过wget命令获取java压缩包
[root@localhost java]# wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1574751387_e7715500e2e4d54917604014600ce583

2、对JAVA安装包进行解压

[root@localhost java]# tar -zxvf jdk-8u231-linux-x64.tar.gz

3、修改环境配置

[root@localhost java]# vi /etc/profile
# JAVAJAVA_HOME=/root/java/jdk1.8.0_231
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAME_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
[root@localhost ~]# source /etc/profile    ///重启profile
[root@localhost ~]# javac				   ///测试java环境是否配置成功
用法: javac <options> <source files>
其中, 可能的选项包括:-g                         生成所有调试信息-g:none                    不生成任何调试信息-g:{lines,vars,source}     只生成某些调试信息-nowarn                    不生成任何警告-verbose                   输出有关编译器正在执行的操作的消息-deprecation               输出使用已过时的 API 的源位置......   配置成功!!!
[root@localhost ~]# java -version           ///查看java版本
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

二、安装Mycat(基于java环境)

1、获取Mycat安装包

[root@localhost soft]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

2、解压Mycat安装包

[root@localhost soft]# tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

3、进入到mycat文件的conf子文件夹修改server.xml文件

  • 只需将配置的最后一部分密码修改即可,其他可按需求自行配置;
[root@localhost conf]# vi server.xml
......<user name="user"><property name="password">123456</property><property name="schemas">TESTDB</property><property name="readOnly">true</property></user>
......

4、修改conf文件中的 schema.xml文件

[root@localhost conf]# vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="villian"></schema><dataNode name="villian" dataHost="localhost1" database="school" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"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.146.129:3306" user="root"password="123456"><!-- can have multi read hosts --><readHost host="hostS2" url="192.168.146.130:3306" user="root" password="123456" /></writeHost></dataHost>
</mycat:schema>

注释:
1、第五行的dataNode="villian"需与第七行的dataNode name="villian"对应;
2、第七行的database="school"为数据库读写分离库;
3、第八行的balance="0"需要开启为1,既balance="1"
4、第十二行的writeHost host="hostM1" url="192.168.146.129:3306"为主服务器写入url;
5、第十四行的<readHost host="hostS2" url="192.168.146.130:3306"为从服务器独处的url;

5、启动mycat

[root@localhost bin]# pwd
/root/java/mycat/bin   		  ///在mycat文件夹的bin里启动
[root@localhost bin]# ./mycat start console
Starting Mycat-server...
  • 查看是否启动成功
[root@localhost bin]# ps -ef | grep mycat
root      12159      1  0 16:53 ?        00:00:00 /root/java/mycat/bin/./wrapper-linux-x86-64 /root/java/mycat/conf/wrapper.conf wrapper.syslog.ident=mycat wrapper.pidfile=/root/java/mycat/logs/mycat.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/mycat
root      12161  12159  0 16:53 ? 
[root@localhost bin]# netstat -ntlp      
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name       
tcp6       0      0 :::9066                 :::*                    LISTEN      12161/java              
tcp6       0      0 :::43902                :::*                    LISTEN      12161/java          
tcp6       0      0 :::1984                 :::*                    LISTEN      12161/java          
tcp6       0      0 :::8066                 :::*                    LISTEN      12161/java        

三、搭建部署 Mysql 主从复制

1、准备两台服务器

主库服务器 192.168.146.130 master
从库服务器 192.168.146.129 slave

2、配置 master 主库服务器

a. 开启binlog

vi /etc/my.cnf[myslqd]
server-id=1                         ## 机器的唯一标识 ##
bin-log=mysql-bin                   ## bin-log日志名称 ,开启bin-log ##
binlog-format=ROW		            ## 二进制日志格式 ##
datadir = /data/mysql				## bin-log日志存放地点 ### binlog-do-db=school                ## 同步数据库名称(可不用) ##

b.重启 service mysqld restart

[root@localhost ~]# systemctl restart mysqld

c.进入mysql,查看binlog是否开启成功

[root@localhost ~]# cd /data/mysql
[root@localhost mysql]# ll
-rw-r-----. 1 mysql mysql      178 105 08:34 binlog.000017
-rw-r-----. 1 mysql mysql      178 105 09:17 binlog.000018
-rw-r-----. 1 mysql mysql      178 105 09:49 binlog.000019
-rw-r-----. 1 mysql mysql      155 105 09:49 binlog.000020
-rw-r-----. 1 mysql mysql      320 105 09:49 binlog.index

d.创建用户并授权

[root@localhost mysql]# mysql -u root -p     #登录mysql#
mysql> create user 'villian'@'192.168.146.130' identified by '123456';       ##创建用户##
mysql> grant replication slave on *.* to 'villian'@'192.168.146.130';        ##用户授权##

3、配置 slave 从库服务器

a.开启binlog

vi /etc/my.cnf [myslqd]
server-id=2        							   ## 机器的唯一标识   ##
bin-log=mysql-bin                              ## bin-log日志名称 ,开启bin-log ##
binlog-format=ROW		                       ## 二进制日志格式,跟主服务器一致 ##
log-slave-updates=true                         ## 中继日志执行之后,这些变化是否需要计入自己的binarylog。党你的从服务器需要作为另外一个服务器的主服务器的时候需要开启。就是双主互相备份,或者多主循环备份。#### ( ( server-id机器的唯一标识),后面两步是用来打开slave的relaylog功能的)

b.重启mysql

[root@localhost ~]# systemct restart mysqld

4、建立主从关系

a.打开主库服务器登录mysql (获取File 和 Position)

[root@localhost ~]# mysql -u root -p          ##   登录mysql   ##
mysql> show master status;                    ## 查看master状态 ##
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1356 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

b.打开从库服务器登录mysql

[root@localhost ~]# mysql -u root -p          ## 登录mysql ##
mysql> show slave status\G;                   ## 查看状态  ##状态未开启时进行如下设置:
mysql> change master to master_host='192.168.146.130'; ## 主节点 ##
mysql> change master to master_port=3306;              ## 主节点的端口号 ##
mysql> change master to master_user='villian';         ## 账号 ##
mysql> change master to master_password='123456';      ## 密码 ##
mysql> change master to master_log_file='mysql-bin.000001';  ## show master status 对应上述主库的日志  ##
mysql> change master to master_log_pos=1356;   ## show master status 对应上述主库的pos  ##

c.在从库服务器开启从节点

mysql> start slave;              ## 开启从节点 ##
mysql> show slave status\G;      ## 查看状态 ##下图红色框框必须为开启状态
Slave_IO_Running  :负责与主机的io通信
Slave_SQL_Running :负责自己的slave mysql进程

在这里插入图片描述
其他错误:1.网络不通; 2.密码不对; 3.pos不对; 4.防火墙没关; 5.server-id冲突;6.主库中重新创建用户并授权;
1、若使用克隆虚拟机,必须修改mysql UUID,否则会显示 Slave_IO_Running: NO
2、主从复制实战视频讲解分析
3、master and slave have equal MySQL server ids
4、防火墙
以上都不行,主库中重新创建新用户,并授权,再重新配置一次信息即可


四、搭建部署 mycat 读写分离

1、通过主库登录mycat管理窗口

  • -h 192.168.146.130为本机IP
  • -P8066为mycat数据端口,-P9066为mycat数据端口
  • TESTDB是配置中间件mycat中设置的
[root@localhost mysql]# /usr/local/mysql/bin/mysql -uroot -p -h 192.168.146.130 -P8066
mysql> 
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.01 sec)

2、查看读写配置信息

mysql> show @@datasource;
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST            | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| villian  | hostM1 | mysql | 192.168.146.129 | 3306 | W    |      0 |    8 | 1000 |    1194 |         0 |          0 |
| villian  | hostS2 | mysql | 192.168.146.130 | 3306 | R    |      0 |    0 | 1000 |       0 |         0 |          0 |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.01 sec)

3、查看心跳信息

mysql> show @@heartbeat;
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME   | TYPE  | HOST            | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.146.129 | 3306 |       1 |     0 | idle   |       0 | 1,1,1        | 2019-11-26 20:07:39 | false |
| hostS2 | mysql | 192.168.146.130 | 3306 |      -1 |     0 | idle   |       0 | 0,0,0        | 2019-11-26 20:07:39 | false |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.00 sec)

4、读写分离测试

  • 修改mycat日志
[root@localhost conf]# pwd
/root/java/mycat/conf
[root@localhost conf]# vi log4j2.xml 
  • info改为debug

在这里插入图片描述
在这里插入图片描述

  • 进入到mycat安装目录的bin目录下重启mycat中间件
[root@localhost mycat]# ls
bin  catlet  conf  lib  logs  version.txt
[root@localhost mycat]# cd bin
[root@localhost bin]# ./mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
  • 在主库中查看数据
    在这里插入图片描述

  • 在mycat的日志文件中可查看记录tail -f wrapper.log

[root@localhost logs]# pwd
/root/java/mycat/logs
[root@localhost logs]# ls
2019-11  mycat.log  mycat.pid  wrapper.log
[root@localhost logs]# tail -f wrapper.log            ///查看日志命令

在这里插入图片描述



mysql读写分离概念介绍
mysql读写分离视频教程
在这里插入图片描述


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

相关文章

生产上遇到的一例mycat读写分离延时问题

问题描述 场景是这样的&#xff0c;我们的支付系统在一笔支付完成后&#xff0c;需要发出通知给到商户。支付完成的消息通过消息队列发送给通知的服务。通知服务的有一部分处理逻辑是这样的&#xff1a; notifyPersist.saveNotifyRecord(notifyRecord);notifyRecord rpNotify…

MySQL数据库mycat读写分离

mycat读写分离 Mycat的读写分离是建立在Mysq的主从复制的基础上的 修改配置文件 schema.xml <?xml version"1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat"http://io.mycat/"><schem…

MySQL主从配置与Mycat读写分离

MySQL主从配置与Mycat读写分离 一、主数据库配置 编辑配置文件 添加如下内容 server-id1 binlog-do-dbmaster_db1 #备份的数据库 log-binmysql-bin binlog-ignore-dbmysql重启mysql 创建一个允许从服务器来访问的用户(主服务器)&#xff1a; grant replication slave on *.* …

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…