易陆发现互联网技术论坛

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

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

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

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

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

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 p
service 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) F
mysql -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% c
mysql -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
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎
. H2 m) o& W- _0 G. h7 v执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB
4 g4 X4 Z$ y+ ^  U/ y8 w
9 |. {$ _5 w4 Z! b/ o. y& Y: ]8 g步骤二:查看默认存储类型
. w/ v( |' H- S% h% A) a0 v查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB, N; s7 h6 o2 E$ X. e' k
) v( C" I: e9 Y4 F
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
* A: u, J; Q+ L& ]& W! I! p7 Z. Z$ F6 n% ~1 e: [/ R

; X5 Y+ b; Z9 _0 e步骤三:修改默认存储引擎
7 j, L* \7 @. Z) C- l* X" a( VInnodb存储引擎的修改方法/ V8 {4 M: C. @: M% I
方法一:5 o0 \; H7 L% R1 g" p8 A5 J0 H
步骤一,使用mysqldump进行逻辑备份
6 l9 A2 O9 g4 @  T0 M/ I
% X' d$ y! y7 v1)备份MySQL服务器上的所有库& ^. p. q6 j" {3 D3 n# j% U* [
! }, F$ R# @/ r( F
将所有的库备份为mysql-all.sql文件:! b% O4 G# t* \- r- F1 x

, ]. p0 W& F* @: V/ T' }; ][root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql
, F: W) i& a& d; U+ _6 TEnter password:                                 //验证口令
' a! N* P4 n9 r5 q. u[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型2 z3 A) h3 a/ g, n8 t- E) }
2)只备份指定的某一个库) z6 w8 K$ L$ D8 b5 @4 M  ?

6 N9 z" N1 O1 U1 R将userdb库备份为userdb.sql文件:, L6 T! S: i* x. s- x1 |
  n1 ?1 t0 m" \5 V- V
[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql; {: P* f$ N8 {6 y0 S- E0 x% z
Enter password:                                 //验证口令
  |. j" b- W1 ~2 X% Y% f4 w3)同时备份指定的多个库2 @( r- K- P  _  E% K

' e' E/ a( {7 M& f  G. q+ P: }同时备份mysql、userdb库,保存为mysql+userdb.sql文件:6 I$ k# v: u1 b& U3 w2 n, s0 F

8 _) H) p5 h$ N1 W' S7 d  G  U3 Z6 Q[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql
5 Y# M& m, k) Q; ?Enter password:                                 //验证口令% x. g! ^4 _6 @4 Q2 p$ E
步骤二:使用mysql命令从备份中恢复数据库、表, @& [- y7 O' k( P6 `  T7 k8 Y
$ l! |: p; v* {# n% m* S, `& d
以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。
/ K) ^* s4 f; H3 S) p. ~5 j7 Q) ?# ]4 O
! D$ k7 j4 j" s: t  Y; T1)创建名为userdb2的新库3 R3 x8 X! L/ v. f- P

( S+ t1 b4 a/ f  @2 f+ K4 \* T3 k: Qmysql> CREATE DATABASE userdb2;- O" U+ F4 N3 b( E' e
Query OK, 1 row affected (0.00 sec)
; p" ?+ Y+ k: R; G( Ymysql> CREATE DATABASE userdb2;2 c3 L7 j) S7 m/ V7 g) m8 V
Query OK, 1 row affected (0.00 sec)
* x( b; f% b8 M; Z7 V2)导入备份文件,在新库中重建表及数据% l5 `) c9 q9 T& q7 v& R1 R

0 E; A1 d9 ?+ N0 c2 f[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
0 P# v" R( F6 s7 T  Y3 L0 @4 fEnter password:                                 //验证口令; _6 W" x2 K/ m0 y% Q
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql: F* C1 S0 o0 B; {3 `8 V- h
Enter password:                                                                  //验证口令
2 H6 q# \# ~. `, o- C' J3)确认新库正常,启用新库
2 M# d; \. h( E% c3 q! U/ e* g" q/ \, M
mysql> USE userdb2;                             //切换到新库
$ u; X. O& r7 m4 n( A7 c! Emysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用$ a3 [1 }/ T" [- h: H
-> FROM userlist LIMIT 10;/ ?7 ]6 Y3 L6 Z/ N' z% k6 U/ J
4)废弃或删除旧库
; o$ ]/ ~5 Y& x( |0 E5 s; C' ]; }
mysql> DROP DATABASE userdb;) u6 `/ T( j# |$ L& W* d4 y
方法二:
; M; q0 S% {6 b* X1,使用脚本修改  B! }) @% k; P1 v. S8 _& M! C! v
  h, f: ~$ ]- y$ @  o" I# ^
# vim /tmp/mv-mysql-databses.sh
) }' t7 T6 L3 y  |' [- w2 M; C1 C- G6 }" `6 c) [* [$ c9 R/ X* }/ Q  x- {
#!/bin/bash. t8 `- i3 T- q4 k
# 我的在Innodb下用这种方法
- S! H# Z- H! u7 B# 假设将yct数据库名改为jingcaiwang
& N; d- E3 y. O1 ?4 L& f4 z) A, X; h# MyISAM那么可以直接去到数据库目录mv就可以
# k$ b/ q) k! v  G- V" K# MyISAM直接更改数据库目录下的文件即可
2 Z$ Q& P3 Q) A$ Q' G! u- Y
; h3 O9 O( M! R2 rmysql -uroot -p123456 -e 'create database if not exists jingcaiwang'' R' }1 }/ b6 M' N
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")* w/ s, M3 `# J* \" m% F# H# r2 z

# d) W( M  e6 n8 Afor table in $list_table
/ P" g  j% s1 ]/ R; K, vdo! E. ^1 B5 V( D+ W6 F* s
    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"
1 o( v. z* F! T- `! Gdone
. G9 j7 M+ e+ r7 i3 T% B9 \" x - e6 q7 w# t( o2 ?* h  J

8 V( `: Y! W2 I# `6 d( B+ s2,执行脚本2 t5 M3 X- n" Q, y' [9 D& N: _- x

$ J& t; f3 w4 T. I0 O4 \#   sh mv-mysql-databses.sh
" @4 }5 k$ s. j+ q2 q. k  A: F6 j! c1 b4 g7 T
2 E7 |7 O/ v3 v3 ?

& i6 h$ O, j( Y5 _2 b/ o3,查询,确认结果
3 J$ M, p2 J/ v; J6 v) o6 O, B) ^
  j% d, B( f. h# n- J; wmysql>  show tables jingcaiwang;
5 {3 n1 T6 m- U& X$ @0 N! o: k' w% s: v/ ?
方法三:" P. w! D- v3 w' r

% K4 m) x! T/ ^) J) |+ L使用binlog日志8 C9 a* O8 M+ ~$ C4 N% x( ~! {

1 m2 J" J5 a: D见其他章节!!!
+ ^- s0 i0 g5 o- c3 S# `% Q' X( }( Y" b% ?5 d( \! e7 K

- Z6 _3 v4 p2 Z2 h( h+ P; k) Y, J' C  c) S. o- e
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 点击这里给我发消息

GMT+8, 2026-4-8 13:44 , Processed in 0.041328 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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