如何使用终端进行MySQL备份和恢复?

时间:2015-10-22 17:00:41

标签: mysql database terminal backup mysqldump

如何使用终端在MySQL中备份和恢复表?

  1. 如何仅使用某些数据备份表格,例如某些月份的数据,某些公司的数据等?
  2. 如何压缩备份以便从一台服务器轻松传输到另一台服务器?
  3. 如何在其他系统/服务器上恢复表?

1 个答案:

答案 0 :(得分:3)

到目前为止,我已经学到了一些东西。

备份

  

备份整个表并以.sql格式输出

mysqldump -h localhost -u root -p schema_name table_name > table_name_backup.sql
  

备份整个表并以.sql.gz格式输出 - 使用gzip管道 - 这将很好地压缩输出。如果您必须从一台服务器传输备份文件并将其还原到另一台服务器上,那么确实有帮助

mysqldump -h localhost -u root -p schema_name table_name | gzip > table_name_backup.sql.gz

关于在转储文件中跳过锁的说法:在执行备份和归档作业时,如果应用程序继续读取和写入mysql数据库,则必须使用mysckldump的--skip-add-locks选项。这将排除mysqldump转储的文件中的代码。

mysqldump -h localhost -u root -p --skip-add-locks my_schema my_table | gzip > my_table.sql.gz
  

特别是当您有月度或每周数据存档过程时,您需要将数据存档一段时间:只需添加如下所示的where子句:

mysqldump -h localhost -u root -p my_schema my_table --where="creation_date between 
'2015-10-01' and '2015-10-30'" | gzip > my_table_backup.sql.gz
  

如果我有多个表怎么办?

mysqldump -h localhost -u root -p my_schema my_table1 my_table2 my_table3 | gzip > my_tables_backup.sql.gz
  

完整的数据库架构怎么样?

mysqldump -h localhost -u root -p my_schema | gzip > my_schema.sql.gz

恢复

我第一次进行备份时,无法找到该文件,但我知道文件名。要跟踪文件的路径,如果您知道文件名,请使用readlink -f name_of_the_file

readlink -f name_of_the_file

这将为您提供文件的确切位置。

  

一个简单的gunzip或zcat将完成你的工作。我更喜欢zcat,但你也可以使用gunzip -c做同样的工作。

zcat /home/username/backups/my_table_backup.sql.gz | 
mysql -h localhost -u root -p my_schema

请记住,除非您在转储文件中包含create table定义,否​​则无论在何处还原转储文件,都必须设置相同的表模式。 是的,您可以这样做 - 您也可以包含架构定义。

有时,mysqldump中使用的--where子句不保证精度。例如,当我加载一个有3000万条记录的表时,我发现超过1000条记录没有满足我在转储文件时使用的where子句。如果有人对此有任何想法,请添加。