如果是Innodb完全不行,会提示相关表不存在。
G% d9 }) }0 ^第一种方法:/ s9 W% g4 u$ @+ }0 ~
RENAME database olddbname TO newdbname( z& k+ N5 F6 B4 w
官方不推荐,会有丢失数据的危险
: Z6 ]; {3 `+ g' R- t+ ~这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
' u: b6 v8 l% N. c$ h$ ^0 w第二种方法:
) ?/ K7 K' z* Q如果所有表都是MyISAM类型的话,可以改文件夹的名字5 J# A4 a9 ]$ m5 W( l2 o1 U' F k% m
关闭mysqld
" v3 G! _ N- u" U% Dservice mysqld stop
, D! h9 l+ M4 C7 M: \Shutting down MySQL SUCCESS! # }1 y6 q+ A# e# C: b+ R
把data目录中的db_name目录重命名为new_db_name & V8 N3 x( ~; A, h' g: \
# cd /var/lib/mysql 3 L- }4 b8 i. f# _5 F/ f
修改成新的数据库名称:
$ P. O" B+ c6 p7 `# mv sichuan/ Sichuan
5 F a1 O6 f" s$ u8 g5 R8 F
1 u( S, C! B+ z# s: H, w r开启mysqld 0 U, R3 z. W# B
service mysqld start
/ ?$ h. v2 Z3 DStarting MySQL SUCCESS!
( @9 K9 L" F Q! ~! H; i( R1 F- a: j7 D& k2 e8 |0 ]! f" Z
2 l* ]" F) @8 H, E# V7 u3 Z1 tmysql> show databases;
4 S1 Q0 r4 p+ d5 v0 n+--------------------+4 l9 v7 v2 G* S! C
| Database |8 h7 M4 Q) T4 i' h- ~; S
+--------------------+
' u5 b! ?! s8 V5 n$ k& V| information_schema | r. Q% L3 `! B1 A4 E
| Sichuan | 3 k% l7 j8 ]; r1 |9 W, m4 G
| mysql |
. @! [; E( D+ w* e; E| test | 2 x5 [# O: O/ {/ e/ U$ C! M% o+ \
| yang |
% F' O2 h, S! K8 J+--------------------+
4 Q" y R! w+ p: ^& @: {; S5 rows in set (0.00 sec)
; G" @: v7 f& R第三种方法:: F" |* n" T! i/ E$ H
mysqldump导出数据再导入" v' _3 z. [4 E& |- h
+ Y' d& S; T" N+ S" B' n
1.创建需要改成新名的数据库。
) Q. u7 _, L! w% q# c; L( Tmysql> create database Sichuan;0 } c& h9 c0 B- x5 U
Query OK, 1 row affected (0.00 sec): f% n1 z4 W2 o# x& h1 ]) `( }
; q, b! J) E3 e+ o$ @
2.mysqldum 导出要改名的数据库, C- X) n$ X/ h+ F- [+ N
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
" P/ h5 @/ f L1 [( }+ k- I导入数据到新建的数据库中:
( h! q; p) A2 f. y# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql" p4 l- N0 c3 _1 ?5 q
3.删除原来的旧库(确定是否真的需要)
5 o+ ?: N2 }, ~. |- V) a3 r$ [
! k; Z2 K. `& b: J" t! K1 y0 O8 L当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。
5 D+ L9 L3 @( ^# ~6 E( |% k% }( }8 M: `, {
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL * t7 I' S9 q5 [& x% P! y
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
- ^. O S& l' r0 o) N. \5 n' } F- Bmysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL 2 N( f6 a1 R+ v; o) z2 p! t
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
; m) j' |6 l/ A9 b i* r+ e$ E) q& n1 N' T
3 p2 S, ^+ p% t2 u' T第四种方法:$ C8 L, E7 x* S! n. g9 E! g
直接跑一个shell脚本,
3 ^( R" h+ i3 N1 O/ C2 Z! N5 i#!/bin/bash6 r3 m1 X- c% G( g1 l1 q, F
# 假设将db1数据库名改为db2
. X6 t4 I9 s1 s- ]7 U# MyISAM直接更改数据库目录下的文件即可4 D- M# g5 g. [ X B$ r5 r
mysql -uroot -p123456 -e 'create database if not exists db2'2 P, ?; b9 I3 w2 A$ u5 C
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")- X9 u" v0 s. O9 C; b4 e u
for table in $list_table
3 n1 e" k# l" Q2 g" Odo( ?4 J+ {9 B& h' M; J# u/ O8 K# j5 z: k
mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"( _# t( I* s; N, J" M9 m; \# e# d
done
9 R5 t6 x9 p1 l) b' [+ [
, V- a, W9 b+ B$ f6 v3 u
) t1 p* s, I* @7 v( _8 A; X9 ^#!/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”5 z; s4 V( r9 s& q7 e, o, Z
0 h! j: k& f( D8 g7 U) O; u$ A
. ~' y: j* T5 o7 g% Y0 C9 t% M( w注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
# t, `7 a: Q5 P% E Z x: p————————————————6 q0 A2 e$ y9 a
: n6 h4 Q# g% `+ u; b$ I
|