首页 > 数据库技术 > 详细

mysql备份和恢复

时间:2015-12-15 19:32:39      阅读:359      评论:0      收藏:0      [点我收藏+]

一、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


mysql备份和恢复

原文:http://xiexiaojun.blog.51cto.com/2305291/1723311

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!