如何修改MySQLmysql改数据库名称称

zhujzhuo 的BLOG
用户名:zhujzhuo
访问量:1096
注册日期:
阅读量:5863
阅读量:12276
阅读量:382047
阅读量:1073882
51CTO推荐博文
大家好:现在分享一下最近的一个测试。大家都知道,在mysql里面,没有提供重命名一个数据库的语句(其实在MySQL 5.1.7 to 5.1.23也有使用过rename database,但是因为很多的危险性,之后的版本就摒弃了这个功能),那么如何在mysql数据库中高效的重命名一个数据库呢?1、使用mysqldump备份出数据库,之后删除原来的数据库,再dump文件中修改旧数据库名称为新的名称,再导入数据库,修改数据库中的相关用户权限(mysqldump的参数必须包含视图、触发器、函数、存储过程等,这里不再说明了)1 &234[root@percona ~]# &mysqldump emp & emp.out[root@percona ~]# &mysql -e "CREATE DATABASE"[root@percona ~]# &mysql &employees & emp.out [root@percona ~]# &mysql -e "DROP DATABASE"优点:操作比较简单,不易出错弊端:在遇到数据库较大的时候,时间和磁盘空间都会有很高的要求2、利用renametable的方式实现数据库重命名主要操作步骤:A)新建数据库:create databaseB)重命名旧数据库中的表到新的数据库中,包含视图、触发器等:rename table C)删除旧数据库D)重授权相关用户的权限因为操作较为复杂,先附上两个脚本,rename_db.sh完成数据库表、触发器、事件、函数、存储过程,rename_grants.sh完成相关用户的授权转换脚本执行方法:A)bash rename_db.sh &localhost &old_database_name &new_database_nameB)bash &rename_grants old_database_name &new_database_name注:如果要使用的话,可以自己先测试一下,看看是否有问题,欢迎修改脚本和指正看不见附件,贴出来了1、rename_db.sh#!/bin/bash# Copyright 2013 &zhujzhuo. ~/.bash_profile && /dev/null 2&&1if [ $# -lt 3 &]; then & &echo "rename_db &server& &database& &new_database&" & &exit 1fiold_db_exists=`mysql -h $1 &-e "show databases like '$2'" -sss `if [ -z "$old_db_exists" ]; then & &echo "ERROR: Old database not &exists $2" & &exit 1fidb_exists=`mysql -h $1 -s -e "show databases like '$3'" -sss `if [ -n "$db_exists" ]; then & &echo "ERROR: New database already exists $3" & &exit 1fiTIMESTAMP=`date +%s`character_set=`mysql -h $1 -e "show create database $2\G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print $2}' | awk '{print $1}'`TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`STATUS=$?if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then & &echo "Error retrieving tables from $2" & &exit 1fiecho "create database $3 DEFAULT CHARACTER SET $character_set"mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"TRIGGERS=`mysql -h $0 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`if [ -n "$VIEWS" ]; then & &mysqldump -h $1 $2 $VIEWS & /tmp/${2}_views${TIMESTAMP}.dumpfimysqldump -h $1 $2 -d -t -R -E & /tmp/${2}_triggers${TIMESTAMP}.dumpif [ &-n $TRIGGERS &];then & for TRIGGER in $TRIGGERS ; do & & & echo "drop trigger $TRIGGER" & & & /usr/bin/mysql -h $1 $2 -e "drop trigger $TRIGGER" & donefifor TABLE in $TABLES; do & &echo "rename table $2.$TABLE to $3.$TABLE" & &mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"doneif [ -n "$VIEWS" ]; then & &echo "loading views" & &mysql -h $1 $3 & /tmp/${2}_views${TIMESTAMP}.dumpfiecho "loading triggers, routines and events"mysql -h $1 $3 & /tmp/${2}_triggers${TIMESTAMP}.dumpTABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`if [ -z "$TABLES" ]; then & &echo "Dropping database $2" & &mysql -h $1 $2 -e "drop database $2"fiif [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then & &COLUMNS_PRIV=" & &UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"fiif [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then & &PROCS_PRIV=" & &UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"fiif [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then & &TABLES_PRIV=" & &UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"fiif [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then & &DB_PRIV=" & &UPDATE mysql.db set db='$3' WHERE db='$2';"fiif [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then & &echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:" & &if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi & &if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi & &if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi & &if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi & &echo " & &"fi2、rename_grants.sh#!/bin/bash DATE=`date +%Y%m%d`if [ &-f "/tmp/grants$DATE.sql" ];then & rm -fr /tmp/grants$DATE.fifor &i &in `mysql &-N -s -e "select concat(\"show grants for '\",user,\"'@'\",host,\"';\") from mysql.user"|grep -w 'show grants'| mysql & -N |grep -w 'GRANT'| sed 's/$/;/g' &| grep $1 | awk -F'TO' '{print $2}'`;do &mysql -N -s -e "show &grants for $i"|grep -w 'GRANT'| sed 's/$/;/g' &&& /tmp/grants$DATE.doneif [ -f "/tmp/grants$DATE.sql" ];then &sed -i "s/$1/$2/g" /tmp/grants$DATE.fi for &i &in `mysql &-N -s -e "select concat(\"show grants for '\",user,\"'@'\",host,\"';\") from mysql.user"|grep -w 'show grants'| mysql & -N |grep -w 'GRANT'| sed 's/$/;/g' &| grep $1 | awk -F'TO' '{print $2}'`;do &mysql -N -s -e "drop user $i" ;donemysql && &/tmp/grants$DATE.sql本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)10:01&&&&&&&&PHP+MySQL数据库教程 列表
相关参考课程
MySQL Alter Table 修改表信息
Alter Table 修改表信息
ALTER TABLE 允许修改表信息:可以增加或删减字段,更改字段的数据类型和属性以及名称,创建或取消索引,甚至还可以更改表的评注和表的类型。
ALTER TABLE tb_name new_column data_type
ALTER TABLE user ADD status TINYINT(1) UNSIGNED NULL
增加字段时需要注明字段的属性,可参考。默认新添加的字段位于表末尾,如果需要指定增加在某字段后面,可以加上AFTER关键字:
ALTER TABLE tb_name new_column data_type AFTER column
ALTER TABLE tb_name DROP column
在该字段删除后,和这个字段相关的索引和表约束也会被自动删除。
ALTER TABLE user DROP status
改变字段名称及属性
ALTER TABLE tb_name CHANGE column new_column data_type
new_column为新的字段名称,如果新的名称和旧的名称一样,那么则不改变字段的名称而只改变字段的属性。
ALTER TABLE user CHANGE status status_bak INT(8) UNSIGNED NULL DEFAULT \'1\'
即使 new_column 和 column 一样也不可省略。
增加索引(或表约束等其他)属性
ALTER TABLE tb_name ADD INDEX_TYPE (column)
该语法等同于:
CREATE INDEX_TYPE index_name ON tb_name (column)
//给 status 字段加上索引
ALTER TABLE user ADD INDEX (status)
修改索引名及索引属性
ALTER TABLE tb_name DROP INDEX_TYPE index_name, ADD INDEX_TYPE new_index_name (column)
该语法的实质是将原来的索引删除,再重新建立索引。
RENAME TABLE 重命名表
RENAME TABLE 语法可以将一个或多个表重新命名。
RENAME TABLE tb_name TO new_tb_name, tb_name2 TO new_tb_name2, …
重命名操作自动进行,这意味着当重命名正在运行时,其它线程不能读取任何表。
如果想交换两个表的名字,可以做如下操作(假定不存在名为 tmp_table 的表):
RENAME TABLE old_table TO tmp_table,
new_table TO old_table,
tmp_table TO new_table
本章节内容共分 2 部分:
MySQL Alter Table 修改表信息
<(我爱开发网) — 提供最好的 、、、 及

我要回帖

更多关于 mysql数据库名称查询 的文章

 

随机推荐