前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操做,被一些细节问题战胜,真是操蛋。mysql
若是表示MyISAM那么能够直接去到数据库目录mv就能够。面试
Innodb彻底不行,本身测试过,会提示相关表不存在。sql
第一种方法:数据库
1
|
RENAME database olddbname TO newdbname
|
这个是5.1.7到5.1.23版本能够用的,可是官方不推荐,会有丢失数据的危险安全
第二种方法:bash
1.建立须要改为新名的数据库。
2.mysqldum 导出要更名的数据库
3.删除原来的旧库(肯定是否真的须要)
固然这种方法虽然安全,可是若是数据量大,会比较耗时,哎,当时连这种方法都没有想到,真有想死的冲动。测试
第三种方法:spa
我这里就用一个脚本,很简单,相信你们都看的懂code
复制代码orm
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/bash
# 假设将sakila数据库名改成new_sakila
# MyISAM直接更改数据库目录下的文件便可
mysql -uroot -p123456 -e
'create database if not exists new_sakila'
list_table=$(mysql -uroot -p123456 -Nse
"select table_name from information_schema.TABLES where TABLE_SCHEMA='sakila'"
)
for
table
in
$list_table
do
mysql -uroot -p123456 -e
"rename table sakila.$table to new_sakila.$table"
done
|
这里用到了rename table,改表名的命令,可是若是新表名后面加数据库名,就会将老数据库的表移动到新的数据库,因此,这种方法即安全,又快速。
实例配置:
cat weifeng_rename.sh #!/bin/bash # 假设将weifeng数据库名改成weifeng_test mysql -uroot -p123456 -e 'create database if not exists weifeng_test' list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='weifeng'") for table in $list_table do mysql -uroot -p123456 -e "rename table weifeng.$table to weifeng_test.$table" done