MySQL里可以很容易地改表名:
RENAME TABLE tbl_name TO new_tbl_name;
但是要改数据库名就不是那么容易了。rename是不支持改数据库名的。
如果MySQL是可以停服的,那就很简单,因为数据库名其实对应了磁盘的一个路径名,直接mv就可以。
如果MySQL不能停服,但是数据量比较小,那就使用mysqldump,整个导出,再建新库,再整个导入。
如果MySQL不能停服,而且数据量还非常之巨大,而之所以要改名,是要把db改成db_bak,在确保线上确实不会出问题后,再选择合适的空闲时间drop掉这个db_bak。这就是我遇到场景。
此时有个小技巧,就是rename可以用于表的迁移,即可以将一个表从db1移动到db2下。所以改数据库名字的步骤就是:1. 新建库;2. 把表依次迁移到新库;3. drop掉原来的库。SQL举例:
CREATE DATABASE `db_bak`;
rename table db.t1 to db_bak.t1;
rename table db.t2 to db_bak.t2;
...
drop database db;