问题描述
想修改数据库名,发现不能使用 rename 操作。
1. 官方不支持 rename database 的操作。
2. 可以使用 shell 脚本实现安全高效得改名
3. windows 平台通过安装 git for windows 可以解析 shell 脚本
4. Innodb 比 MyISAM 的改名步骤更为复杂
尝试解决
-
直接修改磁盘文件命名
将data目录中的db_name目录重命名为new_db_name :MyISAM 成功, Innodb 失败
具体原因【推测】为 Innodb 和 MyISAM 的数据存储结构不同,Innodb将索引和数据问题全都放入ibd文件,只修改ibd文件名,其内部的索引和数据的组织依赖还未能修改。而MyISAM将索引和数据拆分,修改文件名后能同时修改索引和数据的依赖。
-
使用脚本
2.1 必备知识点:把【INFORMATION_SCHEMA】 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
在 【INFORMATION_SCHEMA 】中,有数个 只读 表。它们实际上是 视图 ,而不是基本表,因此,你将无法看到与之相关的任何文件。脚本中使用 information_schema.TABLES 用于检索带指定数据库前缀的表名【TABLE_SCHEMA】可理解为数据库名, MySQL 中 database 和 schema 几乎可以等价
修改表的前缀名,相当于调整该表文件的目录
cmd : mysql -? 可以查看运行参数的含义
git : sh xx.sh 可以在 windows 上执行shell脚本
#!/bin/sh old_db="practice1" new_db="practice" mysql -uroot -proot -e "create database if not exists ${new_db}" list_table=$(mysql -uroot -proot -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA = '${old_db}'") for table in $list_table do mysql -uroot -proot -e "use $old_db;rename table $table to $new_db.$table"; done mysql -uroot -proot -e "drop database $old_db;"
参考博文:
https://www.cnblogs.com/allenhua/p/5393189.html
https://blog.csdn.net/weixin_38972910/article/details/86012110