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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-6-15 03:00:16 | 显示全部楼层 |阅读模式
如果是Innodb完全不行,会提示相关表不存在。; o; t) n: B3 Y9 Y  z- k
第一种方法:
( g- A# k0 Y: ]RENAME database olddbname TO newdbname; ?7 y! u# i: U/ z/ s0 R
官方不推荐,会有丢失数据的危险% z7 _3 P( n; f# F; x
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。

8 x# N9 H8 S+ F; {; ~6 h/ }8 u
第二种方法:

, e: w6 V# ?$ i" C- M2 G
如果所有表都是MyISAM类型的话,可以改文件夹的名字
4 V( A  d( g% {& y) z, P# U& Y$ g
关闭mysqld
1 n- P  J  P7 d7 k: o
service mysqld stop# o# S# ^9 j6 n7 F: g$ b) W. V
Shutting down MySQL SUCCESS!
: _3 ~+ o) X& q( z) I& l把data目录中的db_name目录重命名为new_db_name

( |6 r( y1 M1 c% G6 Z
# cd /var/lib/mysql
  m0 W1 r: A. o5 }
修改成新的数据库名称:
* f7 M) k/ y( U
# mv sichuan/ Sichuan
6 j/ G' a1 `/ ]
6 }/ q4 h6 t- t
开启mysqld

* {: M2 N6 a; L/ Q9 a2 v" z
service mysqld start9 v5 A8 x5 }9 z6 A# ^/ W2 ^; F
Starting MySQL SUCCESS!
& Y/ b$ v/ }2 ?6 |, F/ I; A  Y

1 U5 P+ F9 R) i3 n
9 ~9 k0 p$ Y* S1 N
mysql> show databases;
* w( |& a8 W; l- Q% J1 w7 m0 C+--------------------+
. j9 t+ ^2 p- t9 ^" Y" D6 L| Database           |( p& e' g5 P& C8 ]- i) S4 F
+--------------------+0 n$ I- c0 u  X# q' d$ _: z) h9 v
| information_schema | 0 }9 J4 |  G$ o5 s4 v. ^
| Sichuan            | + f, ^" r# \: c5 m, X! T
| mysql              |
! K5 Z" k: U4 `+ D0 Z| test               | : F0 e: O/ j' E, F
| yang               | 5 S: T! Z; x0 b
+--------------------+3 W) H& b- j4 L, c8 a( Z
5 rows in set (0.00 sec)
& }* A9 G1 _/ F第三种方法:
/ e2 B' T' F. {1 g7 `; |% Qmysqldump导出数据再导入
8 H8 S+ t5 Q$ j' y3 @8 x
' G" r8 R% ]5 h1.创建需要改成新名的数据库。, P2 T: j/ z0 t1 E2 w0 s; H2 ^6 l$ ^
mysql> create database Sichuan;
3 F% O8 ^- b, l( BQuery OK, 1 row affected (0.00 sec)
' F/ I! M# I/ I5 w0 g) z
1 a; Q5 S( u0 m" I# ^- j8 Q2.mysqldum 导出要改名的数据库; h$ r. [8 S  Q
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
( w& Q. P3 q, Z( k( w3 I导入数据到新建的数据库中:
3 H* q; u, f4 o  d# _9 D. S# mysql -uroot -p123456 Sichuan <sichuan.sql   或者:mysql> source /root/sichuan.sql4 R4 _# Q3 ?9 I  ]1 x/ L  N0 P" V: e
3.删除原来的旧库(确定是否真的需要)7 c3 H  p, d* i( K# f; x
- \( c. E/ X( x" T
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。: \- C) T7 i1 T1 D. H* z
. G! \* x* T1 m0 t# J8 f4 w- ^
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

% f1 q" d1 ^7 k; Y* g2 T
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”

1 U) L) N) g: I& g$ ^4 a$ B
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
6 Z: c: Y! [2 A2 R! @! |9 L
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
' L0 f5 e; J; g  |; [. b
" `% T3 U* W5 ^- U1 h
4 L  H8 m' _0 g( `; @6 M
第四种方法:
4 C4 p+ a& H: m! e  a9 b直接跑一个shell脚本,+ M: I7 m3 t$ b; E, v! P4 ?1 n2 q
#!/bin/bash4 E: A- t) M* z. Z: N+ Z
# 假设将db1数据库名改为db20 r0 k* Y% x7 x- e' m
# MyISAM直接更改数据库目录下的文件即可
1 d' y# L! m% `6 G0 bmysql -uroot -p123456 -e 'create database if not exists db2'
; P' t/ k& [- s: n" ^- E6 k& q8 |list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")$ N- L4 R6 _7 v/ d/ G
for table in $list_table6 D' _+ P( c( x: d- h; w1 R7 O3 B
do. ~8 d$ w7 j" T9 t
    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
3 c5 H) a( {/ P+ }5 B  jdone
: c4 u- B& U/ z: G" Q& n
( }# K, i  f, F9 X* @1 W6 L. J9 H
4 S; E1 \9 }4 a7 X. s- C2 u#!/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”
% r' ~+ A; s7 f+ r8 Q5 t3 _3 c
% U, V: ]1 q$ X9 e! m) x
9 K' [: @6 S: Z; D2 W
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!

/ ^! _6 f0 [: t" J; |4 V6 Q————————————————
% j6 S. @4 q# T2 R( `' l# a' W" k9 p

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎! Z* j& ]* |' y% @- h
执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB
5 b9 Z" W3 q' z0 l1 f% k0 O: W4 Z% T) c. f% w
步骤二:查看默认存储类型7 P( B1 M: O; _* N$ `0 K
查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB
. C* U/ W0 y8 _$ O8 T8 R9 T! H. {, \0 _* g% C! M
mysql> SHOW VARIABLES LIKE 'default_storage_engine';5 D* ~7 s: u, E) @# u9 n
' c. d6 {4 H" [  a+ S

# U. Y; Z; z) Z步骤三:修改默认存储引擎, q, r6 I( ^5 k  j
Innodb存储引擎的修改方法
: i4 G$ k! u- a方法一:) b. Z$ x6 B: {0 @
步骤一,使用mysqldump进行逻辑备份* W0 O8 V* M( A4 z/ l

/ S1 ^, {. ?+ `8 z; ~1)备份MySQL服务器上的所有库
6 ]. |6 S( \  F; T% _& Q+ S9 o9 M' Q# z7 _5 v* f! m
将所有的库备份为mysql-all.sql文件:/ w: r, L1 W# S$ ]

7 c; N) ]1 i9 J/ V) C1 B6 l$ O[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql0 T+ u$ J8 |  \0 y. K0 {
Enter password:                                 //验证口令
" U' p. F$ \+ [1 H" j# A[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型
, h8 N# t8 |" T; v2)只备份指定的某一个库/ I2 [  x- r/ K$ ~( f
3 @' y7 h( M0 K
将userdb库备份为userdb.sql文件:
. O( Y3 G, ]  T- q- N, P( B: k; r- A4 r5 g8 j0 [% J5 K
[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
& _  I" x) G9 U+ p0 _* h6 i$ t/ SEnter password:                                 //验证口令
9 S( ]3 _- U$ \0 o3)同时备份指定的多个库
: f0 Q+ G0 W) @3 S' I3 T! |9 F; K: ~" F8 I. c3 \1 N+ ]  k
同时备份mysql、userdb库,保存为mysql+userdb.sql文件:% z$ ]0 Q- ]% k# [
- Q3 \) D: O$ s- _0 ?: Y+ D5 ]. D
[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql2 G) n! z: e2 w& o; N
Enter password:                                 //验证口令
" ~! U4 `! r% @& s( x! P步骤二:使用mysql命令从备份中恢复数据库、表: L  J  D" ~. T2 \! f
( Y+ P6 o, j! N% O
以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。7 [( u2 I2 d0 d% D  f; m. D2 f

% I! d4 y" a9 z, F1 h) p1)创建名为userdb2的新库
. s# J( o2 ]" r* n+ ?# l/ ]1 d1 Z# l2 R- {- B( j; y) ]1 k
mysql> CREATE DATABASE userdb2;# @3 t, e7 X: V
Query OK, 1 row affected (0.00 sec)
& C% V( s8 s4 b" h# C* c: Hmysql> CREATE DATABASE userdb2;
# F  k# H4 x; q: p# F, e# i* bQuery OK, 1 row affected (0.00 sec)3 A/ S! e) O9 @& [
2)导入备份文件,在新库中重建表及数据/ j  h$ ~! [& [$ |5 q

" `/ Z  j1 G" w! M1 x[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql0 X6 [- B3 R, ^3 Z& p; V: [
Enter password:                                 //验证口令
+ T8 Z4 L6 M& R: e, m' l$ t# P[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
+ q! ~) ?8 \( w5 e3 jEnter password:                                                                  //验证口令' h$ b& q( d( m6 u( x
3)确认新库正常,启用新库
9 e% A! h7 B& j+ d3 ?) i; j8 ~/ Z
  R7 \7 @3 z% B1 dmysql> USE userdb2;                             //切换到新库' {. Q  `! ~) Y: \8 t2 q
mysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用
! A" a5 ]8 m3 y; [+ q( n-> FROM userlist LIMIT 10;5 M! ^* V& p  w
4)废弃或删除旧库
/ C5 [7 K: f, N; s1 J- z
; s# G1 I5 k; Z9 K8 \mysql> DROP DATABASE userdb;
4 C3 S2 u3 P2 l8 ~( Z7 g9 w; K- @方法二:3 Z! e/ h+ |/ x" l# ]
1,使用脚本修改
$ X5 C9 r' F/ H
; \2 @' `' G: a9 N# vim /tmp/mv-mysql-databses.sh
/ H* k5 [0 ~+ d* D% i+ Z
8 {/ e% H4 x3 V0 |: v#!/bin/bash% `* @& D# G* q2 _+ g, p- Z$ z! i
# 我的在Innodb下用这种方法
+ i0 M9 o5 ]" ]# b5 ]: l# 假设将yct数据库名改为jingcaiwang
; l1 a' `/ O  p- t0 j8 Y+ c9 d# MyISAM那么可以直接去到数据库目录mv就可以
  J5 f! G/ U2 I8 B# ?# MyISAM直接更改数据库目录下的文件即可4 _7 U/ @+ Y. X) R

- P& F  n4 s- m/ x2 P) G; ^mysql -uroot -p123456 -e 'create database if not exists jingcaiwang'6 `2 {0 ?6 M" ?2 |6 g
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")/ ]' z0 d' k0 U, ?- \( H

$ n6 m$ U5 `- r* q4 l' ufor table in $list_table
( E" L: _# |3 N( c0 Ldo, A8 T) \8 a- v* S1 V0 V  g
    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"
: I5 V5 h. |: I4 I; f! B2 idone9 K4 M, R$ o6 s3 @4 R; n+ A3 N7 q
9 H( y* S( f, M3 p  U8 H

7 X9 R* T' s* |+ S$ g7 O2,执行脚本# t* i' _# {9 j. ?& x
# I6 E6 z2 {( u) C5 x
#   sh mv-mysql-databses.sh
$ S7 ?2 K6 ?2 x
# S3 }  E; k9 T6 i5 E1 k + {& W/ }6 _2 I4 h! ?3 u2 t
5 V8 O" h% Q7 O: l" g7 T% t- D
3,查询,确认结果. X6 [7 e; j" X; t% J8 U

( z* {. j$ W" B+ Kmysql>  show tables jingcaiwang;
; r6 D9 H/ V) G: t: \/ X5 h+ G' _6 }/ i4 Q; V. x! K
方法三:
: V3 u6 d- i, {( g
8 ^8 f1 k; H5 e1 V% ^: ]" C" S# Y" I使用binlog日志  o/ ?( ]" }8 \) w4 r
) w/ q$ N% R( B* J* ?
见其他章节!!!5 m7 h' [9 L- A2 E
4 {( F+ G* X5 E  s, X

# d# L! R! e$ k0 c3 K& e9 |( i1 M6 b  X- Q6 g2 D4 T7 v
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:23 , Processed in 0.016149 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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