遇到MySQL的数据库需要重命名,发现只有rename table和rename user,没有rename database的用法。网上有多种解决办法,比如:mysqldump数据,再重新导入数据,不过由于数据量巨大,不合适我当前场景。
后来发现使用rename table来搞定,即,先创建一个database,然后依次通过rename table把表移进去,实际上mysql只是把表结构文件和数据文件移了个目录。当然停掉mysql,直接手动mv文件肯定是不行的。
第一次发现rename table还有把数据从一个库移到另一个库的功能:
RENAME TABLE db1.table1 TO db2.table1, db1.table2 TO db2.table2;
阅读rename的文档描述,还有一点值得一提,即rename table是原子操作,不会出现有读写发生在rename过程中,导致读写一半的问题。rename table也特别适合用来做表备份和按时间分表,方法是创建一个结构一样的空表,然后将原表rename成其他名字,同时将空表rename成原表。