mysql运维------分库分表

这篇具有很好参考价值的文章主要介绍了mysql运维------分库分表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 介绍

问题分析:

随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:

IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。
CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。
mysql运维------分库分表
分库分表的中心思想就是将数据分散存储,使得单一数据库/表的数据量变小来缓解的单一数据库的性能问题,从而达到提升数据库性能的目的。

拆分策略

  1. 垂直拆分
    a. 垂直分库
    将业务拆分成几个独立的单元, 根据业务单元将原来的单库分成多个结构不同的库, 用外键相连,数据的并集是原来的单库
    mysql运维------分库分表

    b. 垂直分表
    把原来支持多个业务的宽表拆分成多个窄表,每个窄表之间通过外键相连, 他们的并集是原来的那个宽表
    mysql运维------分库分表

  2. 水平拆分
    a. 水平分库
    根据某个字段(比如自增id,时间戳)按照一定的策略(取模,范围,hash,枚举,应用指定,日期等)讲原来的单库拆分成多个结构相同的库
    mysql运维------分库分表

    b. 水平分表
    根据某个字段(比如自增id,时间戳)按照一定的策略(取模,范围,hash,枚举,应用指定,日期等)讲原来的单库拆分成多个结构相同的库
    mysql运维------分库分表

2. 实现技术

Mycat

Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。它位于mysql与应用程序之间,经过相应的配置后,应用程序通过mycat来访问mysql,mycat通过分片规则来决定应用程序应该访问哪个分库, 而应用程序感觉不到.
mysql运维------分库分表

a. 下载

下载地址:http://dl.mycat.org.cn/

b. 安装

Mycat是采用Java语言开发的开源的数据库中间件,支持Windows和Linux运行环境,需要提前在准备好的服务器中安装如下软件:
⚪ MySQL
⚪ JDK
⚪ Mycat

  1. 利用工具上传Mycat压缩包到服务器
    Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz
  2. 解压Mycat的压缩包
    tar -zxvf Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz -C /usr/local/

mycat目录结构

[pmish@localhost mycat]$ ll /usr/local/mycat/
总用量 12
drwxr-xr-x. 2 root root  190 4月  11 09:53 bin
drwxrwxrwx. 2 root root    6 4月  15 2020 catlet
drwxrwxrwx. 4 root root 4096 4月  11 09:53 conf
drwxr-xr-x. 2 root root 4096 4月  11 09:53 lib
drwxrwxrwx. 2 root root    6 8月  31 2021 logs
-rwxrwxrwx. 1 root root  227 9月  13 2021 version.txt
目录 作用
bin 存放可执行文件,用于启动停止mycat
conf 存放mycat的配置文件
lib 存放mycat的项目依赖包(jar)
logs 存放mycat的日志文件

c. mycat架构图

mysql运维------分库分表

d.以三台服务器分片为例

  1. 环境准备:
    mysql运维------分库分表
  2. 分片配置(/usr/local/mycat/conf/schema.xml
    mysql运维------分库分表
    2-1. 权限配置
    mysql运维------分库分表
  3. 启动服务
cd /usr/local/mycat

bin/mycat start #启动

bin/mycat stop #停止

mycat启动之后占用端口8066
启动完毕之后,可以查看logs目录下的启动日志,查看Mycat是否启动完成。
tail -f logs/wrapper.log
通过如下指令,连接并登录Mycat
mysql -h -P 8066 -uroot -p

  1. 配置文件介绍
  • schema.xml: 定义逻辑表和逻辑数据库
    mysql运维------分库分表
    schema.xml作为Mycat中最重要的配置文件之一,涵盖了MyCat的逻辑库、逻辑表、分片规则、分片节点及数据源的配置。
    ⚪ schema标签
    mysql运维------分库分表
    <schema>标签用于定义MyCat实例中的逻辑库,一个MyCat实例中,可以有多个逻辑库,可以通过schema标签来划分不同的逻辑库。MyCat中的逻辑库的概念,等同于MySQL中的database概念,需要操作某个逻辑库下的表时,也需要切换逻辑库(use xxx)。
    核心属性
    name:指定自定义的逻辑库库名
    checkSQLschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去除,false:不自动去除
    sqlMaxLimit:如果未指定limit进行查询,列表查询模式查询多少条记录
    <table>标签定义了MyCat中逻辑库schema下的逻辑表,所有需要拆分的表都需要在table标签中定义。
    核心属性
    name:定义逻辑表名,在该逻辑库下唯一
    dataNode:定义逻辑表所属的dataNode,该属性需要与dataNode标签中name对应;多个dataNode逗号分割
    rule:分片规则的名字,分片规则名字是在rule.xml中定义的
    primaryKey:逻辑表对应真实表的主键
    type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为global
    ⚪ datanode标签
    mysql运维------分库分表
    <dataNode>标签中定义了MyCat中的数据节点,也就是数据分片。一个dataNode标签就是一个独立的数据分片。
    核心属性
    name:定义数据节点名称
    dataHost:数据库实例主机名称,引用自dataHost标签中name属性
    database:定义分片所属数据库
    ⚪ datahost标签
    mysql运维------分库分表
    该标签在MyCat逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离、心跳语句。
    核心属性
    name:唯一标识,供上层标签使用
    maxCon/minCon:最大连接数/最小连接数
    balance:负载均衡策略,取值0,1,2,3
    writeType:写操作分发方式(0:写操作转发到第一个writeHost,第一个挂了,切换到第二个;1:写操作随机分发到配置的writeHost)
    dbDriver:数据库驱动,支持native、jdbc
    mysql运维------分库分表

  • rule.xml: 用来定义分片规则
    rule.xml中定义所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。主要包含两类标签:tableRule、Function。,
    mysql运维------分库分表

  • server.xml: 用来配置mycat系统配置和用户配置
    server.xml配置文件包含了MyCat的系统配置信息,主要有两个标签:system、user。
    ⚪ system标签
    ⚪ user标签
    mysql运维------分库分表

修改配置文件进行分片

1. 垂直拆分

⚪ 场景
在业务系统中,涉及以下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据存储及处理能力是有限的,可以对数据库进行拆分,原有的数据库表如下。
mysql运维------分库分表
分别在三台MySQL中创建数据库shopping。
⚪ 配置
mysql运维------分库分表
mysql运维------分库分表
⚪ 全局表配置
对于省、市、区/县表,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设为全局表,利于业务操作。
mysql运维------分库分表

2. 水平拆分

⚪ 场景
单表太大: 在业务系统中,有一张表(日志表),业务系统每天都会产生大量的日志数据,单台服务器的数据存储及处理能力是有限的,可以对数据库表进行拆分。
mysql运维------分库分表
⚪ 配置
mysql运维------分库分表
⚪ 分片规则
1. 按指定指端值的范围
mysql运维------分库分表
mysql运维------分库分表

2. 对指定字段的值取模
mysql运维------分库分表
mysql运维------分库分表

3. 枚举
通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据等业务。
mysql运维------分库分表
mysql运维------分库分表

4. 应用指定
运行阶段由应用自主决定路由到哪个分片,直接根据字符子串(必须是数字)计算分片号。
mysql运维------分库分表
mysql运维------分库分表

5. 一致性hash
一致性hash,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加改变原来数据的分区位置。
mysql运维------分库分表
mysql运维------分库分表

6. 固定分片hash算法
mysql运维------分库分表
mysql运维------分库分表

7. 字符串hash解析
截取字符串中的指定位置的子字符串,进行hash算法,算出分片
mysql运维------分库分表
mysql运维------分库分表

8. 按(天)日期分片
mysql运维------分库分表
mysql运维------分库分表

9. 按(自然月)日期分片
mysql运维------分库分表
mysql运维------分库分表

Mycat管理及监控

1. Mycat原理

mysql运维------分库分表

2. Mycat管理

Mycat默认开通2个端口,可以在server.xml中进行修改。
⚪ 8066数据访问端口,进行DML和DDL操作。
⚪ 9066数据库管理端口,mycat服务管理控制功能,用于管理mycat的整个集群状态
mysql -h 192.168.200.210 -p 9066 -uroot -proot
mysql运维------分库分表

3. Mycat-eye

⚪ 介绍
Mycat-web(Mycat-eye)是对mycat-server提供监控服务,功能不局限于对mycat-server使用。他通过JDBC连接对Mycat、Mysql监控,监控远程服务器(仅限于Linux系统)的cpu、内存、网络、磁盘。
Mycat-eye运行过程中需要依赖zookeeper,因此需要先安装zookeeper。
⚪ 安装

Zookeeper安装

1.上传安装包
zookeeper-3.4.6.tar.gz
2.解压
tar -zxcf zookeeper-3.4.6.tar.gz -C /usr/local/
3.创建数据存放目录

cd /usr/local/zookeeper-3.4.6/
mkdir data

4.修改配置文件名称并配置

cd config
mv zoo_sample.cfg zoo.cfg

5.配置数据存放目录
dataDir=/usr/local/zookeeper-3.4.6/data

6.启动zookeeper
bin/zkServer.sh start#启动
bin/zkServer.sh status#查看状态

Mycat-web安装

1.上传安装包
Mycat-web.tar.gz
2.解压
tar -zxvf Mycat-web.tar.gz -C /usr/local/
3.目录介绍

lib —> 依赖jar包
mycat-web —>mycat-web项目
readme.txt
start.jar —>启动jar
start.sh —>linux启动脚本

4.启动
sh start.sh

5.访问
http://192.168.200.210:8082/mycat文章来源地址https://www.toymoban.com/news/detail-410593.html

到了这里,关于mysql运维------分库分表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 数据存储和优化------MySQL索引原理和优化 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第二章:MySQL索引原理和优化,只解释索引相关概念。 索引可以提高查询效率,影响where查询和order by排序,它可以从多方面进行分类,但是实际创建时

    2024年02月02日
    浏览(40)
  • 运维高级--shell脚本完成分库分表

         随着系统的运行,存储的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表;      其次随着表数据的不断增大,会发现查询也随着变得缓慢,如果添加索

    2024年02月15日
    浏览(35)
  • 掌握MySQL分库分表(六)解决主键重复问题--Snowflake雪花算法

    单库下⼀般使用Mysql自增ID,但是分库分表后,会造成不同分片上的数据表主键会重复 需求:性能强劲、全局唯一、防止恶意用户规矩id的规则来获取数据 利用自增id, 设置不同的⾃增步长: auto_increment_offset 、 auto-increment-increment 缺点: 依靠数据库系统的功能实现,但是未来

    2024年02月09日
    浏览(34)
  • 运维——编写脚本,使用mysqldump实现分库分表备份。

     编写脚本,使用mysqldump实现分库分表备份。 需要将 和 替换为您的 MySQL 用户名和密码,并将 替换为您希望保存备份文件的路径。 your_username your_password \\\"/path/to/backup\\\" 此脚本将遍历所有数据库和表,并使用 mysqldump 工具将每个表的数据导出到单独的备份文件中。备份文件的命

    2024年02月15日
    浏览(43)
  • 分库分表介绍以及shardingjdbc实现分库分表

    分库分表概念 一、什么是分库分表 分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。 分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起

    2023年04月13日
    浏览(28)
  • 【分库分表】基于mysql+shardingSphere的分库分表技术

    目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 分库分表是一种场景解决方案,它的出现是为了解决一些场景问题的,哪些场景喃? 单表过大的话,读请求进来,查数据需要的时间会过长 读请求过

    2024年03月12日
    浏览(39)
  • 掌握MySQL分库分表(一)数据库性能优化思路、分库分表优缺点

    不能⼀上来就说分库分表! 根据实际情况分析,两个角度思考:不分库分表、分库分表 软优化 数据库参数调优 分析慢查询SQL语句,分析执行计划,进行sql改写和程序改写 优化数据库索引结构 优化数据表结构优化 引入NOSQL和程序架构调整 硬优化 提升系统硬件(更快的IO、更

    2023年04月19日
    浏览(41)
  • MySQL-分库分表详解(七)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月16日
    浏览(26)
  • MySQL篇之分库分表

             1. 分担了访问压力    2. 解决存储压力         1. 前提,项目业务数据逐渐增多,或业务发展迅速,单表的数据量达1000W或20G以后。         2. 优化已解决不了性能问题(主从读写分离、查询索引…)。         3. IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(

    2024年02月21日
    浏览(44)
  • MySQL-分库分表详解(五)

    ♥️ 作者:小刘在C站 ♥️ 个人主页:  小刘主页  ♥️ 努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏: 云计算技术 ♥️小刘私信可以随便问,只要会绝不吝啬,感谢CSD

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包