MySQL 读写分离配置实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL 读写分离配置实践

MySQL 读写分离配置实践

一、环境准备

master(虚拟机centos7,NAT模式,固定ip):192.168.131.129

slave(win10,路由器局域网,DHCP协议):192.168.31.27

  1. 由于MyCat是用Java写的,需要JDK1.7版本以上
  2. MySQL的root账户有远程访问权限

1. 查看主从复制状态

读写分离基于主从复制,查看主从复制状态

image.png

2. 查看JDK版本


java -version

image.png

3. 打开root的远程连接权限

image.png

一般MySQL Server和代理中间件是不在一台机器上的,涉及数据库的远程访问和连接

我们可以拿root进行连接,也可以创建新的用户进行连接

root用户默认是localhost,只能本地连接,不支持远程连接,所以需要root远程连接的权限打开。%表示允许任意地址连接,如果缩小权限,写成MyCat所在机器的ip地址就可以,用root连接MySQL服务器


mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye


[root@localhost Downloads]# service mysqld restart          # 若服务不存在,可尝试使用service mysql restart
Redirecting to /bin/systemctl restart mysqld.service

我们的MyCat和主库跑在同一台Linux上

4. 安装MyCat

安装lrzsz,用于windows和Linux传输文件(xftp也行)

image.png

rz命令将MyCat包传输到Linux

image.png

Linux上的文件上传到Windows:sz+文件路径

解压MyCat包放到合适的目录下,可以放到/usr/local

image.png

mycat/bin:放的是可执行文件

image.png

mycat/conf:放的MyCat的配置文件

image.png

mycat/logs:放的MyCat的日志文件

image.png

  • wrapper.log:记录启动过程中遇到的错误
  • mycat.log:记录运行过程中遇到的错误

由于我们是直接解压的,没有安装,为了不用手动指定mycat的路径,我们 在/usr/bin下建立软连接,连接用户目录下的mycat和我们解压路径下的mycat

image.png

这样就不用指定路径,直接使用mycat

image.png

二、配置文件

配置文件在mycat/conf

1. server.xml

用于配置client登录Mycat的账号密码,还可以配置白名单黑名单,限制客户的连接等

用户配置

image.png

不需要和MySQL的账号密码一样,因为我们的MySQL Client直接访问的是MyCat,再由MyCat登录MySQL Server,这里设置的用户、密码都是用来登录MyCat的

USERDB是给客户端操作的逻辑库,由于MySQL Client访问的是MyCat,在MyCat上直接操作USERDB这个库即可,这个库其实是不存在的,这个库最终会映射到MySQL Server真实的MySQL库表上

这个逻辑库看起来好像在MyCat一台机器上,实际上经过分库分表操作可能分配在不同的机器上,我们只需要操作这个逻辑库就可以,其他的不用关心。多个逻辑库的话,在标签schemas中间,用逗号分隔开即可

防火墙配置

image.png

2. schema.xml

schema.xml用于配置逻辑库和数据源、读写分离、分库分表信息等

schema.xml配置以下三点:

  • 逻辑库和逻辑表:MySQL Client都是操作的MyCat上的逻辑库(schema)和逻辑表
  • 数据节点:这个库或者表的内容放在哪个节点(dataNode)上,这个节点对应具体的物理机器叫dataHost

逻辑库、数据节点以及数据库主机名称都可以随便取,但以下地方需要保持相同

image.png

image.png

  • maxCon、minCon:MyCat内置连接池的最大、最小连接量
  • balance
    0:不开启读写分离
    1:全部的readHost和stand by writeHost参与读操作的负载 ,比如2套1主2从,M1叫做writeHost,S1、S2、S3、S4 叫做readHost,M2叫做stand by writeHost
    2:所有读操作随机在readHost和writeHost上分发(少用)
    3:所有读请求随机分发到writeHost对应的readHost上执行(最常使用,所有的select操作都在slave上执行,master库只做写操作)
  • writeType=0: 表示所有写操作发送到配置的第一个writeHost,第一个挂掉切换到还在的第二个 writeHost
  • switchType(切换的类型,当一个master挂了,切换到另一个master上):
    -1:不自动切换
    1:根据心跳select user()自动切换
    2:基于MySQL的主从同步状态决定是否进行切换,即MyCat发送show slave status给MySQL Server
  • writeHost、readHost:配置写服务器(master)和读服务器(slave),readHost标签在writeHost内,表示读服务器是slave,图中黄色框中是配置了一个一主一从,嵌套多个readHost标签就是配置一主多从。图中并列的writeHost标签表示备份的写库,当master宕机后,slave也将无法和master配合工作,会切换到备份的写库继续工作。其实图中配置的是多主多从
  • heartbeat:MyCat定时发送指定语句给MySQL Server,如果能正常返回数据,则表示正常工作;若不能正常返回数据,则表示机器故障,MyCat需要进行容灾切换

如果slave有问题,master是正常,就会在master上做读和写操作

如果master有问题,slave是正常,此时slave是没法单独使用的,它会在多主多从的配置中找下一套主从配置来使用

如果主从都正常,master做写操作,slave做读操作

三、启动服务

查看配置文件mycat/conf/schema.xml

image.png


启动MyCat服务

image.png

查看端口

image.png

这表示mycat正常监听8066和9066端口

1. 配置文件问题一

mycat/schema.xml中备份的主库没有结束标签

image.png

配置好后,我们重启mycat程序

image.png

查看mycat/logs/wrapper.log,记录了mycat启动过程中的错误

image.png

2. 配置文件问题二

mycat/schema.xml中读库的端口出错

image.png

配置好后,我们重启mycat程序

image.png

查看mycat/logs/wrapper.log,记录了mycat启动过程中的错误

image.png

我们看到心跳不成功了,就应该判断是网络原因,或者是ip:port配置原因,于是我们看到了3309端口,就知道是配置的端口错误

四、MyCat 9066端口和8066端口

我们开启MyCat后台服务

image.png

1. 9066管理端口

在Linux Shell下登录MyCat的9066端口(使用mycat/conf/server.xml中配置的登录用户名和密码登录)

登录MyCat后也是进入了一个MySQL Shell,monitor表示状态监控

image.png

show @@help显示mycat支持的命令

image.png

查看逻辑库:show @@database

image.png

查看逻辑节点和真实库的映射关系show @@datanode

image.png

查看数据源show @@datasource

image.png

M2是我们配置的备用的第二套写库,这种情况下,还要配置M2为M1的从,需要同步数据

2. 8066数据端口

在Linux Shell下登录mycat的8066端口(使用mycat/conf/server.xml中配置的登录用户名和密码登录)

OpenCloundDB表示我们看到的是一个云状数据库,云后面是如何提供的库表的服务能力,我们是不知道的。mycat就是云DB,把后端所有的细节给客户端隐藏了,客户端只需要去处理代理服务器上的DB就可以了。可以看作一个反向代理服务器

image.png

查看数据库

image.png

这个逻辑库USERDB对应的就是真实库mytest

image.png

五、验证读写分离

查看查询日志general_log,这个日志记录了MySQL Server收到的所有SQL语句

1. 打开查询日志general_log

打开windows从库上的general_log

image.png

在Linux下的MySQL Server中也打开一下查询日志

image.png

2. 验证读操作在slave

我们现在登录MyCat 8066数据端口,查询user表

image.png

在Linux下的master服务器查看general_log,我们只看见了mycat发送的心跳包,并没有看见查询user表的SQL

image.png

在windows下的slave服务器中查看general_log,看到了mycat发送的查询user表的SQL

image.png

没有问题,现在读操作是正确发送给了slave

3. 验证写操作在master

我们现在登录MyCat 8066数据端口,给user表insert一条数据

image.png

在Linux下的master服务器查看general_log,我们看见了insert数据的SQL

image.png

在windows下的slave服务器中查看general_log,没有发现insert数据的SQL

image.png

没有问题,写操作正确发送给了master

4. 验证容灾功能

我们在mycat/conf/schema.xml中配置的是多住多从,M1挂了,读写操作会全部转发到M2

在我们当前环境中,就是Linux上的MySQL Server挂了,所有的读写操作都会转发给Windows上的MySQL Server

image.png

关闭Linux的mysqld服务,相当于关闭了master

image.png

我们现在登录MyCat 8066数据端口,对user表分别读写操作

image.png

查看我们多主多从中备用系统的general_log,即Windows上的MySQL Server的general_log

image.png

可以看见,由于master挂了,读写操作都被转发到了备用的Windows上的MySQL Server,证明容灾没有问题


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
144 1
|
22天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
57 5
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
57 2
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
140 3
|
2月前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
54 1
|
30天前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
29 0
|
3月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
131 9
|
2月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
190 2