mysql rename database
mysql在5.1.7中增加了rename database,由于其不安全性,在5.1.23中又取消了,日常工作中常遇到需要修改db名字的情况,整理下重命名一个数据库的方法。
1. 使用rename table。很多知道这样用:
rename table old_name to new_name
其实它还有一个功能:
rename table a.old_name to b.new_name
写一个存储过程就可以实现整个库的迁移,速度很快。
2. 使用mysqldump。先备份再导入新库,这应该是很常用的方法。
mysqldump–u–p–h db>db_dump.sql
mysql–u–p–h–e“create database new_db;source db_dump.sql;”#确认新库正常工作后mysql–u–p–e“drop database db”
3. 使用myisam表。全部都是myisam表或者alter table为myisam表。使用下面的步骤:
1. 停止mysql server
2. 重命名数据目录中数据库的文件目录名称3. 启动mysql server
用脚本或者存储过程实现复制和重命名db。将其中sql改为create table a as select * from b可实现db的复制。
-
mysql>show create procedure p_db_renameG
-
***************************1.row***************************
-
Procedure:p_db_rename
-
sql_mode:
-
CreateProcedure:CREATE DEFINER=`root`@`%`PROCEDURE`p_db_rename`(inold_db varchar(45),innew_db varchar(45))
-
BEGIN
-
declare counts,finishedintdefault0;
-
declare tablename varchar(45)default'';
-
DECLARE cur1 CURSOR FOR SELECT table_namefrom`information_schema`.tableswheretable_schema=old_db;
-
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished=1;
-
#SELECT COUNT(*) into counts FROM `information_schema`.tables WHERE table_schema=new_db;
-
OPEN cur1;
-
FETCH cur1 INTO tablename;
-
loop1:LOOP
-
IF finished=1 THEN
-
CLOSE cur1;
-
LEAVE loop1;
-
END IF;
-
select concat('rename table ',tablename,'...') as info ;
-
set @sql=concat('RENAME TABLE ',old_db,'.',tablename,' to ',new_db,'.',tablename);
-
prepare sqls from @sql;
-
execute sqls;
-
FETCH cur1 INTO tablename;
-
end loop;
-
END
-
character_set_client: utf8
-
collation_connection: utf8_general_ci
-
Database Collation: latin1_swedish_ci
-
1 row in set (0.00 sec)
阅读(4387) | 评论(0) | 转发(0) |