马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
如果是Innodb完全不行,会提示相关表不存在。
; P! r, Y+ W/ w5 |4 t第一种方法:
" H" e) H: k+ b( ^RENAME database olddbname TO newdbname
9 }5 j$ z/ g7 W官方不推荐,会有丢失数据的危险$ p, Z) q4 m5 ^! D
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
% ~% B. s' C Q5 g- a第二种方法: 4 [6 {# e" N! D7 M0 j% k4 M. E
如果所有表都是MyISAM类型的话,可以改文件夹的名字, N: o1 v; y9 h+ L& \
关闭mysqld
/ h8 v! z7 R1 o/ y/ S+ Iservice mysqld stop: v: a2 X3 _/ w0 _3 |
Shutting down MySQL SUCCESS! % L7 A% N! @# e+ J3 Z% q' b
把data目录中的db_name目录重命名为new_db_name & F. E, Z4 j5 L. `
# cd /var/lib/mysql - C+ E6 @& T0 o2 k$ q
修改成新的数据库名称:
- s# A5 v; c( ]. ^ u. o" Y# mv sichuan/ Sichuan
7 i _6 Q+ l. Z- b: z
. ~; B, J5 j$ i( F6 A2 ]开启mysqld # P; l& x1 ^! W; w
service mysqld start
! d- r. W7 F5 o# S1 XStarting MySQL SUCCESS! 7 I+ Z" b" Y: M8 T3 ^4 K8 T" i
% a+ I6 ~' h3 J
# r5 m0 k" S4 k& m6 Y, d6 P) B, Fmysql> show databases;
* j2 d' }5 s. B( Q4 I2 ^- W+--------------------+" W- m1 Y3 O( x9 j4 V: _
| Database |
+ Z8 S: ]3 |( ]7 P, s' ~ `+--------------------+# G/ k6 U! t ] P
| information_schema |
8 I1 e B1 ^) I. M6 \. `| Sichuan | $ w0 k0 J; i1 D x! k7 E8 @
| mysql | }5 A1 @/ k- X, D4 u5 a- B, v# }; ]1 N# A
| test | " ]1 F$ b. f' C, ^* r' p
| yang | 2 Q7 t' r. m& b1 ^
+--------------------+
I% F* A, p! M( b5 rows in set (0.00 sec); m- C/ R% K! R( O
第三种方法:
6 m" j. P& b& F8 O! H- H4 F0 ymysqldump导出数据再导入6 p# z* W) A5 b6 Y* c8 C) m# J
& h2 o+ R" {9 j1 `. Z% G0 v1.创建需要改成新名的数据库。3 ], i d) e. `8 [, [8 @5 ~: W
mysql> create database Sichuan;
- S5 s3 ^4 O) C6 D# b- fQuery OK, 1 row affected (0.00 sec)) L! i- x' @& y8 v) h8 P
" h, o% |, t5 s- G+ h! d2.mysqldum 导出要改名的数据库* `$ m* L/ M& B* n9 J& h
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
1 V: F! b) p! ~% a% N+ T导入数据到新建的数据库中:
; i& Z( a9 g1 A# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql
; V6 {+ |! ~ n2 l7 j' F9 I3.删除原来的旧库(确定是否真的需要), G0 m4 l$ f) A
9 P+ u8 T+ O/ {, ?9 l
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。& x' v4 X2 S/ X" E3 m. v
$ q) V; G& I' X& |
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
# [9 ?$ W- `* Q2 q- V3 j. g. Bmysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
! @8 q5 r1 w- Z% N7 z A* h$ Tmysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL . a* H/ f9 p1 j, c* K+ p
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
9 ?0 a! ^) ^% a% q" `/ Y1 g; k0 j
. K y' V3 y# z: U
第四种方法:& d6 d O6 Y# `( U* z% ?
直接跑一个shell脚本,
* u1 e8 z% w% ?' [1 n) ?4 a#!/bin/bash
) m; Y5 ^- \5 [5 W @6 ^# 假设将db1数据库名改为db2; [* W3 j: Z3 O9 _4 Y# y8 {
# MyISAM直接更改数据库目录下的文件即可
& u% D) p9 ]! a2 F, Gmysql -uroot -p123456 -e 'create database if not exists db2'6 }& |, v1 I$ F3 `: P5 p
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")2 k5 e% @: w, Q' ?" q" P
for table in $list_table
3 }* R$ ?% G- l2 R( g/ t8 X3 Q% J# Ddo
2 f3 c! m" |0 X6 ^( f mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
! X. S6 w3 o2 l' {& ]done
f3 ^+ L- M5 [# k* r) r y" h1 o6 E# O8 Z; n; ~. b
@5 w! x( w$ W/ f' Y' `
#!/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”
" N B! [, l! F/ p
3 u/ _6 s" t4 u! s0 }8 {& S0 Y g
+ F7 C: j. Y- p8 ^' T注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!! " [0 v+ O5 y3 w9 `1 `9 G
————————————————
4 A, N) [3 R) I5 z$ X" f- h( ^0 s& d: U. P
|