易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3153|回复: 1
收起左侧

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

[复制链接]
发表于 2020-6-15 03:00:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
如果是Innodb完全不行,会提示相关表不存在。
/ {/ ?- }. X/ q3 \6 c第一种方法:+ @* b- L! i0 r7 N3 M. |
RENAME database olddbname TO newdbname, I" J  F/ ?, [" O. j. I
官方不推荐,会有丢失数据的危险! K/ @( e6 f0 o9 X( B
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
. _$ `4 N6 n, `1 S: Q4 b* `
第二种方法:

7 Y7 K, t  u! p, i. ^) @
如果所有表都是MyISAM类型的话,可以改文件夹的名字1 W7 a) x3 Z  E3 k/ Z0 M# f: C! J
关闭mysqld
/ c0 }( I4 m; ^! `
service mysqld stop3 S- ~: @3 }" ^0 L* `5 M
Shutting down MySQL SUCCESS! ) W! B  ?1 F2 E) u
把data目录中的db_name目录重命名为new_db_name
+ d2 L, T0 X9 Y$ Q3 \, ^7 V! n4 h
# cd /var/lib/mysql

3 ?( F: X/ z1 |& G# l  e
修改成新的数据库名称:
: K9 i+ J6 X# Z5 P# c+ S
# mv sichuan/ Sichuan
. _. ?% g# V7 H" C$ t" e8 g
/ D& G& f6 g& w) l/ K- t7 C
开启mysqld
2 f" z4 L: D" s7 C/ D9 s7 Q
service mysqld start  }) {, }% l. h3 H. E
Starting MySQL SUCCESS!
4 }7 X5 r& d+ {6 R" r: R

8 U: B$ e7 X8 B" g8 f

3 g$ M) O  }3 o" C/ lmysql> show databases;
4 V* G+ F# _7 V4 [+ i% v2 \% Z+--------------------+, e+ r( r7 q. D! l, o' t3 l
| Database           |, s& A$ b% ~% v) v+ J0 @
+--------------------+
* ^$ ~) i. J: ?5 k| information_schema | , w1 x& [% E! q; I. _9 H3 w
| Sichuan            |
& z& v0 u2 }' Q% W: w| mysql              | , G+ ~, @; \& a8 z
| test               | # Y; {& g+ }6 S# T
| yang               | 4 @) u1 m' t4 @0 M  l: M
+--------------------+
# o9 P% u- b/ z' Z+ S5 rows in set (0.00 sec)
) o1 u/ @  U) g1 Q% s' P第三种方法:- {% t1 P. ^' X- Z5 O
mysqldump导出数据再导入/ W. V  `  \+ h( q

* `6 P; B8 [; g% B1.创建需要改成新名的数据库。
" {" `2 ?; Y7 I9 b, k3 ^/ Emysql> create database Sichuan;' J' @8 f( S/ W3 b8 l" d
Query OK, 1 row affected (0.00 sec)' j2 `2 n* t9 C# m, A6 E8 k
8 R' V- V7 p) I" @! L, N! q& M
2.mysqldum 导出要改名的数据库
. U3 I' O5 c% \' cmysqldump -uroot -p123456 sichuan >/root/sichuan.sql
2 N0 U: B1 r) W导入数据到新建的数据库中:
. ?* H# L3 W4 ~1 D, X% v# mysql -uroot -p123456 Sichuan <sichuan.sql   或者:mysql> source /root/sichuan.sql
6 @& O% n* w' C$ c0 k6 ]% |; }3.删除原来的旧库(确定是否真的需要)
3 |( r/ {9 \# d0 P2 l% D& o
% N9 h* w7 L8 Z+ {. F" n  {2 P当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。3 N# Y; ^8 W9 H1 F
/ \' B# z1 M- X' Y0 s; K2 G  v
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

1 S+ S+ u7 w7 P7 _4 {, q
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
: R( Q8 {$ Z7 [2 H% _$ V
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
4 J. L+ W% w' {9 `) Z
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
- }9 p% _  [! F
0 Q( y9 ~7 f/ ]$ D, g: _
# I9 Y2 O/ J( }! b' C, S
第四种方法:" J5 q8 u0 c$ \- w+ J
直接跑一个shell脚本,( M: j+ J8 c- k% ^' N5 L- i
#!/bin/bash
8 S  b% l( V7 R# 假设将db1数据库名改为db21 a; p% F1 B/ d" g: _; N
# MyISAM直接更改数据库目录下的文件即可
/ {( P0 w0 w% f2 L! m8 E( Zmysql -uroot -p123456 -e 'create database if not exists db2'
4 a: G' S6 o, @2 }; Plist_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'"). ^" h* S3 ?3 U6 E
for table in $list_table
2 R2 z4 v. E: L) edo
0 I6 _6 c2 z) o+ {    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"6 x- X" \4 g2 Q" Q, R
done; e2 o3 C% ]% W. l

) W0 j% `& ?& D: K, ?
9 d; h3 I8 Z2 w#!/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”' X! }- h+ x) g( X

5 l+ n7 v9 |. o( H1 b3 [1 @1 \7 e+ t0 o& y/ T+ q5 S7 \
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
: Y  k6 ?# I+ t, f0 T$ I: G
————————————————! G& _* A7 b% p
  e$ x+ M* e" U0 y& V( i# Y% z
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎# j9 i. N- f3 B! N. _( U' ?
执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB# I' Z6 r- _& _$ k8 B4 I& l& V
& B- T! U2 U% l+ o$ {9 i$ z
步骤二:查看默认存储类型, z  o1 ~- w; q8 T
查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB
" R  K0 v# r5 u/ s
# Q' ]) n% j8 }+ c. }1 }mysql> SHOW VARIABLES LIKE 'default_storage_engine';
* n/ z) U' x" G4 T7 N" H
$ T+ i$ R/ [. e0 Z- x. I) O9 A# [- y  D4 V1 M
步骤三:修改默认存储引擎4 ]" J# [% u0 \( X! Y3 ]
Innodb存储引擎的修改方法
, t. ]! G8 A4 O- B9 n: t方法一:  V! R+ e4 F" A, ?' o- _
步骤一,使用mysqldump进行逻辑备份
' g' _/ H9 f# ^5 K& u. H! y* V) Z; M6 o* Q0 F8 [
1)备份MySQL服务器上的所有库
6 g- W+ w( a& D: M9 F$ T2 @9 j8 N% m9 B+ l) _3 i% e+ n
将所有的库备份为mysql-all.sql文件:
1 U0 l) B5 G' e( t7 I1 @3 O4 O, I& z* C
[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql
- _5 S6 U/ p; h& A6 g* A' N' TEnter password:                                 //验证口令+ r4 L* E* R# S% I2 ]$ q
[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型
  j3 J% _) `* @% {) `( Y3 D' }2)只备份指定的某一个库$ `1 Y5 v' s+ L

6 X% ]7 m4 ]% T, a3 g* p将userdb库备份为userdb.sql文件:9 z& Z8 e' s0 {/ A" Z

9 H( `9 O. N1 c) C/ `[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql. n+ |8 d$ p+ y* q+ I
Enter password:                                 //验证口令& h+ x/ c, T6 e% x7 G" }8 t
3)同时备份指定的多个库0 N# Q* P: R- V, [6 N1 O4 ?- d/ z( o

: _  J6 L2 ]$ P' [同时备份mysql、userdb库,保存为mysql+userdb.sql文件:
* L, v: G# c9 f% _9 j8 n& v6 ^$ g  \% A- ?6 P
[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql, j+ d' T% C+ ?
Enter password:                                 //验证口令  Z% J* L, Z; _8 [$ A" I
步骤二:使用mysql命令从备份中恢复数据库、表
& B' ~3 x# E" N2 W
4 i  k* f3 I( B$ v8 U以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。4 e4 }2 B# X  e% Z" [

" b/ [* B; z3 _* C1)创建名为userdb2的新库
& {9 t; T- }) ]+ d5 t; j
0 i* C6 a" o0 Hmysql> CREATE DATABASE userdb2;
1 }' P( {( l, c( U) f, mQuery OK, 1 row affected (0.00 sec)
' H& ^! b: ~. S# S4 L9 Imysql> CREATE DATABASE userdb2;
/ a, S6 a- G( _7 [# B6 a4 a$ J$ T6 eQuery OK, 1 row affected (0.00 sec)' C( k$ @) g7 P: s- B( N
2)导入备份文件,在新库中重建表及数据
9 c1 V2 a7 C0 f8 x6 s2 S' F
6 t$ L6 V; l9 s( a; z7 w[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql* X& J  w9 D- K3 r4 u
Enter password:                                 //验证口令# {7 U% E3 Y+ R" Y
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
; j8 L' d3 ^7 n8 wEnter password:                                                                  //验证口令9 J  H4 g, I9 x+ I* G
3)确认新库正常,启用新库2 l* l  P" |1 \# l* B
8 M! L( b- B8 H  N; k, p
mysql> USE userdb2;                             //切换到新库
3 {" l- y0 n" R2 tmysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用8 y" [4 K) ?; B7 I" k7 W' h
-> FROM userlist LIMIT 10;
5 z: v1 R/ Z3 x0 k4)废弃或删除旧库: x, Z; E: M; k. t/ t5 a
8 e# L/ I7 Q$ s
mysql> DROP DATABASE userdb;5 I5 x8 W7 X, G7 I! ^9 W! d
方法二:) x! ~5 ]* K/ i$ c
1,使用脚本修改
6 k: k6 J7 ~# X+ I4 f( |
" a4 \( m, z  r) [+ n8 ?# vim /tmp/mv-mysql-databses.sh
2 J- k' Z; W" D" ?  S9 s0 j- G: ]8 m: Z! D/ _
#!/bin/bash
* O8 {) i3 G6 B# 我的在Innodb下用这种方法
7 n( `7 Q5 W/ c) v# 假设将yct数据库名改为jingcaiwang
/ j; ^6 h* w4 J$ @( m( |9 i: ?# MyISAM那么可以直接去到数据库目录mv就可以
; L4 X/ z  w$ b5 a' j2 N' I; n# MyISAM直接更改数据库目录下的文件即可
4 }8 ^* k4 x8 X, ~' s
: d/ ^& ]; \2 R! kmysql -uroot -p123456 -e 'create database if not exists jingcaiwang'
2 k$ k- V7 _+ P& g9 q# }list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")
! ^" \! P, h, ~+ m. l. y- ^( K  Y: S
for table in $list_table
3 n9 o& A  x# E$ v2 h4 G; l. Qdo  i5 ?3 s) {$ A7 x) C
    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"- G' M' l6 q3 h7 W7 M1 x
done) p; H. U, [' _
" Y7 K! }7 G; @7 ?* v/ d! y# I1 E
2 |  ?! P. N1 ~/ J& ~. ?$ b% R
2,执行脚本
8 r( U4 j/ \+ g$ r; p, s
3 {  U' ]# F3 r#   sh mv-mysql-databses.sh
- s: G5 W. X7 N
: k0 S+ H9 i6 p& H" U- @& u
, n  n% Z7 i/ c
- ?1 H9 c) D) L3,查询,确认结果
/ B5 P; A* f. \6 H6 ^% |: E8 q4 J- H8 ^1 B  b+ W) X* S
mysql>  show tables jingcaiwang;5 X' H; u# ?* r
* E* {, _7 w7 ^" B
方法三:
% P! a& A- B$ \5 N# p% V' w/ q7 `0 b* Y$ w; x- e0 X* B
使用binlog日志
2 K/ O- j$ G: k8 n; q9 b+ {- L' K+ z- |4 k1 v7 `! h6 _. @) L2 }0 G( h; {
见其他章节!!!; |" v" _, W& i/ W8 K

$ w0 J, f$ `& W+ t( ~: H% W 3 _4 u7 ?1 @6 `/ ?5 k( H9 M5 ]

/ U2 S. h: n1 Q2 x注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 20:24 , Processed in 0.055864 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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