带连字符的 MySQL 数据库名称

带连字符的 MySQL 数据库名称

我最近将我的临时数据库服务器从 MySQL 5.0.84 升级到了 5.1.72。升级后,我尝试恢复 mysqldump。转储中的数据库名称是gss-app。但是下面的数据库文件夹名称/var/lib/mysql变成了,但是当我使用 登录到 mysql并键入gss@022dapp时,它仅列出数据库名称,我可以使用命令列出表。mysql -u root -pshow databases;gss-appUse Database gss-appshow tables

恢复失败并出现错误Got a packet bigger than --max_allowed_packet size。当时数据库已部分恢复,我借此机会将文件夹重命名gss@022dappgss-app并登录到mysql shell。

它将数据库名称列为@mysql@gss-app,我无法进入数据库。现在我再次使用运行数据库恢复--max_allowed_packet_size=1024M,我看到gss@022dapp文件夹是在中创建的/var/lib/mysql

我应该关注文件夹名称吗/var/lib/mysql?或者我可以在恢复时使用不同的数据库名称吗?

答案1

具体来说,关于在恢复时使用不同名称的问题:使用 mysqldump 您可以执行mysqldump databasenamemysqldump --databases databasename。前者不包含create db语句,后者包含语句。

当您使用前一种语句进行转储时,您可以手动创建一个新的数据库并使用类似的方法加载转储mysql newdbname < dump.sql。 如果是后者,您只需打开转储文件并更改名称即可。

附注:顺便说一句,我认为 MySQL 的设计mysqldump存在这种差异,这很糟糕。如果您在备份时没有使用--databases语句,则必须先创建数据库,然后才能恢复。并且该数据库的字符集或排序规则可能与数据库原来的不同。在我看来,如果您转储数据库,它应该包含所有数据和元数据。提供和也是如此--routines--events我可以想象像这样的选项--no-routines会很方便,但默认情况下不是抛弃惯例?嗯。

相关内容