一、mysql备份和恢复
1、为什么要备份?
灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击;误操作;
测试:恢复测试
要注意的要点:
可容忍丢失多少数据;
恢复需要在多长时间内完成;
需要恢复什么;
2、备份类型
完全备份,部分备份:
部分备份:仅备份其中的一张表或多张表;
完全备份,增量备份,差异备份
增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分;
差异备份:备份从上次完全备份之后变化的数据部分;
热备份、温备份和冷备份:
热备份:在线备份,读写操作不受影响; #最复杂
温备份:在线备份,读操作可继续进行,但写操作不允许;
冷备份:离线备份,数据库服务器离线,备份期间不能为业务提供读写服务;
MyISAM: 温备,无法实现热备
InnoDB: 热备,
物理备份和逻辑备份:
物理备份:直接复制数据文件进行的备份;
优点:
跨平台(但需要考虑大小写问题)
速度快
缺点:
逻辑备份:从数据库中“导出”数据另存而进行的备份;mysqldump,mydumper,phpMyAdmin
优点:
与存储引擎无关
备份的数据文件方便使用文本工具2次加工
恢复过程简单
可以使用网络来备份和恢复
mysqldump实现备份时语句灵活
缺点:
由于存储为文本数据,备份文件比原文件大,压缩可避免此问题
无法保证还原后数据与原数据一模一样
Schema和数据存储一起、巨大的SQL语句、单个巨大的备份文件
索引需要重建
规则备份时需要考虑的因素:
持锁的时长
备份过程时长
备份负载
恢复过程时长
3、备份什么?
数据、额外的数据(二进制日志和InnoDB的事务日志)、代码(存储过程和存储函数、触发器、事件调度器等)、服务器配置文件
设计备份方案:完全备份+增量备份
4、备份工具
mysqldump: 逻辑备份工具,适用于所有存储引擎,温备;完全备份,部分备份;对InnoDB存储引擎支持热备(但不实用?);
cp, tar等文件系统工具:物理备份工具,适用于所有存储引擎;冷备;完全备份,部分备份,
lvm2的快照:几乎热备;借助于文件系统工具实现物理备份;
mysqlhotcopy: 几乎冷备;仅适用于MyISAM存储引擎;
备份方案之备份工具的选择:
mysqldump+binlog: mysqldump:完全备份,通过备份二进制日志实现增量备份;
lvm2快照+binlog:几乎热备,物理备份
xtrabackup:
对InnoDB:热备,支持完全备份和增量备份
对MyISAM引擎:温备,只支持完全备份
二、mysqldump
mysqldump: 客户端,通过mysql协议连接至mysqld;
-A, --all-databases:备份所有库
-x, --lock-all-tables:锁定所有表
-l, --lock-tables:锁定备份的表
MyISAM,InnoDB 温备:
--single-transaction:启动一个大的单一事务实现备份
-B, --databases db_name1 db_name2 ...:备份指定的数据库 #自动创建空库
-C, --compress:压缩传输;
命令的语法格式:
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]:备份一个或多个库
mysqldump [OPTIONS] --all-databases [OPTIONS]:备份所有库
其它选项:
-E, --events:备份指定库的事件调度器;
-R, --routines:备份存储过程和存储函数;
--triggers:备份触发器
--master-data[=#]:
#为1时:记录CHANGE MASTER TO语句;此语句未被注释;
#为2时:记录为注释语句;
--flush-logs, -F:锁定表之后执行flush logs命令; #滚动二进制日志文件
注意:二进制日志文件与数据文件不应该放置于同一磁盘;为什么?
使用案例:每周完全备份,每日增量备份,hellodb单个库:
作业:写脚本, 用mysqldump实现对指定数据库的备份;
写脚本,实现利用binary logs完成增量备份;
物理备份:数据文件的时间一致性?
冷备:
几乎热备:lvm2快照
1、请求锁定所有表:
mysql> FLUSH TABLES WITH READ LOCK;
2、记录二进制日志文件及事件位置:
mysql> SHOW MASTER STATUS;
3、创建快照:
lvcreate -L SIZE -s -p r -n NAME /dev/VG_NAME/LV_NAME
4、释放锁:
mysql> UNLOCK TABLES
5、挂载快照卷,复制数据进行备份;
cp, rsync, tar等命令复制数据;
6、备份完成之后,删除快照卷;
思考?mysqldump做的备份,数据还原时,是否会产生二进制日志?
mysql> SET SESSION sql_log_bin=0;
mysql> SOURCE /path/from/somefile.sql;
mysql> SET SESSION sql_log_bin=1;
Xtrabackup:
percona, www.percona.com
innobackupex: 客户端工具, 以mysql协议连入mysqld,不支持离线备份
--user=
--password=
完整备份策略:完整备份 + 增量备份 + 二进制日志
注意:
1、将数据和二进制文件放置于不同的设备;二进制日志也应该周期性地备份;
2、将数据和备份分开存放,建议不在同一设备、同一主机、同一机房、同一地域;
3、每次灾难恢复后都应该立即做一次完全备份;
4、备份后的数据应该周期性地做还原测试;
从备份中恢复应该遵循的步骤:
1、停止MySQL服务器;
2、记录服务器配置和文件权限;
3、将备份恢复到MySQL数据目录;此步骤依赖具体的备份工具;
4、改变配置和文件权限;
5、以限制方式启动MySQL服务器:比如通过网络访问;
[mysqld]
skip-networking
socket=/tmp/mysql-recovery.sock
6、载入额外的逻辑备份;而检查和重放二进制日志;
7、检查已经还原的数据;
8、以完全访问模式重启服务器;
其它的备份工具:
SELECT ... INTO OUTFILE ‘‘
LOAD FILE
mylvmbackup
原文:http://xiexiaojun.blog.51cto.com/2305291/1723311