如果是Innodb完全不行,会提示相关表不存在。8 s7 k4 e6 i6 u% F: c
第一种方法:
1 f7 k) q5 ^/ l( z" x, `RENAME database olddbname TO newdbname: Z+ l, T8 o) O, u- z3 E
官方不推荐,会有丢失数据的危险7 y- w a0 Q" A7 k7 x7 f
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。 0 V! l3 y* l. @1 H' m
第二种方法:
6 S# ]+ l2 v% Y% L4 N+ j- ?. ]7 V如果所有表都是MyISAM类型的话,可以改文件夹的名字9 K2 D9 F6 Q: b$ s; Y, o
关闭mysqld
/ {0 {; U7 p4 \$ ^5 p9 B/ f d. Tservice mysqld stop* O6 g% ~9 S( S0 H
Shutting down MySQL SUCCESS!
/ o2 ~2 s z8 }' x; H0 Z把data目录中的db_name目录重命名为new_db_name
9 G( x$ k7 p4 F. k" J# cd /var/lib/mysql # C8 M7 s$ G) N) x
修改成新的数据库名称:
. L4 c; G$ V- I% j2 \" q2 Y# mv sichuan/ Sichuan ! _& l9 h* B- u
, I& a k& w) m N
开启mysqld
% S" P1 T" d; X2 y+ V! Bservice mysqld start6 {& y f( F* H+ O1 ~5 n
Starting MySQL SUCCESS! - _6 Q5 b- ?' V, T! E5 ?
% W, \8 h, C0 j$ K
?6 w. ~" ?9 P$ Q
mysql> show databases;
6 ~0 D+ N8 R- R; ~# a+--------------------+7 q: G( l T5 p# c1 w! Y( N
| Database |- X2 t2 [8 s) \
+--------------------+6 X; M3 m5 C# ?2 V5 f4 H- y
| information_schema | 7 S8 D/ w# q/ n
| Sichuan |
, X( ^+ ~# z% O& L4 }| mysql |
" Y- ~. @1 R' M% |- `5 F& h| test |
& r' x; y+ h" m0 |" e' D3 F; O4 f| yang | ) Z. o; d4 Z; y9 s$ w9 _9 y8 t5 l
+--------------------+2 m( }4 p5 M8 b+ U! ?
5 rows in set (0.00 sec)
) V7 U" r3 B/ o. S, C6 [第三种方法:4 i! r! ^3 t+ g- A* e
mysqldump导出数据再导入3 H7 N" }$ l# `- ?% Z
6 s# C( U1 Z2 g: x7 g9 _. L7 K
1.创建需要改成新名的数据库。
, h+ N9 m' _7 W# Xmysql> create database Sichuan;0 `- |$ q/ k b, e
Query OK, 1 row affected (0.00 sec)
) {, m2 a+ m9 r- P( \" t* e1 K+ \
9 v9 T: k& U8 M* v2.mysqldum 导出要改名的数据库5 Z) y% v0 A( G! j
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
( `8 Z$ U. I# [ ]- L I导入数据到新建的数据库中:% u; I6 w% h9 @2 G6 `( `# y
# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql6 ?9 N* U$ k5 E' f4 c0 m2 _2 P0 v
3.删除原来的旧库(确定是否真的需要)
, G: v1 L e( R g& p0 M5 `6 V
a- G& }; U; L; l L当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。
! C( `1 I! Z% j; i( [4 @( t6 T" @2 a+ [: {4 t
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
( U! P1 y* }7 O, J. S' I+ e3 C! Mmysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
& G! o+ P. ?- d, jmysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL 1 { i3 H- O& R9 s0 _" ]" N. W# @
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name” 2 e3 v! Q2 M" q, K$ e* g
, a: ~4 R! X$ J8 f- ?+ d) u! v: O
; S5 i2 R7 B1 X
第四种方法:7 Z' O" @% F. T
直接跑一个shell脚本,
8 R3 Z* a+ i/ `: F4 t- ^#!/bin/bash
; }9 F) e6 q! S# T# 假设将db1数据库名改为db2
" e$ }6 y* W& ]2 _- x& O% j# MyISAM直接更改数据库目录下的文件即可0 o" {- T( L6 I; G+ i1 B/ b2 N7 r$ h h
mysql -uroot -p123456 -e 'create database if not exists db2'6 n( n. n M( c3 I% c
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
$ h: w3 B" c1 J3 J& ufor table in $list_table
) l8 f3 J& \- o; K2 H8 Fdo& G$ a4 j6 K- `' q" z6 ^8 T
mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
1 X+ S5 Y1 p& b8 ~" ^' K% Bdone" i- c4 n2 O% c2 N: ~
/ B4 ^+ h8 k( y9 F- u; _$ ^
7 \& \! Z" L1 E* s. m
#!/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”' k$ e6 _7 J! B- {# B& r# L
) V4 a) J: M, U- f$ F9 {& ~ d, S2 u& s& T7 E5 A# K5 O5 y
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
1 R% D/ { ~/ f# }$ t+ M————————————————& ~; v" K8 R, [' z0 o2 Z, G8 c
3 V/ v% g. X2 L, n7 p |