繁体   English   中英

完成MySQL转储的数据库重置?

[英]Complete database reset for MySQL dump?

这似乎是一个非常愚蠢的问题,但我没有以任何其他方式学习它,我只是想澄清一下。

我刚刚开始使用MySQL,为了测试各种场景,我备份了我的数据库。 我使用MySQL转储:

出口:

mysqldump -hSERVER -uUSER -pPASSWORD --all-databases> filename.sql

进口:

mysql -hSERVER -uUSER -pPASSWORD <filename.sql

很容易,直到现在它工作得很好,当我注意到这个“设置”有点问题:它没有完全“重置”数据库和表。 例如,如果在创建转储文件后添加了附加表,则在导入相同的转储文件时,该附加表不会消失。 它本质上只是“纠正”已存在的表并重新创建任何数据库或表缺失,但不会删除任何其他表,这些表恰好具有不在转储文件中的名称。

我想要做的是在导入这样的转储文件时完全重置服务器上的所有数据库。 什么是最好的解决方案? 是否有为此目的保留的特殊导入功能,还是我必须先自行删除数据库? 或者这是一个坏主意?

您可以使用参数--add-drop-database在每个“create database”语句之前向转储添加“drop database”语句。

例如

mysqldump -hSERVER -uUSER -pPASSWORD --all-databases --add-drop-database> filename.sql

看到这里了解详情。

您描述的转储和恢复过程没有任何魔力。 mysqldump写出描述您要转储的数据库或数据库的当前状态的SQL语句。 它必须在您要转储的每个数据库中获取一个表列表,然后它必须逐个读取这些表并将它们写为SQL。 在任何规模的数据库上,这需要时间。

因此,如果在mysqldump运行时创建新表,则可能无法获取该新表。 同样,如果您的应用程序软件在mysqldump运行时更改了表的内容,则这些更改可能会也可能不会显示在备份中。

您可以查看mysqldump写出的.sql文件以查看它们已经获取的内容。 如果你想确保你的转储.sql文件是完美的,你需要在一个安静的服务器上运行mysqldump - 没有人运行数据定义语言。

MySQL热备份解决方案可用。 你可能需要研究一下。

OP可能需要调查

mysql_install_db

如果他们想要在恢复一个或多个转储的数据库之前重新启动安装后的默认设置。 对于生产服务器,另一个有用的脚本是:

mysql_secure_installation

此外,他们可能更喜欢转储他们单独创建的数据库:

mysqldump -hSERVER -uUSER -pPASSWORD --database foo > foo.sql

避免无意中更改内部数据库:mysql,information_schema,performance_schema。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM