马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
如果是Innodb完全不行,会提示相关表不存在。
- u, {! u- B* `; w第一种方法:1 f k1 K2 P1 s3 e: n
RENAME database olddbname TO newdbname
4 F- R: w6 A& N% S+ X3 ]官方不推荐,会有丢失数据的危险4 r/ K) i k0 y) L
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。 ( q1 S2 p, {% F/ A
第二种方法: 5 d+ J! Q8 o6 L; z
如果所有表都是MyISAM类型的话,可以改文件夹的名字; o; U7 B. u* h! y& m
关闭mysqld
3 {; U9 t' X7 @' y2 e5 {service mysqld stop5 |, B6 U/ F% y" k1 O3 L* Z
Shutting down MySQL SUCCESS! ( \% S2 M( u2 q r
把data目录中的db_name目录重命名为new_db_name
$ O5 k, N4 v! m; S% l# F# cd /var/lib/mysql 2 c; V! R0 J, h- ~: E, r6 [3 ^
修改成新的数据库名称:
6 L! y, j5 G) \8 ]# mv sichuan/ Sichuan
+ V) V' G8 P9 F" M0 t! R U
1 s7 b9 s" M2 r1 n开启mysqld 1 U, l0 z/ G% Q/ E5 W
service mysqld start
4 n; C: w" D$ X/ YStarting MySQL SUCCESS! 1 K/ U" M) U& {1 K, e8 l M) {
# h* J* E% f; {9 Y
! W8 ]- m. k$ y/ V' [mysql> show databases;/ \" ^+ L$ w: N1 Z0 o& U
+--------------------+3 [4 [' g8 {. M$ S& F0 l
| Database |
2 j5 w4 W0 ~- X& j+--------------------+
7 `) @! P( ^; x% d| information_schema | 7 l) b( H) T% S
| Sichuan |
2 c; j4 W/ m5 R5 I5 ^| mysql |
) ?9 b' r5 Z2 ^: W$ v: y* u| test |
- }* A/ R" ~, u2 Y" D| yang | 7 J6 N9 B1 g7 r% k" E3 R0 ?9 l% v
+--------------------+( @! `$ x. b% e
5 rows in set (0.00 sec)
_6 \$ ?' X" l, c第三种方法:
1 }; Y$ b/ ~3 s- {+ V/ N9 Omysqldump导出数据再导入
8 C5 e* V, z4 y" v7 o: a$ b
1 I0 K, s. ^% g2 |8 K1.创建需要改成新名的数据库。
# r( u( l+ E9 I8 }( kmysql> create database Sichuan;& D* _% T( `) T6 k% F9 T! k7 |
Query OK, 1 row affected (0.00 sec)( X: t- D+ a* E' m. w+ k, a; L7 F
+ \' x1 Y4 }8 _* A+ v
2.mysqldum 导出要改名的数据库5 k$ R, Y/ ?7 ^
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql0 _6 h1 O; t5 j5 e" Z
导入数据到新建的数据库中:
3 x* A/ `% f4 t: [# b2 e1 p# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql( N$ o$ Q6 Y' e# |% _7 c
3.删除原来的旧库(确定是否真的需要)
! a+ Q X/ J* H' k( }! \5 f7 D o% R) A) s5 u) X/ W L M7 u- U
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。2 z1 o: R. Q! X3 G: d3 p; D
* y# _" k; w7 v+ Emysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
2 }% R# q0 R) c- D ^; J- A$ g( b# `mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name” 6 j, p8 P0 A3 e) f" u& s; }) f
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
) Q8 }2 A# r" J+ L: v zmysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
$ X) \8 x4 ^2 W4 c, e$ c% g) H U# `6 q" H
8 P* Z8 v0 Z$ w. [2 {; R0 i8 m第四种方法:
- e$ g$ ~, X- i$ v# s直接跑一个shell脚本,$ z; V* f6 k. v
#!/bin/bash: _8 T$ y$ R0 X; b( V( B' V
# 假设将db1数据库名改为db2
, I# n5 v- w+ i/ t1 E# MyISAM直接更改数据库目录下的文件即可" b# F. G2 ~/ |! ^7 l, \( `0 Q
mysql -uroot -p123456 -e 'create database if not exists db2'
) [9 z4 Y* P: x" m4 H4 t' alist_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
. T( t; P/ ^- e; d1 l) ?1 ffor table in $list_table% C% R1 s0 s* e
do
+ f, S' A7 B- _ f# D mysql -uroot -p123456 -e "rename table db1.$table to db2.$table" y. B! C5 ], [; f
done
9 E* W. h8 ?: I) e/ ^
( B; w- `9 T1 y( ]3 c- V5 `0 g/ P# |: b+ k5 k/ V
#!/bin/bash mysqlconn=”mysql -u xxxx -pxxxx -S /var/lib/mysql/mysql.sock -h localhost” olddb=”db_name” newdb=”new_db_name” #$mysqlconn -e “CREATE DATABASE $newdb” params=$($mysqlconn -N -e “SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'”) for name in $params; do $mysqlconn -e “RENAME TABLE $olddb.$name to $newdb.$name”; done; #$mysqlconn -e “DROP DATABASE $olddb”4 o/ U' N* V# L& Q" N$ d) G) U
" ?9 e* @' P4 o0 N. e P
3 g: C% }7 x8 m! S p注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
* k: d" @$ g) I, r————————————————, ]9 ?/ `3 @! W) [
7 i" D5 v0 @2 ?- G& |0 Q
|