找回密码
 注册
查看: 3160|回复: 1

MySQL数据库修改库名的三种方法

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-6-15 03:00:16 | 显示全部楼层 |阅读模式
如果是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 y
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

% _+ K( R) l; k" k
mysql -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

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎
/ h% Y. {+ R6 R- b0 V0 _3 @& p执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB( v; d- b, j& ~1 [' J% T
5 C6 A" |( o5 I0 O9 C
步骤二:查看默认存储类型
* b4 s$ T, s! `3 ?1 \& a4 |查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB; W+ D/ H! K/ L1 q" B$ D

: [* i/ s4 w! B& F" amysql> SHOW VARIABLES LIKE 'default_storage_engine';" k: I! x2 f# v. L

$ s3 x% V$ l+ Y1 _( i% M# ~8 N1 c9 g+ `  W
步骤三:修改默认存储引擎6 n' s0 U" |9 ?9 F* }  f
Innodb存储引擎的修改方法4 u" X3 H& y6 u% }" P8 T  f
方法一:- Q: C4 Z$ P1 c/ F
步骤一,使用mysqldump进行逻辑备份3 d' f( f# D/ D, E/ j! q  C
* r* v8 P. N& N9 i* \& V* ^$ g
1)备份MySQL服务器上的所有库# J% t+ r, Q7 ]( _- M; V& K
# v1 [0 l; c$ F1 ~6 X
将所有的库备份为mysql-all.sql文件:" I: r  `" a( a$ d8 K" R
7 I" h! n) Y, `
[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql' c+ j, [' U! z/ f+ L" N/ C
Enter password:                                 //验证口令) b2 l  b! k5 _) @
[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型
% P9 M7 q6 V. m7 A  z! H2)只备份指定的某一个库& ~5 T. a8 n% M  V

" P, ~, I+ G) z, S  l* q5 m将userdb库备份为userdb.sql文件:
! J! u8 W- t( o1 C7 o# ]5 Y0 P1 U! s# `; w( a( A1 Q* p7 h' J
[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
+ p  w/ F+ d, H2 o6 q5 K( j" bEnter password:                                 //验证口令
. Y2 ~' n. \; b; [3)同时备份指定的多个库
) J# H3 E. t" C" p8 C. O8 p1 K! z0 a* O# Q) T
同时备份mysql、userdb库,保存为mysql+userdb.sql文件:# c/ q1 e8 _( A) ^+ C& h

. C& W7 c' |2 s[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql
' W* y0 U$ R8 d; P+ xEnter password:                                 //验证口令, S9 |7 a: ~0 p7 G$ {
步骤二:使用mysql命令从备份中恢复数据库、表
5 M( I7 [4 _( }8 a8 {; h* Z5 l" M: }: A$ h0 v. `, S7 L
以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。% R# b1 B! Q" w0 v
- I, b' M0 W- N- y/ U. G9 x
1)创建名为userdb2的新库2 O0 z$ U1 H1 b! q. `3 |+ c

$ H' U) |* o0 {) n$ gmysql> CREATE DATABASE userdb2;
. |8 G: C; s9 j0 wQuery OK, 1 row affected (0.00 sec)' P- L" Q. [" W9 T" _; c: A
mysql> CREATE DATABASE userdb2;* b$ u( a3 h; m1 a* W4 E
Query OK, 1 row affected (0.00 sec)
# ], \  s) L7 H  @2)导入备份文件,在新库中重建表及数据! t" A' U) O1 l
6 V: q6 Z9 N; g2 F5 l  N  w
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql; _. x0 G9 X9 `: k1 [: g
Enter password:                                 //验证口令, R& R' t/ q' n# n5 V9 I
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql" b# J  b$ |# U: W3 Q& b( ]$ C
Enter password:                                                                  //验证口令
+ a( J2 Y* j" c3)确认新库正常,启用新库
0 N9 L! t) t) q: T
; q9 ~, c3 I- u9 q+ e9 F# j# z' @mysql> USE userdb2;                             //切换到新库0 B  z: [+ v" W3 l& }8 T0 c
mysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用2 a5 X2 L5 y5 I9 d3 N, }7 {
-> FROM userlist LIMIT 10;
2 \  t6 S& z) `5 Y* L# B) \; t4)废弃或删除旧库
$ x- s* l: W+ q+ ]  m* \# v  ^/ J( a. |, E! K  x- _
mysql> DROP DATABASE userdb;6 p" K$ o$ V- v# z+ M$ N: A7 v
方法二:/ B& h% L$ d* C; ^
1,使用脚本修改
+ ?8 O6 v4 v0 U: q. w
' X' m; x! @* K$ o/ U# vim /tmp/mv-mysql-databses.sh 0 P% u1 B: Y3 `: n9 \9 x# \
! d4 y- t% ^: @% i" D
#!/bin/bash7 @& r+ r0 N  ^$ _% V' h
# 我的在Innodb下用这种方法# r# ?+ _/ G$ y4 W- }$ w/ S/ |
# 假设将yct数据库名改为jingcaiwang% s4 c5 }" S5 a# @# c! M
# MyISAM那么可以直接去到数据库目录mv就可以
% E+ J  U7 T. z, H. w# MyISAM直接更改数据库目录下的文件即可& v+ X7 x1 A  O: Q/ L* d
8 P* e4 [9 f- `$ W* g' j
mysql -uroot -p123456 -e 'create database if not exists jingcaiwang'- Y( e' P# }. q$ J7 j3 R
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")
" _- I; ?; u7 F& C6 B% k! p# b& i& ?5 B: }/ v
for table in $list_table
7 Q2 g4 B8 G. i3 kdo$ f7 Y4 f) O  u$ Z0 z7 Q
    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"
1 _$ x2 X7 e# [9 Ydone
& R5 Q( F& |1 q  \
5 @6 p" y: _4 I7 \" ^: c1 W1 b! S( `  Z; L  K% O% B9 _( `
2,执行脚本+ a5 S% N3 ]* f" F. j4 b

. M% w9 @( n. N; w4 N" r#   sh mv-mysql-databses.sh
. L2 A7 x4 m  O- q; F% ~
/ V% u3 s1 O6 \0 |8 ~$ T 4 c; d4 n, }  z6 S4 T  B5 e: D- \
! J$ f4 S2 U8 V% f' [/ I" C6 d
3,查询,确认结果: Y7 l; G+ W$ {* ]' _# C( w

7 T( Y; X  k+ `% h. F5 kmysql>  show tables jingcaiwang;3 c+ ]( w8 k% X" Q

0 P/ e2 s( G: r& ~方法三:0 r: [% J# ?! L9 s( Z/ a( U
8 ]0 ]1 y) W: {) k: d5 B0 @
使用binlog日志
. L2 C3 v% b" h2 Y, N& d6 G  E9 S
1 J6 V! k9 G2 I: K见其他章节!!!% \" O0 m0 w- B9 y" u

  j, U4 G6 Q$ l8 z6 f$ j7 ^- p ; `# r8 x. a! z! w
8 S; @; j( w' r" y) n
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:14 , Processed in 0.017640 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表