MySQL管理与优化(20):备份与恢复

备份与恢复:

  • 备份使得数据库的中的数据更加高效安全

备份/恢复策略:

进行备份或恢复时须要考虑的一些因素: html

  • 肯定要备份的表的存储引擎是事务性仍是非事务性,两种不一样存储引擎备份方式在处理数据一致性方面是不太同样的。
  • 确实使用全量备份仍是增量备份。全备份的优势是备份保持最新备份,恢复的时候能够花费更少的时间;缺点是若是数据量过大,将花费不少的时间,并对系统形成较长时间的压力。增量备份则偏偏相反,只需备份天天的增量日志,备份时间少,对负载压力下;缺点是恢复的时候须要全备份加上次备份到故障前的全部日志,恢复时间会长些。
  • 能够考虑采起复制的方法来作异地备份,但复制不能代替备份,它对数据库的误操做也是无能为力。
  • 按期作备份,备份的周期要充分考虑系统能够承受的恢复时间。备份要在系统负载较小的时候进行。
  • 确保MySQL打开log-bin选项,有了BINLOG,MySQL才能够在必要的时候作完整恢复,或基于时间点的恢复,或基于位置的恢复。
  • 要常常作备份恢复测试,确保备份是有效的,而且是能够恢复的。

逻辑备份和恢复:

  • 逻辑备份能够针对不一样的存储引擎,而使用相同的方法来备份;而物理备份对于不一样的存储引擎会有不一样的方法。

备份:

  • MySQL中的逻辑备份将数据库中的数据备份为一个文本文件,备份的文件能够查看和编辑。
  • 咱们能够是使用mysqldump工具实现备份,如:
-- 备份全部数据库
mysqldump -uroot -p --all-database > all.sql

-- 备份数据库test
mysqldump -uroot -p test > test.sql

-- 备份数据库test下的表emp
mysqldump -uroot -p test emp > test_emp.sql

-- 备份数据库test下的表emp, dept
mysqldump -uroot -p test emp dept > test_emp_dept.sql

-- mysqldump --help可查看更多选项
  • 为了保证数据备份的一致性,对于MyISAM表备份时须要加上-l参数,对于InnoDB可采用--single-transaction选项。

彻底恢复:

  • 一样,咱们可使用mysqldump实现简单的恢复:
-- 恢复某个数据库
mysql -uroot -p db_name < bakfile

-- 上面的恢复可能不完整,还须要将备份后执行的日志进行重作
mysqlbinlog binlog-file | mysql -uroot -p db_name

基于时间点恢复:

  • MySQL恢复中分为彻底恢复非彻底恢复,非彻底恢复分为基于时间点的恢复和基于位置的恢复。
  • 基于时间点的恢复:
-- 若上午10点发生了误操做,能够用下面的语句进行恢复
mysqlbinlog --stop-date="2014-10-06 9:59:59" bin_log_file | mysql -uroot -p****

-- 跳过10点的误操做,再恢复
mysqlbinlog --start-date="2014-10-06 10:00:01" bin_log_file | mysql -uroot -p****

基于位置恢复:

-- 保存某时间段内的日志
mysqlbinlog --start-date="2014-10-06 12:10:20" --stop-date="2014-10-06 12:15:00" bin_log_file > temp_file

-- 越过某些位置的日志,进行恢复,如跳过1000~2000位置的日志
mysqlbinlog --stop-position="1000" bin_log_file | mysql -uroot -p****
mysqlbinlog --start-position="2000" bin_log_file | mysql -uroot -p****

物理备份和恢复:

  • 物理备份又分为冷备份热备份两种,和逻辑备份相比,优势是备份和恢复的速度更快。

冷备份:

  • 停掉MySQL服务,在操做系统级别恢复MySQL的数据文件;重启MySQL服务,使用mysqlbinlog工具恢复备份以来全部的BINLOG。

热备份:

  • 热备份须要针对不一样存储引擎,主要是MyISAM和InnoDB。
  • MyISAM存储引擎:
-- 1. 使用mysqlhotcopy工具
mysqlhotcopy -u root -p **** db_name /path/to/new_directory

-- 2. 手动锁表复制
flush tables for read;
-- 复制数据文件到备份目录
  • InnoDB存储引擎:

能够参考收费工具ibbackup,http://dev.mysql.com/doc/mysql-enterprise-backup/3.7/en/ihb-meb-compatibility.html mysql

表的导入导出:

导出:

  • 有时咱们须要对数据库表进行导出,以:

        1. 做为Excel显示; sql

        2. 为了节省备份空间数据库

        3. 为了快速加载数据,LOAD DATA的加载速度比普通的SQL加载快20倍以上。 安全

  • 能够有两种办法来实现:
-- 使用SELECT ... INTO OUTFILE ...
SELECT * FROM table_name INTO OUTFILE 'file_name' [option];

其中option选项: 工具


NOTE: 
SELECT ... INTO OUTFILE ...产生的输出文件若是已存在,将会建立失败,不会覆盖原文件。

第2种方法是用mysqldump导出: 测试

mysqldump -u username -T target_dir db_name table_name [option]
其中option选项:

导入:

  • 使用LOAD DATA INFILE:
LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE table_name [option]
其中option选项以下:

  • 使用mysqlimport:
mysqlimport -u root -p*** [--LOCAL] db_name file_name [option]
其中option:

NOTE: 若是导入和导出是跨平台操做的(Windows和Linux),那么要注意设置参数line-terminated-by,Windows上设置为line-terminated-by='\r\n',Linux上设置line-terminated-by='\n'。 spa

不吝指正。 操作系统

相关文章
相关标签/搜索