备份策略

1、备份的类型

类型1:

  • 热备份:读写不受影响(MyISAM不支持热备,InnoDB支持热备)
  • 温备份:仅可以执行读操作
  • 冷备份:离线备份,读写操作均中止

类型2:

  • 物理备份:复制数据文件进行备份,占用较多的空间,速度快
  • 逻辑备份:将数据导出至文本文件中,占用空间少,速度慢,可能丢失精度

类型3:

  • 完全备份:备份全部数据
  • 增量备份:仅备份上次完全备份或增量备份以后变化的数据,备份较快,还原复杂
  • 差异备份:仅备份上次完全备份以来变化的数据,备份较慢,还原简单

2、备份需要考虑的因素

  • 温备的持锁多久,在锁状态的情况下无法写入数据
  • 备份产生的负载,要调空闲的时间备份
  • 备份过程的时长,数据量大的时候时间会很长,要选择合适的方案
  • 恢复过程的时长,备份数据需要即时测试

3、备份的目标

  • 数据库数据,每个表空间单独存放
  • 二进制日志,需要和数据分开存储
  • InnoDB的事务日志
  • 存储过程、存储函数、触发器或事件调度器等
  • 服务器的配置文件:/etc/my.cnf

4、备份工具

  • mysqldump工具:逻辑备份工具,适用所有存储引擎温备;支持完全或部分备份;对InnoDB存储引擎支持热备;Schema(数据库的定义)和数据存储在一起。

用法

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

选项

-A:备份所有库
-B db_name1,[db_name2,...]:备份指定库
-E:备份相关的所有event scheduler
-R:备份所有存储过程和存储函数
--triggers:备份表相关触发器,默认启用,用--skip-triggers,不备份触发器
--master-data={1|2}:1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定默认为12:记录为注释的CHANGE MASTER TO语句,注意:此选项会自动关闭--lock-tables功能,自动打开--lock-all-tables功能(除非开启--single-transaction)
-F:备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A时,会导致刷新多次数据库,在同一时刻执行转储和日志刷新,则应同时使用--flush-logs和-x,--master-data或-single-transaction,此时只刷新一次;建议:和-x,--master-data或 --single-transaction一起使用
--compact 去掉注释,适合调试,生产不使用
-d:只备份表结构
-t:只备份数据,不备份create table
-n:不备份create database,可被-A或-B覆盖
--flush-privileges:备份前刷新授权表,备份mysql库或相关时需要使用
-f:忽略SQL错误,继续执行
--hex-blob:使用十六进制符号转储二进制列(例如,“abc”变为0x616263),受影响的数据类型包括BINARY, VARBINARY,BLOB,BIT
-q:不缓存查询,直接输出,加快备份速度

MyISAM备份选项:支持温备;不支持热备,所以必须先锁定要备份的库,而后启动备份操作
-x,--lock-all-tables:加全局读锁,锁定所有库的所有表,同时加--single-transaction或--lock-tables选项会关闭此选项功能,注意:数据量大时,可能会导致长时间无法并发访问数据库
-l,--lock-tables:对于需要备份的每个数据库,在启动备份之前分别锁定其所有表,默认为on,--skip-lock-tables选项可禁用,对备份MyISAM的多个库,可能会造成数据不一致

InnoDB备份选项:支持热备,可用温备但不建议用
--single-transaction:此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执
行START TRANSACTION指令开启事务此选项通过在单个事务中转储所有表来创建一致的快照。仅适用于存储在支持多版本控制的存储引擎中的表(目前只有InnoDB可以); 转储不保证与其他存储引擎保持一致。

​ 在进行单事务转储时,要确保有效的转储文件(正确的表内容和二进制日志位置),需要保证没有其他连接使用以下语句:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE

​ 此选项和 --lock-tables(此选项隐含提交挂起的事务)选项是相互排斥备份大型表时,建议将--single-transaction选项和--quick结合一起使用

InnoDB建议备份策略:

mysqldump –uroot –A –F –E –R  --single-transaction --master-data=1 --flush-privileges  --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql

MyISAM建议备份策略:

mysqldump –uroot –A –F –E –R –x --master-data=1 --flush-privileges  --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql

  

  • xtrabackup工具:由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份

由Percona公司提供的mysql数据库备份工具,开源的能够对innodb和xtradb数据库进行热备的工具;

xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表;

innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在xtrabackup 之上做了一层封装实现的;

虽然目前一般不用 MyISAM 表,只是 MySQL 库下的系统表是 MyISAM 的,因此备份基本都通过 innobackupex 命令进行;

xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链接,即xtrabackup现在支持非Innodb表备份,并且Innobackupex在下一版本中移除,建议通过xtrabackup替换innobackupex。

参考手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:

1)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的;

2)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

3)xtrabackup_info:innobackupex工具执行时的相关信息;

4)backup-my.cnf:备份命令用到的配置选项信息;

5)xtrabackup_logfile:备份生成的日志文件。

用法:

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

选项:

--user:该选项表示备份账号
--password:该选项表示备份的密码
--host:该选项表示备份数据库的地址
--databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:该选项表示还原时增量备份的目录
--include=name:指定表名,格式:databasename.tablename
--apply-log:一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
--use-memory:该选项表示和--apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G
--export:表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:此选项在prepare base full backup,往其中merge增量备份时候使用
--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有足够的磁盘空间同事保留数据文件和Backup副本

注意:

1)datadir目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-backup选项不会覆盖;

2)在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中;

3)由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,chown -R mysql:mysql /data/mysqldb

  • mysqlbackup工具:热备份,MySQL Enterprise Edition组件
  • mysqlhotcopy工具:几乎冷备,仅适用于MyISAM存储引擎
  • 基于lvm快照备份:几乎热备,需要在拍快照前锁表
  • tar + cp 等归档复制工具备份:完全冷备

转载于:https://www.cnblogs.com/Gmiaomiao/p/9210949.html

MySQL/mariadb从删库到跑路——备份相关推荐

  1. mysql数据库从删库到跑路之mysql完整性约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KE ...

  2. mysql数据库从删库到跑路之mysql多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employee company.department #建表 create table department( i ...

  3. mysql数据库从删库到跑路之mysq索引

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  4. mysqldump全量恢复_删库不跑路-详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 相关文章 MySQL备份策略:https://segmentfa ...

  5. MySQL从删库到跑路(5):in and not

     "哈哈哈哈,看你这几天没来上课,我还以为你去拜什么高人为师了?原来就是这个烂番薯.臭鸟蛋的小卖部大爷学装逼,你逗我玩呢?哈哈哈哈哈"  "哈哈哈哈,一个老屌丝,一个小屌 ...

  6. mysql高级-15-数据库备份与恢复(删库不跑路)

    mysql高级 前言 1.物理备份与逻辑备份 2.mysqldump实现逻辑备份 2.1 备份一个数据库 2.2 备份全部数据库 2.3 备份部分数据库 2.4 备份部分表 2.5 备份单表的部分数据 ...

  7. MySQL从删库到跑路(2):大爷的SQL私房菜

    大爷的SQL私房菜 夜色如墨,月凉如水,一轮皎洁的圆月高高地挂在夜空之上,平日里鼾声如雷的室友今夜也停止了打鼾,如此静谧的夜晚,李有为却辗转难眠. 时间悄然来到凌晨一点半,他已经在窗边站了53分钟23 ...

  8. 手误【删库】 == 跑路,不存在的 ——删瓦辛格

    手误[删库] ==  跑路,不存在的  --删瓦辛格 前言 今天公司服务器的宝塔打不开,让我去修(ps:宝宝委屈) 打开找一下问题所在 问题: 发现是宝塔官方的cdn好像挂掉了 解决思路: (1)本地 ...

  9. 从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库

    从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库 一只有头发的程序猿 2019-08-23 09:38 做过互联网行业的都知道,数据库对公司是至关重要的,存储了大量的数据在里面,要是没有这 ...

  10. Linux 下谨慎使用 rm,避免从删库到跑路的悲剧发生

    我们该如何再次避免删库"跑路"等事件的再次发生? 对此,在企业首先做好权限管理以及多重审核机制的同时,CSDN 也曾教诸多程序员们如何在 Linux 下谨慎使用 rm,避免从删库到 ...

最新文章

  1. 5G NR — 频率、频段、载波、载频、载波带宽
  2. 拥抱对手 微软崛起或靠“云计算”业务
  3. Spring Cloud Stream整合RabbitMQ
  4. 7-160 验证“哥德巴赫猜想” (20 分)
  5. MySQL · 引擎介绍 · Sphinx源码剖析(二)
  6. Bert模型冻结指定参数
  7. (转)用Wineskin 让Windows 的程序在Mac 上运行
  8. 获取硬盘序列号(VC)
  9. er ubnt x设置教程_ubnt edgerouter er-x 路由器怎么设置
  10. 视频录制后有噪音怎么办?教你简答几步去除视频噪音!
  11. ubuntu Rhythmbox 乱码解决
  12. 《30天自制操作系统》-day2(MAC)
  13. 【解决方案】如何通过EasyCVR安防视频云服务搭建基于移动互联网的阳光厨房云视频直播方案?
  14. Python游戏开发工程师的起步,几款游戏开发案例
  15. 浮点数修约的法则c语言,IEEE754浮点表示法详解
  16. 浏览器如何清除缓存教程
  17. 杂记文件cs.txt
  18. 计算机数制详解及相互转换(二进制、八进制、十进制、十六进制)
  19. 奇异值分解SVD数学原理及代码(Python)
  20. CUBA China 最新进展

热门文章

  1. 编程基本功:谁改出的问题谁解,对不对?
  2. MAC下载安装JDK
  3. 安装SVN时提示错误:vcredist 2019 download
  4. LINUX没有SVN,怎么知道哪些文件修改了
  5. 不要张口别人有问题,先看自己是否做错
  6. 世界首次发现?包名导致eclipse找不到包含main的类
  7. 办公软件在多屏宽屏上的应用设想
  8. 我喜欢这个地方,是因为和你一起走过
  9. Prototype(原型)
  10. linux添加mysql到服务_Linux下将MySQL服务添加到服务器的系统服务中