如果是Innodb完全不行,会提示相关表不存在。; o; t) n: B3 Y9 Y z- k
第一种方法:
( g- A# k0 Y: ]RENAME database olddbname TO newdbname; ?7 y! u# i: U/ z/ s0 R
官方不推荐,会有丢失数据的危险% z7 _3 P( n; f# F; x
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
8 x# N9 H8 S+ F; {; ~6 h/ }8 u第二种方法:
, e: w6 V# ?$ i" C- M2 G如果所有表都是MyISAM类型的话,可以改文件夹的名字
4 V( A d( g% {& y) z, P# U& Y$ g关闭mysqld 1 n- P J P7 d7 k: o
service mysqld stop# o# S# ^9 j6 n7 F: g$ b) W. V
Shutting down MySQL SUCCESS!
: _3 ~+ o) X& q( z) I& l把data目录中的db_name目录重命名为new_db_name
( |6 r( y1 M1 c% G6 Z# cd /var/lib/mysql m0 W1 r: A. o5 }
修改成新的数据库名称: * f7 M) k/ y( U
# mv sichuan/ Sichuan 6 j/ G' a1 `/ ]
6 }/ q4 h6 t- t
开启mysqld
* {: M2 N6 a; L/ Q9 a2 v" zservice mysqld start9 v5 A8 x5 }9 z6 A# ^/ W2 ^; F
Starting MySQL SUCCESS! & Y/ b$ v/ }2 ?6 |, F/ I; A Y
1 U5 P+ F9 R) i3 n 9 ~9 k0 p$ Y* S1 N
mysql> show databases;
* w( |& a8 W; l- Q% J1 w7 m0 C+--------------------+
. j9 t+ ^2 p- t9 ^" Y" D6 L| Database |( p& e' g5 P& C8 ]- i) S4 F
+--------------------+0 n$ I- c0 u X# q' d$ _: z) h9 v
| information_schema | 0 }9 J4 | G$ o5 s4 v. ^
| Sichuan | + f, ^" r# \: c5 m, X! T
| mysql |
! K5 Z" k: U4 `+ D0 Z| test | : F0 e: O/ j' E, F
| yang | 5 S: T! Z; x0 b
+--------------------+3 W) H& b- j4 L, c8 a( Z
5 rows in set (0.00 sec)
& }* A9 G1 _/ F第三种方法:
/ e2 B' T' F. {1 g7 `; |% Qmysqldump导出数据再导入
8 H8 S+ t5 Q$ j' y3 @8 x
' G" r8 R% ]5 h1.创建需要改成新名的数据库。, P2 T: j/ z0 t1 E2 w0 s; H2 ^6 l$ ^
mysql> create database Sichuan;
3 F% O8 ^- b, l( BQuery OK, 1 row affected (0.00 sec)
' F/ I! M# I/ I5 w0 g) z
1 a; Q5 S( u0 m" I# ^- j8 Q2.mysqldum 导出要改名的数据库; h$ r. [8 S Q
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
( w& Q. P3 q, Z( k( w3 I导入数据到新建的数据库中:
3 H* q; u, f4 o d# _9 D. S# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql4 R4 _# Q3 ?9 I ]1 x/ L N0 P" V: e
3.删除原来的旧库(确定是否真的需要)7 c3 H p, d* i( K# f; x
- \( c. E/ X( x" T
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。: \- C) T7 i1 T1 D. H* z
. G! \* x* T1 m0 t# J8 f4 w- ^
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
% f1 q" d1 ^7 k; Y* g2 Tmysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
1 U) L) N) g: I& g$ ^4 a$ Bmysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL 6 Z: c: Y! [2 A2 R! @! |9 L
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name” ' L0 f5 e; J; g |; [. b
" `% T3 U* W5 ^- U1 h
4 L H8 m' _0 g( `; @6 M
第四种方法:
4 C4 p+ a& H: m! e a9 b直接跑一个shell脚本,+ M: I7 m3 t$ b; E, v! P4 ?1 n2 q
#!/bin/bash4 E: A- t) M* z. Z: N+ Z
# 假设将db1数据库名改为db20 r0 k* Y% x7 x- e' m
# MyISAM直接更改数据库目录下的文件即可
1 d' y# L! m% `6 G0 bmysql -uroot -p123456 -e 'create database if not exists db2'
; P' t/ k& [- s: n" ^- E6 k& q8 |list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")$ N- L4 R6 _7 v/ d/ G
for table in $list_table6 D' _+ P( c( x: d- h; w1 R7 O3 B
do. ~8 d$ w7 j" T9 t
mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
3 c5 H) a( {/ P+ }5 B jdone
: c4 u- B& U/ z: G" Q& n
( }# K, i f, F9 X* @1 W6 L. J9 H
4 S; E1 \9 }4 a7 X. s- C2 u#!/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”
% r' ~+ A; s7 f+ r8 Q5 t3 _3 c
% U, V: ]1 q$ X9 e! m) x
9 K' [: @6 S: Z; D2 W注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
/ ^! _6 f0 [: t" J; |4 V6 Q————————————————
% j6 S. @4 q# T2 R( `' l# a' W" k9 p
|