《入门MySQL -备份与恢复》

  

  《入门MySQL -备份与恢复》

  

本篇文章将主要讲解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表误操作,需要单独恢复出这张表,那么我们可以这么做:

《入门MySQL -备份与恢复》