MySQL 数据库改名 - MySQL 系列教程

卡拉先生
发布于 2020年09月07日 | 上次编辑:2020年09月07日

如何重命名 MySQL 数据库名称
如何重命名 MySQL 数据库名称

在某些特别情况下,我们需要快速重命名 MySQL 数据库名称。在 MySQL 5.1.23 之前的旧版本中,我们可以使用 RENAME DATABASE 来重命名数据库,但此后版本,因为安全考虑,删掉了这一条命令。

本教程将讨论 2 种重命名 MySQL 数据库名的方法。如果你对 MySQL 还不了解,可以从我们的初学者教程开始看起。

同时也欢迎使用我们的数据库搜索工具「卡拉搜索」一行代码快速部署站内搜索,毫秒级搜索体验。卡拉搜索快速接入文档,欢迎体验。

接下来,我们先来看看重命名数据库的第一个方法,创建新库并导入数据。

方法一:创建新库并重新导入

当数据库体积比较小时,最快的方法通常是使用 mysqldump 命令来创建整个数据库的转存副本,然后新建数据库,再把副本导入到新数据库中。

mysqldump 命令是 MySQL 自带的逻辑备份工具,它的备份原理是通过命令连接到 MySQL 数据库,将需要备份的数据导出来,将导出来的数据转换成对应的 insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。

第一步:

$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql

首先我们将需要改名的数据库中的数据导出。我们使用-p 来标示密码,注意-p 和密码之间没有空格。-R 告诉mysqldump 备份存储过程(-- routines)

第二步:使用mysqldump 命令创建一个新的数据库并以我们需要的名字命名。

$ mysqladmin -u username -p"password" create newDbName

第三步:在新创建的数据库中,导入旧数据库中的数据。

$ mysql -u username -p"password" newDbName < oldDbName.sql

以上三个基本命令执行完毕后,确认所有数据都以在新库中就绪,然后就可以删除旧数据库。

方法二:创建新库后,使用 InnoDB 重命名「表的数据库名称」

如果我们使用的 MySQL 5.5 版(或更高版本),则可以使用 InnoDB 存储引擎,过程也非常简单。

我们可以在 MySQL 提示符下使用 [RENAME TABLE](https://dev.mysql.com/doc/refman/8.0/en/rename-table.html) 命令来更改特定数据库名称,同时保持名称不变。但在用这个命令来执行修改「表的数据库名称」前,想要修改的新数据库必须已经存在。因此,我们要先用 mysqladmin 命令来创建一个新数据库。(创建方法见方法一,这里不再重复)

我们来举例说明:

假如我们有一个比数据库名为 kalalog ,想要重命名为 kalalibrary 。我们首先要创建 kalalibrary 数据库:

$ mysqladmin -u username -p"password" create kalalibrary

现在进入 mysql 提示,然后用 RENAME TABLE 命令来重命名表的数据库。

mysql> RENAME TABLE kalalog.books TO kalalibrary.books;

以上命令表示将books 表从kalalog 数据库迁移到我们刚刚新建的数据库kalalibrary中。如果迁移的表比较少,我们可以直接手动操作,如果迁移的表比较多,可以使用 shell 脚本来快速完成。

如何使用 shell 脚本来批处理「表的数据库」重命名

少量表单我们可以直接手动RENAME TABLE 用此命令完成迁移。但如果量比较大,纯手动也不现实,好在我们可以用 shell 脚本来批量处理。

这个命令的基本结构:

$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done

我们的例子中,我们想把kalalog数据库的数据迁移到新数据库kalalibrary 中。那么我们可以这么修改:

$ mysql -u dbUsername -p"dbPassword" kalalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE kalalog.$table TO kalalibrary.$table"; done

顺便说一下,这个命令中标示的意义:

  • -s silent mode 减少 shell 输出的显示信息。
  • -N 禁止在输出结果中显示 列 ( column ) 名称。
  • -e 表示-e 标示后的语句应该在 shell 执行完成后执行。即 'show tables'"RENAME TABLE kalalog.$table TO kalalibrary.$table" 这两条,会按照 SQL 语句来执行。

扩展阅读:

数据库 系列教程

相关文章

友情链接更新日志© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3