易陆发现互联网技术论坛

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

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

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

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

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

x
如果是Innodb完全不行,会提示相关表不存在。
; P! r, Y+ W/ w5 |4 t第一种方法:
" H" e) H: k+ b( ^RENAME database olddbname TO newdbname
9 }5 j$ z/ g7 W官方不推荐,会有丢失数据的危险$ p, Z) q4 m5 ^! D
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。

% ~% B. s' C  Q5 g- a
第二种方法:
4 [6 {# e" N! D7 M0 j% k4 M. E
如果所有表都是MyISAM类型的话,可以改文件夹的名字, N: o1 v; y9 h+ L& \
关闭mysqld

/ h8 v! z7 R1 o/ y/ S+ I
service mysqld stop: v: a2 X3 _/ w0 _3 |
Shutting down MySQL SUCCESS! % L7 A% N! @# e+ J3 Z% q' b
把data目录中的db_name目录重命名为new_db_name
& F. E, Z4 j5 L. `
# cd /var/lib/mysql
- C+ E6 @& T0 o2 k$ q
修改成新的数据库名称:

- s# A5 v; c( ]. ^  u. o" Y
# mv sichuan/ Sichuan

7 i  _6 Q+ l. Z- b: z

. ~; B, J5 j$ i( F6 A2 ]开启mysqld
# P; l& x1 ^! W; w
service mysqld start
! d- r. W7 F5 o# S1 XStarting MySQL SUCCESS!
7 I+ Z" b" Y: M8 T3 ^4 K8 T" i

% a+ I6 ~' h3 J

# r5 m0 k" S4 k& m6 Y, d6 P) B, Fmysql> show databases;
* j2 d' }5 s. B( Q4 I2 ^- W+--------------------+" W- m1 Y3 O( x9 j4 V: _
| Database           |
+ Z8 S: ]3 |( ]7 P, s' ~  `+--------------------+# G/ k6 U! t  ]  P
| information_schema |
8 I1 e  B1 ^) I. M6 \. `| Sichuan            | $ w0 k0 J; i1 D  x! k7 E8 @
| mysql              |   }5 A1 @/ k- X, D4 u5 a- B, v# }; ]1 N# A
| test               | " ]1 F$ b. f' C, ^* r' p
| yang               | 2 Q7 t' r. m& b1 ^
+--------------------+
  I% F* A, p! M( b5 rows in set (0.00 sec); m- C/ R% K! R( O
第三种方法:
6 m" j. P& b& F8 O! H- H4 F0 ymysqldump导出数据再导入6 p# z* W) A5 b6 Y* c8 C) m# J

& h2 o+ R" {9 j1 `. Z% G0 v1.创建需要改成新名的数据库。3 ], i  d) e. `8 [, [8 @5 ~: W
mysql> create database Sichuan;
- S5 s3 ^4 O) C6 D# b- fQuery OK, 1 row affected (0.00 sec)) L! i- x' @& y8 v) h8 P

" h, o% |, t5 s- G+ h! d2.mysqldum 导出要改名的数据库* `$ m* L/ M& B* n9 J& h
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
1 V: F! b) p! ~% a% N+ T导入数据到新建的数据库中:
; i& Z( a9 g1 A# mysql -uroot -p123456 Sichuan <sichuan.sql   或者:mysql> source /root/sichuan.sql
; V6 {+ |! ~  n2 l7 j' F9 I3.删除原来的旧库(确定是否真的需要), G0 m4 l$ f) A
9 P+ u8 T+ O/ {, ?9 l
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。& x' v4 X2 S/ X" E3 m. v
$ q) V; G& I' X& |
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

# [9 ?$ W- `* Q2 q- V3 j. g. B
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”

! @8 q5 r1 w- Z% N7 z  A* h$ T
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
. a* H/ f9 p1 j, c* K+ p
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”

9 ?0 a! ^) ^% a% q" `/ Y1 g; k0 j
. K  y' V3 y# z: U
第四种方法:& d6 d  O6 Y# `( U* z% ?
直接跑一个shell脚本,
* u1 e8 z% w% ?' [1 n) ?4 a#!/bin/bash
) m; Y5 ^- \5 [5 W  @6 ^# 假设将db1数据库名改为db2; [* W3 j: Z3 O9 _4 Y# y8 {
# MyISAM直接更改数据库目录下的文件即可
& u% D) p9 ]! a2 F, Gmysql -uroot -p123456 -e 'create database if not exists db2'6 }& |, v1 I$ F3 `: P5 p
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")2 k5 e% @: w, Q' ?" q" P
for table in $list_table
3 }* R$ ?% G- l2 R( g/ t8 X3 Q% J# Ddo
2 f3 c! m" |0 X6 ^( f    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
! X. S6 w3 o2 l' {& ]done
  f3 ^+ L- M5 [# k* r) r  y" h1 o6 E# O8 Z; n; ~. b
  @5 w! x( w$ W/ f' Y' `
#!/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”
" N  B! [, l! F/ p
3 u/ _6 s" t4 u! s0 }8 {& S0 Y  g
+ F7 C: j. Y- p8 ^' T
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!
" [0 v+ O5 y3 w9 `1 `9 G
————————————————
4 A, N) [3 R) I5 z$ X" f- h( ^0 s& d: U. P
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎
, Q/ Y$ o, \: p执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB& o6 r- W$ \1 A3 {
& t- {( G) Q6 T* M4 R
步骤二:查看默认存储类型8 r2 A) R$ X3 T3 O& A3 P- w6 g/ T8 ?
查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB
2 }* |4 p3 e& P/ {2 F: Q0 H/ h* E7 h* D( W
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
4 i. m2 v6 U. G7 [6 O# v4 j( j4 s* h" \$ C; j
: k2 F( M: K: [( Y9 H# U
步骤三:修改默认存储引擎9 k. x7 G: P* v
Innodb存储引擎的修改方法
  \2 k3 q$ @# B! N* _' K4 i方法一:3 q2 b& ]/ D0 Y( N! h. n
步骤一,使用mysqldump进行逻辑备份
5 y. s: D, G8 x; h
) m5 L; n' z" e+ U1)备份MySQL服务器上的所有库& y3 \7 f! n! l$ u

2 M. w2 l, s1 O' T# T将所有的库备份为mysql-all.sql文件:8 A& n# [1 N8 u1 r8 E8 L+ o. C7 Y" k2 s

' B. p* P/ f, D1 i0 i& J' ?% {[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql
9 f$ Y; R$ B9 T7 K# X/ }* m9 sEnter password:                                 //验证口令; x- L* I& A2 p% {* u& j
[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型/ s. f+ J* z. s
2)只备份指定的某一个库
: A9 A- K/ P' H% A/ g  M3 h! \- ^" U# j
将userdb库备份为userdb.sql文件:0 K3 |! C8 k& |  @

3 ]+ H* y; R* @8 {+ K7 u/ B[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql1 B% ~1 D3 Z. k8 s6 k
Enter password:                                 //验证口令
. ]  v" V1 f' G4 d3)同时备份指定的多个库
9 M+ H$ L( o$ y% t4 R4 {% g. e, K0 m/ L) k9 n% V
同时备份mysql、userdb库,保存为mysql+userdb.sql文件:' L* s0 K! d- [, q
: H; W5 y) Q; A1 `( y& [" U
[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql
2 P3 a, k9 I, {- c/ W  MEnter password:                                 //验证口令
' k( X, ^5 ^: Y步骤二:使用mysql命令从备份中恢复数据库、表
& p4 ]5 g4 V3 q& }' P
9 _$ `. ]# k3 V# o) Q% G以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。
. A& E$ n) F% g# E4 ^
( p" N- X' k6 b2 d: z1)创建名为userdb2的新库6 E0 ?7 W5 S3 Q' j
" v1 V  l5 ?/ U3 Y- t) r0 w
mysql> CREATE DATABASE userdb2;
6 j- M8 ^" x: a/ a7 NQuery OK, 1 row affected (0.00 sec)
- q4 h  R: U6 J2 a5 y; s' h0 G& ^mysql> CREATE DATABASE userdb2;8 s9 N1 G( a) f8 q$ i% H- n% k- d
Query OK, 1 row affected (0.00 sec)
' E9 b3 G# }) H. m" `2)导入备份文件,在新库中重建表及数据
6 C  v3 n7 D. Q% _' W5 j! q# l1 R2 _
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
9 o4 ^6 L6 k6 K2 |/ IEnter password:                                 //验证口令
  `1 Y$ B/ j! N& m[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql% ~* o- g0 l: w' @5 R/ {
Enter password:                                                                  //验证口令
  @4 {. w: N" \3 @1 T* E3)确认新库正常,启用新库  d$ y" A7 ~; S+ t" I

5 P- Y3 P; x6 O$ K, A6 \mysql> USE userdb2;                             //切换到新库
5 K% x1 S) e9 m* @' l+ J3 |6 Amysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用
. P! B3 A! S) V# g9 o! U9 d6 h0 @0 [-> FROM userlist LIMIT 10;# }& ?$ ~7 {# w- ^/ v
4)废弃或删除旧库8 Y# O- I/ s/ P5 r
" F  _0 ~2 T/ `& B' J- p2 M" v) c/ {
mysql> DROP DATABASE userdb;; A0 f2 w3 K0 H7 n
方法二:
) l7 Q4 c& ~. [/ z. M1,使用脚本修改
8 G' d0 f: j; {. g5 N: O- K$ @9 b; F  G+ E- Q( w4 i1 q2 E
# vim /tmp/mv-mysql-databses.sh $ z6 g0 P2 w% i) ^

: |# i3 R: d& s0 N/ J#!/bin/bash' W" z! G8 s, P% S/ S) q
# 我的在Innodb下用这种方法
& g( N5 x5 K3 b4 ?# u# 假设将yct数据库名改为jingcaiwang
4 A, \% `6 c2 I1 J* }# MyISAM那么可以直接去到数据库目录mv就可以
. r& T- [7 q3 Z( w' c. C' f8 M# K# MyISAM直接更改数据库目录下的文件即可/ \0 T* @3 ?& X' Z3 c* x8 z

# }- L( O) u! \0 Omysql -uroot -p123456 -e 'create database if not exists jingcaiwang'8 M/ O$ B* c$ d$ F+ M
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")
1 P% R% ]- z$ X( ~5 Y+ e
3 f9 b7 Y& Q$ B8 o. d; afor table in $list_table
( L' T1 B& V" P4 V) _* Wdo* u# |2 h) y$ K3 E. t
    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"# p2 i0 @( W& v9 ^  o  ]! i9 g
done
, {- H0 l6 Z- R" x6 y $ g: V! @4 [# ]" r4 h1 U
7 @. H2 _- _* f& }/ _8 O; n
2,执行脚本
' E% G5 u: Y5 |) U( C  a. Z% d, r* d, R, X+ u1 z  W5 B
#   sh mv-mysql-databses.sh2 Q, P" x, U) i  X- U
$ v; d  q) E( J3 s
) W  A- w- `7 O4 A3 N% g
) a8 F8 ?* Z% J
3,查询,确认结果  V/ ^3 b4 g# W" h4 X

+ y6 P! g% v# y3 emysql>  show tables jingcaiwang;
$ N3 y+ n6 T% E( u- w9 l- ], \; b; d
方法三:% z; i* \7 e7 t& W: M% l: z% F
1 J  ~  o- R) R6 C1 k* X
使用binlog日志
  E5 I. @2 C, S* {
3 G' n0 M  g# B1 V见其他章节!!!( l1 y" D+ \1 s- B! o

3 E9 K5 o3 L( M$ C- z8 H2 q
1 f4 z& ]6 n' b7 c9 @- M4 s% J5 T9 U$ U5 c8 t
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-8 20:22 , Processed in 0.043944 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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