马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
如果是Innodb完全不行,会提示相关表不存在。
0 h- ?8 a( O* J5 R& @2 }; R' x4 m第一种方法:6 ?- G! V1 Y4 t: y
RENAME database olddbname TO newdbname8 w8 ] s$ r3 t8 y+ v* z
官方不推荐,会有丢失数据的危险4 k% p/ e$ m8 k/ A8 b/ K
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
( L0 `: f' M7 ^' ?% |第二种方法:
* A ~/ l' b; g8 O; `9 F3 |$ ]如果所有表都是MyISAM类型的话,可以改文件夹的名字/ A6 i# _, \2 F; t& [- f7 u5 K; l
关闭mysqld
6 i# G: \! d, ~8 pservice mysqld stop- @; `6 P A0 I7 S
Shutting down MySQL SUCCESS! ' x' h" p2 ]9 y) ?) ~! |
把data目录中的db_name目录重命名为new_db_name 2 s' h$ K0 V8 x+ q' ?. i1 l; I* n
# cd /var/lib/mysql
5 s6 N {# Y# Q修改成新的数据库名称:
9 n9 ~2 A# k- \1 S" h. H# mv sichuan/ Sichuan
( ?8 \/ z t. q" B/ H
7 `4 e1 i! b) g0 d2 L* g开启mysqld . i& U; X. d) C0 C! d9 i e
service mysqld start
' Q9 g6 F0 O- |, Y2 h3 z+ d- C+ {Starting MySQL SUCCESS! 4 \! V. C1 \$ D
% d6 P- V* |2 }
M x, u1 ~3 @: U$ Hmysql> show databases;
7 R: ?# c v! _2 ]+--------------------+
. X6 q. j* |0 t3 ], l( Y/ F. R- U H) _| Database |
7 Y* X# O/ S' N+ x" E. C- P9 B- d+--------------------+" q3 n) q+ y1 S
| information_schema | % e+ ~% P* @% }4 |( m
| Sichuan |
5 p! l6 N4 Z, q4 ?, f+ Q+ r% C7 X4 J| mysql | / U8 z0 {! Q1 l+ V8 `# @+ f. Y3 F
| test | ; H4 g3 D+ ?* O ^6 f4 [
| yang |
- n; h+ U6 s2 f2 g( \+--------------------+
; ]9 q7 g4 O+ s& h, z& g9 j5 rows in set (0.00 sec)
% @# p$ L" M/ S+ f/ g" Y, `第三种方法:% e. H5 n8 y% q/ _& x* ?+ m
mysqldump导出数据再导入
7 ^+ W& v8 S/ v: d4 T0 B4 g; }6 \! @# V, W
1.创建需要改成新名的数据库。5 o- Y( V" q8 N2 _5 l5 Q+ }
mysql> create database Sichuan;
# c3 t- o$ ]' L6 nQuery OK, 1 row affected (0.00 sec)' `1 ]1 P) _& I; l6 a9 E
- o% z$ `0 G) ? L$ \0 M2.mysqldum 导出要改名的数据库. R5 q' ?; p8 [
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql. v; ?: ?0 o I5 G& c( [
导入数据到新建的数据库中:& A' }+ q( W. s( b6 w
# mysql -uroot -p123456 Sichuan <sichuan.sql 或者:mysql> source /root/sichuan.sql9 D# s+ S# `5 t, @
3.删除原来的旧库(确定是否真的需要)/ O- n O! v; U* R7 R! S0 v
+ t: _2 _8 O6 W1 h8 w当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。
- k* c2 C! w @+ C! I3 [2 }
# N m! b! Q+ t4 ?" h- {mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL
; b; z! Q3 ?. T) Fmysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name” 7 J7 j* V* m% P% z0 C
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
* [" V. t, z* P- b% G% cmysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name” 1 d1 X8 }% R( i2 G) D* ^
3 Z0 O9 K5 _2 [' u/ \ K
/ A0 }1 O1 P0 G8 F第四种方法:
% D, D0 ?* m% z, h( C; X4 q* c7 g直接跑一个shell脚本,, `% y& s- R. K5 S$ S. U
#!/bin/bash
! D) ?& A2 n' d1 M0 ]" _, Z# 假设将db1数据库名改为db2
0 x9 [2 Z3 D4 w# n: ~: A# MyISAM直接更改数据库目录下的文件即可
c I4 p- Y* B+ t: D2 Emysql -uroot -p123456 -e 'create database if not exists db2'1 d+ S& c! T$ {# I' S! o; \0 u2 f
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
1 S, E4 j5 P/ m& G- Ofor table in $list_table6 p+ s9 l" W5 p$ @
do [/ E7 X* u! f0 p/ J5 x
mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
& b( W' P u) fdone% f' w; w A$ V! c
% }3 O! A7 L, |$ p8 p& _" U
4 T2 r* B$ \8 H: A
#!/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 H3 M0 Q3 o; A' c3 ?: l# T5 M. v; r& M1 C0 A& E
g) P: y$ N3 B2 n; x注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
7 z$ e5 V( b# x1 m; s7 }————————————————
* ]0 C% ]9 L0 s4 R
b+ q9 m5 m. H) o |