【问题标题】:How to do a MySQL backup and restore using Terminal?如何使用终端进行 MySQL 备份和恢复?
【发布时间】:2015-10-22 17:00:41
【问题描述】:

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

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

【问题讨论】:

  • 这不止一个问题。
  • @ppperry - 是的。我已经试着回答了:)

标签: mysql database terminal backup mysqldump


【解决方案1】:

这是我目前学到的一些东西。

备份

备份完整的表并以 .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 数据库,则必须在 mysqldump 中使用 --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

请记住,无论您在何处恢复转储文件,都必须设置相同的表架构,除非您在转储文件中包含创建表定义。 是的,你可以这样做 - 你也可以包含架构定义。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多