如果是Innodb完全不行,会提示相关表不存在。" o& m% @* }$ A9 J% o* C
第一种方法:) Z" c! ]! `0 e) h! Z5 @
RENAME database olddbname TO newdbname
( R: ?" g$ T3 U% h9 ^( s官方不推荐,会有丢失数据的危险
! J0 F0 n5 t( l/ X: X9 C这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
* Z% `5 e& ~. Q1 Y t+ w第二种方法: @: ~& k$ ^9 g: n4 }# O5 X
如果所有表都是MyISAM类型的话,可以改文件夹的名字" j8 X* h$ z# W8 |0 S x
关闭mysqld ( R t+ q3 Z+ m s4 t/ N2 Q# q
service mysqld stop* n3 y7 Q* F) q9 h# i- G9 Z# B
Shutting down MySQL SUCCESS!
; |1 i% o N/ Z- i3 F- q2 X3 P把data目录中的db_name目录重命名为new_db_name
9 c/ U8 [4 h3 G' d# cd /var/lib/mysql $ R: A$ a T+ ]8 z" k ^& b
修改成新的数据库名称: # J9 X5 E( H, S6 n8 J( L9 s
# mv sichuan/ Sichuan 6 p3 Y" m- l5 i1 B$ k6 [3 d$ p, m0 B
* x3 M! z% {, a$ R. w5 R% I' n+ e$ D开启mysqld 6 W# |6 N+ a- i: y6 ?$ v
service mysqld start
1 m- }1 J. Z4 }$ g, eStarting MySQL SUCCESS!
) l9 H. I2 y2 K3 i) i" _$ G+ F I+ z4 ~7 A. ]" a
1 l. f9 [# O8 g: M/ U+ F6 Y
mysql> show databases;: {2 V5 p$ k" x) Q7 o; r
+--------------------+
6 k+ N# E' O6 a| Database |
$ u9 r- q+ a& e% w( b0 @6 _$ e9 y+--------------------+
J% b+ V/ [- R| information_schema | / p. Q! }1 V# ?' M
| Sichuan | ) s. _ D- \8 F/ R8 _5 f
| mysql | 8 L6 Q& q1 E' H6 {
| test | $ Y6 u9 @' |6 L. h* |
| yang | 2 _$ H2 |* {$ y6 M# P
+--------------------+
3 N- r* K8 ? A ]* J+ D5 rows in set (0.00 sec). \/ ?7 o: t9 A: ]( k+ g( j: r( [
第三种方法:
0 w! ~* E, A) t$ x' u8 H: Gmysqldump导出数据再导入; R2 E W7 _+ `+ C3 M" J+ L) Y
& E* Q) }2 T" w; T; X+ U ?* r
1.创建需要改成新名的数据库。6 v. p* ]" i0 k2 U! w
mysql> create database Sichuan;
1 d* l' F5 }! XQuery OK, 1 row affected (0.00 sec)
. j L! D; k$ _1 u6 P) p, `+ q$ ~0 s
2.mysqldum 导出要改名的数据库; C6 t) F4 _/ u! a# X) u
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
8 L" u& C& N* v, r, w, r! g, h: c: ` s导入数据到新建的数据库中:7 q2 p5 o; g3 s; G+ q0 {
# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql3 D; {& E: _/ b" W# j
3.删除原来的旧库(确定是否真的需要)1 D S, g" x+ B
2 W# g9 E8 k2 _& `7 }% g当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。
+ C9 x4 i' C* Q6 {5 B) p" Z
# z1 q; E# E& r( S1 A: G! Z5 ymysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
% _+ K( R) l; k" kmysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
) B9 u- j9 i' R0 ^5 z, K8 m* ^mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL & I& s: D3 K2 o, F% e4 k/ O! ~
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name” / a/ S7 u9 A& j$ l
$ ]! h) M6 H' a/ n# h* W+ u) D* O
+ m! @% `- N# j$ T第四种方法:
2 s0 u; l( H7 K直接跑一个shell脚本,
: w/ P9 t% P2 @$ z6 I. q$ B#!/bin/bash
& P% s% D; N1 b6 _2 i# 假设将db1数据库名改为db20 U0 h# s& K& G$ h# C
# MyISAM直接更改数据库目录下的文件即可
" c& X( g0 E! L. _mysql -uroot -p123456 -e 'create database if not exists db2'
+ X9 F( v- X- X$ x2 c& w" }! I3 r( Hlist_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
: [2 r9 F& E: z3 ~9 c* ifor table in $list_table
1 u) O% [6 Z" Ydo
( s; e1 t3 v8 z7 y mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
7 ^- \6 r' W% K" k% ]( l* wdone: C" X' d/ Z6 Y; o# @
* i, i+ `; G* M) U, q
, h7 H# _: q6 {) x, \! A$ |1 E. x7 h#!/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”
/ H/ m0 L$ D4 A# C5 w' A% `# K; m: E- Z5 ^5 e* a9 O- C
@) W# w4 S/ @5 e7 }0 c) [; @注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!! 8 }* a1 Y& |1 B+ `, Z( J" s
————————————————% U. f/ ^. a$ x+ D0 v
3 t4 [0 x: z1 t7 [" c! w |