本篇文章将主要讲解MySQL数据库数据备份与恢复相关知识,主要聚焦于逻辑备份,介绍,mysqldump工具的使用以及恢复方法。
这里简单讲下物理备份和逻辑备份的概念:
物理备份:备份数据文件,转储数据库物理文件到某一目录。物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用xtrabackup工具来进行物理备份。
逻辑备份:对数据库对象利用工具进行导出工作,汇总入备份文件内。逻辑备份恢复速度慢,但占用空间小,更灵活.MySQL中常用的逻辑备份工具为,mysqldump。
若想用,mysqldump备份整个实例,可以使用,所有数据库或——参数:
<>以前mysqldump -uroot  -pxxxxxx ——all-databases 祝辞,/tmp/all_database.sql mysqldump -uroot -pxxxxxx -A 祝辞,/tmp/all_database.sql
有的时候我们会遇到只需要备份某些库的需求,这个时候我们就可以使用,数据库或- b参数了,该参数后面跟数据库名称,多个数据库间用空格隔开。
<>以前mysqldump -uroot  -pxxxxxx ——databases testdb1 testdb2 祝辞,/tmp/testdb.sql mysqldump -uroot -pxxxxxx -B testdb1 testdb2 祝辞,/tmp/testdb.sql
平时我们也会有备份部分表的需求,比如说在表变更前做个备份,那么我们可以这样做:
#只备份testdb库中的test_tb表,mysqldump -uroot -pxxxxxx testdb test_tb 祝辞,/tmp/test_tb.sql #备份多张表,mysqldump -uroot -pxxxxxx testdb tb1 tb2 tb3 祝辞,/tmp/tb.sql
有些时候一张表的数据量很大,我们只需要部分数据,那么该怎么办呢?这时候就可以使用,选项了。后面附带需要满足的条件,例如:我们只需要tb1表中create_time大于2019-08-01的数据,那么可以这样导出:
mysqldump -uroot -pxxxxxx  testdb tb1 ——=? create_time 祝辞=,& # 39;2019 - 08 - 01,就是# 39;,“,祝辞,/tmp/tb1.sql
如果我们想备份某个库,但是某些表数据量很大或者与业务关联不大,这个时候可以考虑排除掉这些表,同样的,选项——ignore-table可以完成这个功能。
<>以前mysqldump -uroot  -pxxxxxx testdb ——ignore-table=testdb.tb1 祝辞,/tmp/testdb.sql
只备份结构的话可以使用,没有数据简写为- d选项,只备份数据可以使用,no-create-info简写为- t选项。
<>以前mysqldump -uroot  -pxxxxxx testdb ——no-data 祝辞,/tmp/testdb_jiegou.sql mysqldump -uroot -pxxxxxx testdb ——no-create-info 祝辞,/tmp/testdb_data.sql
, mysqldump备份默认是不包含存储过程,自定义函数及事件的。我们可以使用,例程或- r选项来备份存储过程及函数,使用,事件或- e参数来备份事件。例如:我们想备份整个testdb库,包含存储过程及事件:
<>以前mysqldump -uroot  -pxxxxxx -R -E ——databases testdb 祝辞,/tmp/testdb.sql
如果我们想在转储过程中保证数据的一致性,减少锁表,则可以用——单一事务选项,这个选项对InnoDB的数据表很有用,且不会锁表。
<>以前mysqldump -uroot  -pxxxxxx ——single-transaction ——databases testdb 祝辞,/tmp/testdb.sql
如果我们现在有昨天的全量备份,现在想整个恢复,则可以这样操作:
<>以前mysql -uroot  -pxxxxxx & lt;,/tmp/all_database.sql
可能有这样的需求,比如说我们只想恢复某一个库,但是我们有的是整个实例的备份,这个时候我们想到能不能从全量备份中分离出单个库的备份,答案是可以的,下面这个简单的外壳可以帮到你哦:
<>以前sed -n & # 39;/^——, Current 数据库:,testdb/,/^——, Current 数据库:,“/p # 39;, all_databases.sql 祝辞,testdb.sql #分离完成后我们再导入testdb.sql即可恢复单个库
这个需求还是比较常见的,毕竟单库或全量恢复涉及的业务还是比较多的,恢复时间也比较长,比如说我们知道哪个表误操作了,那么我们就可以用单表恢复的方式来恢复。例如:现在我们有testdb整库的备份,但是由于tb1表误操作,需要单独恢复出这张表,那么我们可以这么做: