![带连字符的 MySQL 数据库名称](https://linux22.com/image/652962/%E5%B8%A6%E8%BF%9E%E5%AD%97%E7%AC%A6%E7%9A%84%20MySQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%8D%E7%A7%B0.png)
我最近将我的临时数据库服务器从 MySQL 5.0.84 升级到了 5.1.72。升级后,我尝试恢复 mysqldump。转储中的数据库名称是gss-app
。但是下面的数据库文件夹名称/var/lib/mysql
变成了,但是当我使用 登录到 mysql并键入gss@022dapp
时,它仅列出数据库名称,我可以使用命令列出表。mysql -u root -p
show databases;
gss-app
Use Database gss-app
show tables
恢复失败并出现错误Got a packet bigger than --max_allowed_packet size
。当时数据库已部分恢复,我借此机会将文件夹重命名gss@022dapp
为gss-app
并登录到mysql shell。
它将数据库名称列为@mysql@gss-app
,我无法进入数据库。现在我再次使用运行数据库恢复--max_allowed_packet_size=1024M
,我看到gss@022dapp
文件夹是在中创建的/var/lib/mysql
。
我应该关注文件夹名称吗/var/lib/mysql
?或者我可以在恢复时使用不同的数据库名称吗?
答案1
具体来说,关于在恢复时使用不同名称的问题:使用 mysqldump 您可以执行mysqldump databasename
或mysqldump --databases databasename
。前者不包含create db
语句,后者包含语句。
当您使用前一种语句进行转储时,您可以手动创建一个新的数据库并使用类似的方法加载转储mysql newdbname < dump.sql
。 如果是后者,您只需打开转储文件并更改名称即可。
附注:顺便说一句,我认为 MySQL 的设计mysqldump
存在这种差异,这很糟糕。如果您在备份时没有使用--databases
语句,则必须先创建数据库,然后才能恢复。并且该数据库的字符集或排序规则可能与数据库原来的不同。在我看来,如果您转储数据库,它应该包含所有数据和元数据。提供和也是如此--routines
。--events
我可以想象像这样的选项--no-routines
会很方便,但默认情况下不是抛弃惯例?嗯。