MYSQL在修改库名称的常见办法:
1:MYISAM下,库名称只是一个文件夹名称,修改时停MYSQL服务,把库名称的文件夹改名,再重启服务即可
2:MYSQLDUMP备份出文件,再还原到新库里,删除旧库(INNODB,MYISAM通用)
3:INNODB下,库名称被记录到数据字典内,改文件夹名称无效,可以通过rename table a.t to b.t 来实现。
下面对方法3进行测试
- [root@devdb7 mysql]# du -shc ng11
- 250G ng11
- 250G total
转换存储过程:
- drop procedure if exists Clear_DB;
- delimiter //
- CREATE PROCEDURE Clear_DB(
- ORIGIN_DB_NAME varchar(500),
- TARGET_DB_NAME varchar(500)
- )
- BEGIN
- DECLARE done INT DEFAULT 0;
- DECLARE a varchar(200);
- DECLARE b varchar(200);
- DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=ORIGIN_DB_NAME ;
- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
- OPEN cur1;
- REPEAT
- FETCH cur1 INTO a;
- IF NOT done THEN
- set b=concat('rename table ',ORIGIN_DB_NAME,'.',a,' to ',TARGET_DB_NAME,'.',a); #
- SET @E=b;
- PREPARE stmt1 FROM @E;
- EXECUTE stmt1; # 执行命令
- DEALLOCATE PREPARE stmt1; #释放对象
- END IF;
- UNTIL done END REPEAT;
- CLOSE cur1;
- END;
- //
- delimiter ;
执行SQL
- mysql> call clear_db('ng11','test');
- Query OK, 0 rows affected, 1 warning (9 min 24.24 sec)
用方法3需要注意的几点:
1:表内的触发器不允许存在,如果有触发器的,先把触发器删除,rename之后再加上
2:如果目的库有表和原库有重名的表,会提示表存在,rename失败
阅读(911) | 评论(0) | 转发(0) |