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)