这是我目前学到的一些东西。
备份
备份完整的表并以 .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 子句。如果有人对此有任何想法,请补充。