高并发,高性能,高可用MySQL 实战-orm框架原理,怎个给数据上保险

orm框架原理

什么是orm框架

总结:

  1. orm框架的作用是程序对象与关系型数据库之间的映射
  2. orm框架可以大大降低程序员的代码开发工作量
  3. orm框架可以使得代码更安全,更易维护

orm框架是如何设计的

  1. 经典软件架构
  • 分层架构
  • 事件驱动架构
  • 管道过滤器架构
  • 微核架构
  1. orm框架架构层次
  • 接口层:向上支持程序调用
  • 处理层:参数映射--->sql生成--->sql执行--->结果处理
  • 支撑层:事务管理,连接池管理
  • 连接层:数据库连接驱动

总结:orm框架体现了软件架构设计的经典模式,orm框架一般有接口层、处理层、支撑层、连接层,orm框架中有很多优秀的代码,值得阅读

orm框架有哪些常见的问题

  1. orm与dao层是什么关系
    dao是orm框架的接口层,dao并不等价于orm框架,只是框架的一部分

  2. 开发同学和DBA误会在哪里

    • 在orm框架的加持下,sql不是开发同学直接写的
    • 开发往往更注重于业务逻辑,忽视了sql本身的性能
  3. 如何定位出问题的sql

  • 根据代码推断,查看相关日志
  • 数据库:查看慢日志
  • 网络:监听数据库端口,解析TCP报文

总结:遇到sql性能问题可以从应用、网络、数据库定位
性能差的sql一般可以通过orm的自定义sql解决

怎么给数据上保险

数据库有哪些种类的备份

  1. 备份的分类维度
  • 备份时数据库的状态
    hot backup热备,正常运行中直接备份
    cold backup冷备,完全停止后备份
    warm backup温备,数据库只读

  • 备份文件的格式
    逻辑备份:输出文本或sql语句
    物理备份(裸文件):备份数据库底层文件

  • 备份内容
    完全备份:备份完整数据
    增量备份:备份数据差异
    日志备份:备份binlog

  1. 工具举例
    mysqldump: 逻辑、热、全量备份
    xtrabackup: 物理、热、全量+增量备份

  2. 总结
    备份方式的分类维度有:状态、格式、内容
    备份方式没有绝对的好坏,只是用途不同

如何使用OUTFILE命令进行备份

  1. OUTFILE
  • mysql原生的sql指令
  • 最原始的逻辑备份的方式
  • 备份的功能和效果取决于如何写sql语句
  1. outfile的使用方式
  • 首先查询mysql的导出路径
    show variables like "%secure%";
  • 备份命令
    select * into outfile "/var/lib/mysql/store-out" from store;
    select * into outfile "/var/lib/mysql/store-out2" fields terminated by ',' from store;
  1. outfile注意事项
  • 在InnoDB事务下,可以做到一致性视图
  • 修改分隔符fields terminated by
  • 修改换行符lines terminated by
  1. outfile的缺陷
  • 输出的文本比较简略
  • 很难用来还原,现在一般用来简单导出数据
  1. 总结:
  • outfile是最简单且原生的数据备份工具
  • 使用简单,灵活性高
  • 不适合数据还原场景,基本用来导出数

如何使用mysqldump进行备份

  1. outfile如何改进
  • 自动发送select语句,不需要手动发送
  • 自动开始事务
  • 输出insert语句,可以直接用于还原
  1. mysqldump特点
  • 非常常用的逻辑备份工具
  • mysql server自带
  • 输出的内容为sql语句,平衡了阅读和还原
  • sql语句占用空间小
  1. mysqldump原理
  • mysqldump使用一下语句对数据进行备份
    select sql_no_cache from t
  • sql_no_cache查询出的数据不会进入sql缓存
  1. mysqldump使用方法
  • mysqldump使用一下语句进行数据备份
    mysqldump -h ip -P port -u root --databases docker001 --single-transaction > test.sql -p
  • 直接直接导出的sql文件即可还原
    source test.sql
  1. mysqldump注意事项
  • --single-transaction参数在rr(repeatable read)级别下进行(InnoDB),保证数据备份的一致性
  • --all-databases参数备份所有的库
  1. mysqldump缺点
  • 导出逻辑数据,备份较慢
  • 还原需要执行sql, 备份也慢
  1. 总结:
  • mysqldump使用简单,可以热备
  • sql文件可以直接执行,占用空间小,可以阅读
  • 备份还原性能不如物理备份

如何使用mysqldump+binlog增量备份

  1. mysqldump增量备份思路
  • binlog忠实的记录了mysql数据库的变化
  • mysqldump全量备份之后,可以用binlog作为增量
  • mysqldump全量备份时,切换新的binlog文件
  • 从零还原时,采用全量+binlog还原
  1. mysqldump使用一下语句对数据库进行全量备份
    mysqldump -h host -P port -u root --databases docker01 --single-transaction --flush-logs --master-data=2 > test.sql -p
  • --flush-logs:备份后切换binlog文件
  • --master-data=2: 记录切换后的binlog文件名
  1. 增量备份
  • 需要增量备份时,切换binlog文件
    mysqladmin -h host -P port -u root -p flush-logs
    然后将所有新增的binlog文件备份
  1. 还原
  • 首先恢复旧的全量数据
    source test.sql
  • 然后将binlog增量还原至数据库(切记最后一个binlog正在使用的不要还原)
    mysqlbinlog binlog.000012 binlog.000013 binlog.000014 | mysql -h host -P port -u root -p
  1. 总结:
  • mysqldump+binlog可以有效对数据进行全量+增量备份
  • 两个组件各司其职,是工程实践中的经典做法
  • 理论上说可以将数据库恢复至binlog的任意时刻
  • 缺点是操作起来比较复杂

如何使用xtrabackup进行物理备份

  1. 为什么需要物理备份
  • 直接备份InnoDB底层数据文件
  • 导出不需要转换,速度快
  • 工作时对数据库的压力较小
  • 更容易实现增量备份
  1. 直接拷贝裸文件行吗
  • 理论上可行,但是有很多问题
  • 要同时备份frm元数据文件,ibd文件,binlog文件, redulog文件
  • 在不同版本的数据库和操作系统上还原可能有兼容为题
  • 必须冷备份,影响业务
  1. 如何实现物理+热+全量备份
  • 思路:利用redu log,备份ibd文件+备份期间的redo log
  • 启动redu log监听线程,开始收集redo log
  • 拷贝ibd数据文件
  • 停止收集redo log
  • 加FTWRL锁拷贝元数据frm
  1. 如何实现物理+热+增量备份
  • 思路:与全量级别相同
  • 如何确定增量:根据每个页的SLN号,确定变化的页
  1. 如何实现物理还原
  • 思路:mysqld crash崩溃恢复流程相似
  • 还原ibd文件,重放redo log
  1. ibbackup
  • 现名mysql enterprise backup, InnoDB官方出品
  • 实现了上述的功能,性能优秀
  1. xtrabackup
  • percona公司开发的开源版本,实现了ibbackup的所有功能
  • 下载地址:
    debian10-xtrabackup
  • 安装 sudo dpkg -i xxx.deb
  1. xtrabackup全量使用方法
  • 备份
    innobackupex --user=root --password=12465 bakdir/
  • 数据还原(停掉mysqld)
    innobackupex --copy-back bakdir/xxxx-xx-xx/
  1. xtrabackup增量使用方法
  • 增量备份
    innobackupex --user=root --password=12465 --incremental bakdir/ --incremental-basedir="/bakdir/xxxx-xx-xx/"
  • 增量备份合并至全量备份
    innobackupex --apply-log bakdir/xxxx-xx-xx/ --incremental-dir=bakdir/yyyy-yy-yy/
  1. 总结
  • 物理备份是一种高效的备份方式
  • xtrabackup采用了备份ibd文件+备份期间redo log方式
  • xtrabackup是最常用的mysql物理备份工具
  • 物理备份的缺点是备份出来的文件无法直接阅读

mysql备份工具如何知道我们的创新

  1. mylvmbackup
  • 物理、温备
  • 利用lvm(logical volume manager)逻辑卷管理器
  • 直接备份磁盘数据
  1. mydumper
  • 跟mysqldump类似的工具
  • 实现了多线程并发的备份还原
  • 速度更快
  1. zmanda recovery manager
  • 功能强大的备份恢复管理工具
  • 集成了多种备份工具
  • 集成了binlog分析功能
  1. 总结:
  • mylvmbackup:使用lvm备份磁盘
  • mydumper: 多线程备份
  • zmanda recovery manager: 备份管理工具

如何防患于未然

  1. 权限隔离
  • 给业务应用分配的账号只给DML权限,不给DDL权限
  • 开发同学使用只读账号
  • DBA平时使用只读账号,特殊时候切换账号
  1. SQL审计
  • DBA在开发环境要审计即将要上线的sql语句
  • 开发同学修改在线数据,提交给DBA执行
  • inception自动审核工具
  1. 伪删表
  • 删表之前先把表改名字,观察业务是否受影响
  • 不直接删表,给表名加特殊后缀,用脚本删除
  1. 完备流程
  • 上线之前备份数据
  • 准备生产环境事故预案
  1. 总结:
  • 最小权限规则,收缩权限
  • 使用自动或手动的手段审计sql语句
  • 删表前伪删除,使用自动工具删除
  • 完善上线与运维流程

本章小结

  1. 数据库有哪些种类的备份
  • 备份方式的分类维度有:状态、格式、内容
  • 备份方式没有绝对的好处,只是用途不同
  1. outfile命令
  • outfile是最简单且原生的数据库备份工具
  • 使用简单,灵活性高
  • 不适合数据还原场景,基本用来导出数据
  1. mysqldump工具, 逻辑备份
  • mysqldump使用简单,可以热备,可以增量备份
  • sql文件可以直接执行,占空间小,可以阅读
  • 备份、还原性能不如物理备份
  1. xtrabackup工具, 物理备份
  • 物理备份是一种高效的备份方式
  • xtrabackup采用了备份ibd+备份期间redu log方式
  • xtrabackup是mysql最常用的物理备份工具
  • 物理备份的缺点就是备份的文件不能直接阅读
  1. 其它备份工具
  • mylvmbackup: 使用lvm备份磁盘
  • mydumper: 多线程备份
  • zmanda recovery manager: 备份管理工具
  1. 防患于未然
  • 最小权限规则,收缩权限
  • 使用自动或手动的手段审计sql语句
  • 删表和库时使用伪删除,使用脚本删除
  • 完善上线与运维流程
posted @ 2022-04-03 15:00  专职  阅读(350)  评论(0编辑  收藏  举报