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
更多方法更新中。。。。。。。。。。
即将秃头的程序员