这可能看起来像一个非常愚蠢的问题,但我没有以任何其他方式学习它,我只是想澄清一下。
我刚开始使用MySQL,为了测试各种场景,我备份了我的数据库。我使用MySQL转储:
导出:
mysqldump -hSERVER -uUSER -pPASSWORD --all-databases> filename.sql
导入:
mysql -hSERVER -uUSER -pPASSWORD< filename.sql
足够简单,直到现在它都运行良好,当我注意到这个“设置”有点问题时:它没有完全“重置”数据库和表格。例如,如果在创建转储文件后添加了附加表,则在导入相同的转储文件时,该附加表不会消失。它本质上只是“纠正”已存在的表并重新创建任何数据库或表缺失,但不会删除任何其他表,这些表恰好具有不在转储文件中的名称。
我想要做的是在导入这样的转储文件时完全重置服务器上的所有数据库。什么是最好的解决方案?是否有为此目的保留的特殊导入功能,还是我必须先自行删除数据库?或者这是个坏主意?
答案 0 :(得分:2)
您可以使用参数--add-drop-database在每个“create database”语句之前向转储添加“drop database”语句。
e.g。
mysqldump -hSERVER -uUSER -pPASSWORD --all-databases --add-drop-database> filename.sql
有关详细信息,请参阅here。
答案 1 :(得分:0)
您描述的转储和恢复过程没有任何魔力。 mysqldump
写出描述您要转储的数据库或数据库的当前状态的SQL语句。它必须在您要转储的每个数据库中获取一个表列表,然后它必须逐个读取这些表并将它们写为SQL。在任何规模的数据库上,这都需要时间。
因此,如果在mysqldump
运行时创建新表,则可能无法获取该新表。同样,如果您的应用程序软件在mysqldump
运行时更改了表的内容,则这些更改可能会也可能不会显示在备份中。
您可以查看.sql文件mysqldump
写出来查看他们已经获取的内容。如果您想确保转储的.sql文件是完美的,则需要在安静的服务器上运行mysqldump
- 没有人运行数据定义语言。
可以使用MySQL热备份解决方案。你可能需要研究一下。
答案 2 :(得分:0)
OP可能需要研究
mysql_install_db
如果他们想要在安装后的默认设置上重新开始 恢复一个或多个转储的DB之前的设置。对于 生产服务器,另一个有用的脚本是:
mysql_secure_installation
此外,他们可能更愿意转储他们单独创建的数据库:
mysqldump -hSERVER -uUSER -pPASSWORD --database foo > foo.sql
以避免无意中更改内部数据库: mysql,information_schema,performance_schema。