Mysql数据库架构

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql数据库架构

1、服务器硬件优化

   

   内存(不一定越多越好,避免浪费)

  1. 索引和数据可以存在缓存
  2. 缓存区大小
  3. 给其他服务提供更多内存

   磁盘

           传统机器磁盘

  1. 存储容量
  1. RAID技术可以将小磁盘变成大磁盘,增加传统机器硬盘的性能。(常用)(选择最好带缓存功能的)
  1. RAID 0 是最简单,最少使用2块以上硬盘即可 成本低 没有提供冗余和错误修复能力。后续费用可能更高。(可通过软件)
  2. RAID 1 又称磁盘镜像,保证可以修复,利用的磁盘可能就是一半的空间(可通过软件,用作读取日志等使用读块,写慢需要镜像)
  3. RAID 5 分布式奇偶校验磁盘阵列(读取很快,写的时候比较慢,使用在 从服务器上)。
  4. RAID 10 分片的镜像(推荐)
  1. image.png
  2. 固态磁盘 :  适用于存在大量随机I/O的场景      解决单线程负载的I/O瓶颈      最好使用在从服务器上    适合MYSQL
  1. 有更好随机读写性能
  2. 更好的支持并发
  3. 更容易损坏
  4. SSD
  1. 使用SATA
  2. 使用过SATA支持RAID技术 。选择支持SSD RAID配置
  1. PCI-E SSD  闪存Fusion IO
  1. 无法使用SATA接口
  2. 价改比SSD高性能更好 会使用CPU内存空间(代价)
  3. 可以不使用RAID了 ,从成本考虑
  1. 网络存储 SAN和NAS : 适用于文件存储   数据库备份文件  

                                       

       



  1. 传输速度
  2. 访问时间
  3. 主轴转速
  4. 物理尺寸

 


总结 : 64位 对应 64位

           对于并发比较高 cpu的数量比频率重要

           对于复杂sql      频率重要        

           内存尽可能大

           I/O子系统








2、操作系统 Centos系统参数优化

  内核相关参数  /etc/sysctl.conf

           TCP 链接

               net.core.somaxconn = 65535

              net.core.netdev_max_backlog = 65535

               net.ipv4.tcp_max_syn_backlog = 65535

           

           加快tcp回收

              image.png

           TCP缓存区 发送和接受

               image.png

           失效链接加速tcp回收

               image.png


       image.pngimage.png

image.pngimage.png


image.png   image.pngimage.pngimage.png


image.png

 



image.png  




   


3、MyISAM  5.5版本以前默认

  1. 表级锁
  2. 读写混合并发不是特别好  。 适合读表
  3. 表修复 可能数据会丢失
  1. 通过 check table ***
  2. 通过 repair table ***
  1. 支持压缩 这张表只读
  1. 通过命令 myisampack -b -f ***.MYI
  2. 通过压缩之后进行读写有什么问题
  1. 只读
  1. mysql 5.0 默认单表大小为4G 扩大需要修改MAX_Rows 和 AVG_ROW_LENGTH
  2. mysql 5.0之后为256TB
  3. 适用场景
  1. 非事务
  2. 只读类(报表)
  3. 空间类应用 例如GPS



4、MySQL5.5 之后默认为Innodb

  1. MySQL 5.6中,这个属性默认值是ON 默认使用独立表空间
  2. (innodb_file_per_table = OFF) 或者为每张表的数据单独放在一个.ibd文件(innodb_file_per_table = ON)。每张表一个文件允许你在drop、truncate或者rebuild表时回收磁盘空间。这对于一些高级特性也是有必要的,比如数据压缩。但是它不会带来任何性能收益。你不想让每张表一个文件的主要场景是:有非常多的表(比如10k+)。
  3. 使用独立表空间推荐
  4. image.png
  5. 支持事务ACID
  6. 支持行级锁
  1. 由存储引擎层实现
  1. 共享锁(也称读锁)
  2. 独占锁(也称写锁)

5、CSV存储引擎

  1. image.png
  2. image.png可以直接对数据文件直接编辑
  3. image.pngimage.png


   




6、Archive存储引擎

  1. image.png
  2. image.png
  3. image.png








7、Memory 存储引擎

   

  1.    image.png结构保存在磁盘 数据保存在内存
  2. image.pngimage.pngimage.png
  3. image.png默认值只有16M 对已经存在memory表修改之后无效 ,除非重建
  4. image.png
  5. image.png



8、Federated存储引擎一个数据库可以读取另一个数据库

  1.    image.png
  2. image.png
  3. image.png






9、Mysql服务器配置

  1. image.png
  2. image.png
  3. image.png
  4. image.png
  5. image.png
  6. Innodb_flush_method = O_DIrect 适用linux
  7. image.png
  8. image.png



10、安全

  1. image.png
  2. image.png 后面两个针对主从结构
  3. image.png不要轻易改动

11、基准测试 mysqllap 和 sysbeanch

   


12、image.png



13、mysql 二进制日志

  1. 基于段 statement
  2. 基于行 row(官方推荐)
  1. 优点
  1. 主从复制更加安全
  2. 对每行数据修改比基于段复制更搞笑
  1. 缺点
  1. 日志较大 binglog_row_image = [full(默认) | minimal | noblob]
  1. 运行 mysql -vv **.
  1. 混合 MIXED 上述混合



14、复制

image.png

image.pngimage.png



image.pngimage.png



15、复制工作方式及要求

   image.png

  1.  主服务器查看是否开启二进制日志
  2.  从服务器上



16、配置Mysql复制--基于日志点的复制

  1.    基于日志点的复制
  1. 配置账号
  1. image.png
  1. 配置主服务器
  1. image.png
  1. 配置从服务器
  1. image.png log_slave_update = on 可用于从服务器作为另一个服务器的主服务器
  1. 初始化从服务器数据
  1. image.png
  1. 启动复制链路
  1. 在从服务器上启动

                       image.png

                           start slave

image.pngimage.png

           



17、配置Mysql复制--基于 GTID 复制优缺点

           image.png

  1.      在主DB服务器上建立复制账号image.png
  2. 配置主服务器

       image.pngimage.pngimage.png

       3.配置从数据库服务器        


       image.pngimage.png

       4. 初始化 从数据库数据

           image.pngimage.png


image.png



           

18、选择复制模式

   5.6之后才有GTID辅助

       image.png





19、MySQL复制拓扑

  1. 一主多从
  1. 优点
  1. 配置简单
  2. 可以从多个从库分担读负载
  1. 用途
  1. 为不同业务使用不同从库(分担查询,使用不同索引,使后台查询不影响前端查询)
  2. 将一台从库放到远程IDC作为灾备
  3. 分担读负载
  1. 双主复制  主-主复制
  1. image.png
  2. 容易产生冲突 导致链路中断 耗时长
  3. 适用于 一个地区保存另一个地区数据
  4. 建议操作
  1. 两个主中操作的表最好分开 : 上海的库只使用上海的表 北京的库只使用北京库
  2. 使用下面参数控制自增
  1. image.png
  2. image.png
  1. 推荐使用主备模式下 主主
  2. image.png
  1. image.png
  1. 主有问题时候,从也需要关闭
  2. 从多的时候会对主性能有压力(解决这个问题 出现级联复制)image.png 需要配置slave_log_updates



20、MySQL复制性能优化

  1.   主从延迟的因素
  1. image.png
  2. image.png推荐后者
  3. image.png
  1. 配置多线程复制
  1. image.pngmysql5.7 设置4个线程 并设置并发为逻辑适中
  1. 复制常见问题
  1. image.png
  2. image.png
  3. image.png
  4. image.png一定要设置read_only
  5. image.png在从服务器的时候多个从服务器server_id一样比较隐蔽
  6. image.png
  7. image.png





21、高可用

image.pngimage.png


image.pngimage.png





22、MMM架构

   同一时间只有一台主服务器提供外部服务 从服务器read-only

   image.pngimage.png

image.png

   


   


22、MHA架构





23、索引策略

   

image.png

image.pngimage.pngimage.png


image.pngimage.png


image.png






24、SQL查询优化  通过日志形式


image.png


   image.png




  1. image.png
  2. image.png
  3. image.png


  4. image.png
  5. image.png
  6. image.png



   


25、SQL查询优化  实时查询


   image.png做个定时访问







26、sql解析预处理及生成执行计划

  1.    image.png
  2. image.png
  3. image.png





image.png


image.png


image.png



27、分库分表

   

   image.pngimage.png



终极大招:表的水平拆分



  image.pngimage.pngimage.png

image.png

image.pngimage.png









image.png






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
19 0
|
9天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
29 6
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
7天前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
|
9天前
|
固态存储 关系型数据库 MySQL
"惊!20亿数据秒速入MySQL,揭秘数据库极速插入的黑科技,你不可不知的绝密技巧!"
【8月更文挑战第11天】面对20亿级数据量,高效插入MySQL成为挑战。本文探讨优化策略:合理设计数据库减少不必要的字段和索引;使用批量插入减少网络往返;优化硬件如SSD和内存及调整MySQL配置;并行处理加速插入;附Python示例代码实现分批导入。这些方法将有效提升大规模数据处理能力。
24 2
|
10天前
|
存储 关系型数据库 MySQL
"Linux环境下MySQL数据库名及表名大小写敏感性设置详解:从配置到影响,确保数据库操作的准确与高效"
【8月更文挑战第9天】在Linux环境中,MySQL数据库名及表名的大小写敏感性是一项重要配置。默认情况下,MySQL在Linux上区分大小写,但这可通过配置文件 `/etc/my.cnf` 中的 `lower_case_table_names` 参数调整。该参数设为0时,名称存储时保持原样,查询时不区分大小写;设为1则全部转换为小写。通过编辑配置文件并重启MySQL服务,可根据需求灵活控制名称的大小写敏感性,确保数据一致性和应用兼容性。
27 3
|
10天前
|
关系型数据库 MySQL Linux
【一键解锁神秘力量!】CentOS 7 通过编译源码方式安装 MySQL 数据库 —— 从零到英雄的数据库安装实战秘籍!
【8月更文挑战第9天】随着业务增长,对数据库的需求日益提高。在 CentOS 7 中,通过编译源码安装 MySQL 可提供更高定制性和灵活性。本文详细介绍从准备环境、下载源码、配置编译参数到安装 MySQL 的全过程,并对比 RPM 包安装方法,帮助读者根据需求选择合适方案。实践时需注意备份数据、选择合适版本、确保安全性和调优性能等要点。
53 1
|
3天前
|
关系型数据库 MySQL 数据库
探究数据库开源协议:PostgreSQL vs MySQL
探究数据库开源协议:PostgreSQL vs MySQL
|
4天前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
13 0
|
4天前
|
安全 关系型数据库 MySQL
如何在 MySQL 中导入和导出数据库以及重置 root 密码
如何在 MySQL 中导入和导出数据库以及重置 root 密码
14 0