如何使用终端在 MySQL 中备份和恢复表?
- 如何备份只有特定数据的表,例如特定月份的数据、特定公司的数据等?
- 如何压缩备份以便轻松地从一台服务器传输到另一台服务器?
- 如何在另一个系统/服务器上恢复表?
最佳答案
以下是我到目前为止学到的一些东西。
备份
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/