内容概要
• 备份恢复策略 • 逻辑备份 • 物理备份 • 数据恢复 • 自动化备份恢复设计
备份策略
备份恢复策略 • RTO Recovery Time Objective,恢复时间目标,数据中心可容许服务中断的时间长度,可简单 地描述为企业能容忍的恢复时间
• RPO Recovery Point Objective,恢复点目标,企业能容忍的最大数据丢失量,可以按照时间计 算
备份方式 • 逻辑 1.mysqldump/mysqlpump 2.select…into outfile 3.主从延迟复制
• 物理 1.冷备: 关闭MySQL,拷贝数据文件 2.热备: innobackupex
• 日志备份 1.binlog实时备份
备份恢复策略
全量备份 逻辑备份 mysqldump 物理备份 innobackupex、冷备 增量备份 物理备份 innobackupex 主从冗余 不能避免数据误操作 主从延迟库备份 binlog应用落后主库一段时间
备份恢复策略
1.确定数据库的大小
select round(sum(data_length+index_length)/1024/1024) as total_mb, round(sum(data_length)/1024/1024) as data_mb, round(sum(index_length)/1024/1024) as index_mb from information_schema.tables;
2.数据库的可用性 维护窗口 业务低峰时段
备份恢复策略
3.存储引擎与锁策略
select table_schema,engine,round(sum(data_length+index_length)/1024/1024) as total_mb, round(sum(data_length)/1024/1024) as data_mb,round(sum(index_length)/1024/1024) as index_mb,count(*) as tables from information_schema.tables where table_schema not in ('INFORMATION_SCHEMA','PERFORMANCE_SCHEMA','sys','mysql') group by table_schema,engine order by 3 DESC;
4.运行时间 确认备份运行的时间,便于执行合理的备份计划
备份恢复策略
5.备份验证 备份完成后,必须验证备份的有效性 6.灾备演练 定期组织灾备演练,测试数据恢复,能否达到RTO和RPO标准 7.常用的备份计划 • 每天一次全备 • 实时备份binlog • 每6小时备份一次核心表 • 1,3,5全备,2,4,6,7增量备份
逻辑备份
mysqldump
• 将数据备份成可执行的SQL语句。 • 备份方式: • 远程备份 • 本地备份 • 备份类型 • 一致性备份 • 全库备份 • 单表备份 • 备份时排除某些表 • 单表条件备份
mysqldump
• 备份指定的数据库中的某些表
mysqldump [options] db_name [tab1] …
• 备份一个或多个数据库
mysqldump [options] --database DB1 [DB2] …
• 备份所有数据库
mysqldump [options] --all-database
mysqldump • 常用参数 --tables 指定导出的表,--databases配合使用 --single-transaction 事务类型表一致性导出 --lock-tables 锁定表,导出后释放 --default-character-set 指定导出文本的字符集 --routines 导出存储过程,函数
mysqldump
--triggers 导出触发器 --hex-blob BLOB字段导出 --ignore-table 多张多次指定 , 注意=前后无空格, --ignore-table=eve.uainfo -w, --where=name 指定where条件,-w 'id =77643’ -t, --no-create-info 不备份表结构,只备份数据
mysqldump
-T, --tab=name 指定数据输出路径,只能在mysql服务器本地使用 --fields-terminated-by 指定字段分隔符 --replace Use REPLACE INTO instead of INSERT INTO --master-data 生成change master to语句,并指定一致性导出的binlog的位置 --set-gtid-purged Whether to add SET @@GLOBAL.GTID_PURGED to output
mysqldump
• --导出单个db mysqldump -uroot -pmysql1 --master-data=2 --single-transaction --triggers --routines -databases sakila >/home/mysql/insert.sql
• --导出多个db mysqldump -uroot -pmysql1 --default-character-set=utf8 --hex-blob --single-transaction -routines --triggers --databases employees sakila >/home/mysql/test/dumpdb.sql
• --导出单个table,导入时,先进入对应的db下 mysqldump -uroot -pmysql1 --default-character-set=utf8 -t --databases mysql --tables user > user.sql
mysqldump • --不导出某些表 --ignore-table=eve.uainfo 多张多次指定 , 注意=前后的空格 mysqldump -uroot -pmysql1 --default-character-set=utf8 --single-transaction --databases eve --ignore-table=eve.uainfo --ignore-table=eve.dimensions_info >ignoret.sql
• --load data格式 mysqldump -uroot -pmysql1 --databases eve --default-character-set=utf8 --singletransaction --tables TRACKINGCLICK -t --tab /mnt/howe/ --fields-terminated-by=','
mysqldump • replace --大表修复不重建表 mysqldump-uroot -pmysql1 --default-character-set=utf8 --hex-blob --single-transaction -routines --triggers -t --replace=TRUE --databases mysql --tables user >/mnt/howe/user.sql
• --修复行 where mysqldump -uroot -pmysql1 --default-character-set=utf8 --single-transaction -t -databases iruluplay --tables third_party_device -w 'id =77643' > 1.txt
• 单行insert导出 --skip-extended-insert mysqldump-uroot -pmysql1 --default-character-set=utf8 --skip-extended-insert -databases mysql --tables user >/mnt/howe/user.sql
mysqldump
• 对于较小的数据库非常理想,适合于5GB~20GB之间的数据库。 • 不适用于上百GB的数据库,也不适用于时间性要求非常强的恢复。