比如數據庫名稱old_db
想改名為new_db
- MySQL修改數據庫名稱比較麻煩,不支持直接修改,需要通過其它方式間接達到修改數據庫名稱的目的。
- 在 MySQL 5.1.23 之前的舊版本中,我們可以使用
RENAME DATABASE
來重命名數據庫,但此后版本,因為安全考慮,刪掉了這一條命令。
方法一:先導出數據,再導入數據
當數據庫體積比較小時,最快的方法是使用mysqldump
命令來創建整個數據庫的轉存副本,然后新建數據庫,再把副本導入到新數據庫中。
1.1 先創建新庫:
create database new_db;
1.2 使用mysqldump
導出數據:
mysqldump -uroot -p123456 --set-gtid-purged=OFF old_db > /tmp/old_db.sql
僅是做普通的本機備份恢復時,可以添加
--set-gtid-purged=OFF
作用是在備份時候不出現GTID信息
1.3 導入數據到新庫:
mysql -uroot -p123456 new_db < /tmp/old_db.sql
方法二:通過修改表名稱,間接實現修改數據庫名稱
使用此方法實際上將所有表從一個數據庫移動到另一個數據庫,這實際上重命名了該數據庫(MySQL沒有單個語句的操作),移動后原始數據庫繼續存在,但是里面沒有表。
RENAME TABLE
:https://dev.mysql.com/doc/refman/5.7/en/rename-table.html
2.1 先創建新庫:
create database new_db;
2.2 使用RENAME TABLE
命令修改表名,將表移動到新的庫里:
rename table old_db.tb to new_db.tb;
2.3 完成后刪除舊庫:
drop database old_db;
2.4 如何使用shell
腳本來批量修改表名:
- 當庫下表比較多的時候,用上面方法純手動也不現實,好在
linux
下可以用shell
腳本來批處理。 - 附上一個
shell
腳本批量修改表名稱。
#!/bin/bash
mysql -uroot -p123456 -e 'create database if not exists new_db;'
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='old_db'")
for table in $list_table
do
mysql -uroot -p123456 -e "rename table old_db.$table to new_db.$table"
done
mysql
登陸命令行參數
- -e, --execute=name # 執行mysql的sql語句
- -N, --skip-column-names # 不顯示列信息
- -s, --silent # 一行一行輸出,中間有tab分隔