MySQL备份&恢复

备份的目的

根据需求以及目的,选择不同的备份方式。

  • 做灾难性恢复(对损坏的数据进行恢复和还原)

  • 需求改变(因需求改变而需要把数据还原到改变以前)

  • 测试

根据不同情景选择备份方式:

  • 可以容忍丢失多长时间的数据?

  • 恢复数据的时间有没有限制?

  • 恢复数据的同时,是否需要正常提供服务?

  • 恢复的对象,整库、多表、单库、单表?

备份分类

备份方式从物理与逻辑的角度分类,分为以下几类:

  • 物理备份(指对数据库操作系统的物理文件(如数据文件、日志文件等)的备份,物理备份又可以分为脱机备份(冷)和联机备份(热))

    • 冷备:需要关闭mysql服务,读写请求均不允许的状态下进行,但能够较好的保证数据库的完整性。

    • 温备:服务在线,但仅支持读;不允许写。

    • 热备:备份的同时,业务不受影响,这种备份方法依赖于数据库的日志文件。

      注意:选用什么类型的备份,取决于业务的需求,MyISAM不支持热备,InnoDB支持热备,但是需要专门的工具

  • 逻辑备份(指对数据库逻辑组件如表等数据库对象的备份)

从数据库的备份策略角度分:

  • 完全备份:每次都对数据进行完整的备份,可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象;但它需要花费更多的时间和空间,所以做一次完全备份的周期时间比较长。

  • 差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库部分的内容。它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。

  • 增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份,备份的频率取决于数据更新频率。

mysqldump工具

mysqldump:常用于做温备,所以需要对想备份的数据施加读锁(非线上不需要加锁)。

读锁

--lock-all-tables:是对要备份的数据库的所有表施加读锁。

--lock-table:仅对单张表施加读锁,即使是备份整个数据库,它也是在我们备份某张表的时候才对该表施加读锁,因此适用于备份单张表。

# 施加锁,表示把位于内存上的表统统都同步到磁盘上去,然后施加读锁
mysql> flush tables with read lock; 
# 释放读锁
mysql> flush tables with read lock;
"""
但这对于InnoDB存储引擎来讲,虽然你也能够请求道读锁,但是不代表它的所有数据都已经同步到磁盘上,因此当面对InnoDB的时候,我们要使用。
"""
mysql> show engine innodb status; 
# 看看InnoDB所有的数据都已经同步到磁盘上去了,才进行备份操作。

备份数据

找到mysql物理文件保存位置,一般默认在 /var/lib/mysql 目录下。

 

可以看到我创建的daili库,在这个文件夹下,执行下面命令进行备份。

mysqldump -uroot -p123456 daili >/root/daili.sql 
# 如需同时备份多个数据库
mysqldump -uroot -p123456 daili01 daili02 >/root/daili.sql 
# 如需将全部数据库备份
mysqldump -uroot -p123456  --opt  --all-databases >/root/daili.sql 

# 表结构进行备份
mysqldump -u root -p123456 -d daili tb_system> /opt/desc-tb_system.sql  # 备份daili库下的tb_system表结构

恢复数据

如果想恢复数据,必须将原来的数据删除,才能导回。步骤:删除daili库、新建一个daili库、执行恢复命令。

# 将备份在root下的daili.sql还原进daili库
mysql -uroot -p123456 daili < /root/daili.sql

 

更多方法更新中。。。。。。。。。。

posted @ 2019-06-11 19:32  CLuke  阅读(142)  评论(0编辑  收藏  举报
Live2D