一台 mysql 5.0 服务器,升级到 5.1 后,发现原来有个 database 名字变成了 #mysql50#t-2008-zbb
,刚开始没在意想直接 RENAME DATABASE
,结果[这个语法由于过渡危险已经取消了](http://dev.mysql.com/doc/refman/5.1/en/rename-database.html),改用[ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME](http://dev.mysql.com/doc/refman/5.1/en/alter-database.html),结果执行错误:
mysql> ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
ERROR 1450 (HY000): Changing schema from '#mysql50#db_name' to 'db_name' is not allowed.
原来这里面还有个 [BUG](http://bugs.mysql.com/bug.php?id=43385) ,刚刚修正过来,发行版中肯定还没有呢。幸好,从中得到了提示,因为 View 的存在导致库无法升级的,删掉所有视图后 UPGRADE 成功:
mysql> ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
Query OK, 0 rows affected (0.08 sec)
这台服务器还作了双向同步,我还得手工重置同步状态,又是麻烦一连串儿的事情,幸亏这次操作的是测试服务器,下次升级正式服务器之前,记得先把所有 View 删掉,升级完成后再重新创建。
另外 RENAME DATABASE
实在是危险,我执行过程中出错终止了,结果一部分表在新库里、一部分表在旧库中,不小心把未转完的目标库删掉了(不然后面的正常 ALTER DATABASE 无法继续),结果就丢失了这些表的数据。
5.1这么危险地东西你都敢用
5.1 发布了有一段时间了,还没稳定下来么? 主要是看上了它的表分区功能,呵呵。