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

标签 mysql database terminal backup mysqldump

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

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

最佳答案

以下是我到目前为止学到的一些东西。

备份

To backup the complete table and have the output in .sql format

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

To backup the complete table and have the output in .sql.gz format - Pipe with gzip - this will compress the output to a good extent. Really helps if you have to transport a backup file from one server and restore it on another server

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

Especially when you have monthly or weekly data archival processes, you will need to archive data for a certain period of time: just add a where clause like this:

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

What if I have multiple tables?

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

What about the complete database schema?

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

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

A simple gunzip or zcat will do your job. I prefer zcat but you can use gunzip -c also to do the same job.

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

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

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

关于mysql - 如何使用终端进行 MySQL 备份和恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33286540/

相关文章:

javascript - 添加 auto_increment id 列后无法使用 php 和 javascript 将数据添加到 mysql 数据库

php - 直接将CSV文件数据插入mysql,

xcode - 如何从 iOS 设备的终端运行 Xcode 项目?

c - 如何将参数从终端传递给函数

linux - 需要帮助来创建简单的 bash 脚本

mysql - 数据模型: Having separate table for a field vs having it as a column in the main table

mysql - 如何在mysql中从不同表名具有不同值的多个列中选择?

php - 从数据库 PHP 填充下拉列表

c# - 我怎么知道数据库中是否存在这样的值? (ADO.NET)

mysql - Node Red MySQL无法连接到本地工作的docker MySQL服务器