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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-6-15 03:00:16 | 显示全部楼层 |阅读模式
如果是Innodb完全不行,会提示相关表不存在。8 s7 k4 e6 i6 u% F: c
第一种方法:
1 f7 k) q5 ^/ l( z" x, `RENAME database olddbname TO newdbname: Z+ l, T8 o) O, u- z3 E
官方不推荐,会有丢失数据的危险7 y- w  a0 Q" A7 k7 x7 f
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
0 V! l3 y* l. @1 H' m
第二种方法:

6 S# ]+ l2 v% Y% L4 N+ j- ?. ]7 V
如果所有表都是MyISAM类型的话,可以改文件夹的名字9 K2 D9 F6 Q: b$ s; Y, o
关闭mysqld

/ {0 {; U7 p4 \$ ^5 p9 B/ f  d. T
service mysqld stop* O6 g% ~9 S( S0 H
Shutting down MySQL SUCCESS!
/ o2 ~2 s  z8 }' x; H0 Z把data目录中的db_name目录重命名为new_db_name

9 G( x$ k7 p4 F. k" J
# cd /var/lib/mysql
# C8 M7 s$ G) N) x
修改成新的数据库名称:

. L4 c; G$ V- I% j2 \" q2 Y
# mv sichuan/ Sichuan
! _& l9 h* B- u
, I& a  k& w) m  N
开启mysqld

% S" P1 T" d; X2 y+ V! B
service mysqld start6 {& y  f( F* H+ O1 ~5 n
Starting MySQL SUCCESS!
- _6 Q5 b- ?' V, T! E5 ?
% W, \8 h, C0 j$ K
  ?6 w. ~" ?9 P$ Q
mysql> show databases;
6 ~0 D+ N8 R- R; ~# a+--------------------+7 q: G( l  T5 p# c1 w! Y( N
| Database           |- X2 t2 [8 s) \
+--------------------+6 X; M3 m5 C# ?2 V5 f4 H- y
| information_schema | 7 S8 D/ w# q/ n
| Sichuan            |
, X( ^+ ~# z% O& L4 }| mysql              |
" Y- ~. @1 R' M% |- `5 F& h| test               |
& r' x; y+ h" m0 |" e' D3 F; O4 f| yang               | ) Z. o; d4 Z; y9 s$ w9 _9 y8 t5 l
+--------------------+2 m( }4 p5 M8 b+ U! ?
5 rows in set (0.00 sec)
) V7 U" r3 B/ o. S, C6 [第三种方法:4 i! r! ^3 t+ g- A* e
mysqldump导出数据再导入3 H7 N" }$ l# `- ?% Z
6 s# C( U1 Z2 g: x7 g9 _. L7 K
1.创建需要改成新名的数据库。
, h+ N9 m' _7 W# Xmysql> create database Sichuan;0 `- |$ q/ k  b, e
Query OK, 1 row affected (0.00 sec)
) {, m2 a+ m9 r- P( \" t* e1 K+ \
9 v9 T: k& U8 M* v2.mysqldum 导出要改名的数据库5 Z) y% v0 A( G! j
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql
( `8 Z$ U. I# [  ]- L  I导入数据到新建的数据库中:% u; I6 w% h9 @2 G6 `( `# y
# mysql -uroot -p123456 Sichuan <sichuan.sql   或者:mysql> source /root/sichuan.sql6 ?9 N* U$ k5 E' f4 c0 m2 _2 P0 v
3.删除原来的旧库(确定是否真的需要)
, G: v1 L  e( R  g& p0 M5 `6 V
  a- G& }; U; L; l  L当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。
! C( `1 I! Z% j; i( [4 @( t6 T" @2 a+ [: {4 t
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

( U! P1 y* }7 O, J. S' I+ e3 C! M
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”

& G! o+ P. ?- d, j
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL
1 {  i3 H- O& R9 s0 _" ]" N. W# @
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”
2 e3 v! Q2 M" q, K$ e* g
, a: ~4 R! X$ J8 f- ?+ d) u! v: O
; S5 i2 R7 B1 X
第四种方法:7 Z' O" @% F. T
直接跑一个shell脚本,
8 R3 Z* a+ i/ `: F4 t- ^#!/bin/bash
; }9 F) e6 q! S# T# 假设将db1数据库名改为db2
" e$ }6 y* W& ]2 _- x& O% j# MyISAM直接更改数据库目录下的文件即可0 o" {- T( L6 I; G+ i1 B/ b2 N7 r$ h  h
mysql -uroot -p123456 -e 'create database if not exists db2'6 n( n. n  M( c3 I% c
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
$ h: w3 B" c1 J3 J& ufor table in $list_table
) l8 f3 J& \- o; K2 H8 Fdo& G$ a4 j6 K- `' q" z6 ^8 T
    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"
1 X+ S5 Y1 p& b8 ~" ^' K% Bdone" i- c4 n2 O% c2 N: ~
/ B4 ^+ h8 k( y9 F- u; _$ ^
7 \& \! Z" L1 E* s. m
#!/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”' k$ e6 _7 J! B- {# B& r# L

) V4 a) J: M, U- f$ F9 {& ~  d, S2 u& s& T7 E5 A# K5 O5 y
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!

1 R% D/ {  ~/ f# }$ t+ M————————————————& ~; v" K8 R, [' z0 o2 Z, G8 c

3 V/ v% g. X2 L, n7 p

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎1 _' L/ G5 @* c3 L
执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB6 ~, }) y; Z. B8 J0 D3 V
9 F* E1 M9 M' M! m
步骤二:查看默认存储类型' _+ v! E% y3 Z* a9 v5 w1 ^
查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB! N5 r( Q! N: Q# b& K! l) g
: d5 V& g# q$ J# z5 d
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
' f% V$ A5 J! |$ n0 ]2 ]& |- L$ ?
( {8 a  p7 I4 f1 ]. o  Q
9 Q/ Y. o, w$ [! X9 a! `步骤三:修改默认存储引擎4 G/ p5 H8 v4 G! ]* K. z4 A
Innodb存储引擎的修改方法6 O. y. `' D4 |, J! Q$ q
方法一:: s2 E2 o' \9 w5 M2 M
步骤一,使用mysqldump进行逻辑备份# ~7 X0 q" z8 `2 \

( h5 X! ]& l! T9 H6 E3 J& y1)备份MySQL服务器上的所有库: _. P" t# X. ^5 i% {& ^. ~5 U

: h# P+ h3 }  w, a2 J" _+ r, C将所有的库备份为mysql-all.sql文件:
. Q# e  m! X' o% @( T9 W1 A! V; U% k8 j; Y  w/ h$ h" U
[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql  \  O" }- ^  B6 r$ O! P
Enter password:                                 //验证口令
5 o" P; a( `# I* n; G$ E6 o[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型* O& J; d; j1 J! D! J
2)只备份指定的某一个库& h2 p1 g; [1 P8 B
6 k) Q3 Z& w2 K: F+ [. ~3 [
将userdb库备份为userdb.sql文件:
! D  O( E# ?6 Z+ j3 d, a" j' A# i4 H$ C! F
[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
7 L6 J2 u1 M3 l+ AEnter password:                                 //验证口令" R9 Q# S8 h7 U1 z7 r
3)同时备份指定的多个库
; s: t0 k6 U1 |/ z6 _5 y* _, q2 U) m) c6 F5 {/ J
同时备份mysql、userdb库,保存为mysql+userdb.sql文件:
& a) f4 [; T2 _+ b: [1 i; \' ?0 E0 Y+ z* d2 q% m" [2 z+ b/ k
[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql
2 o( J5 B, Y. B7 J$ [9 u- fEnter password:                                 //验证口令- W$ d# P6 Q& [2 X* Q2 O; x$ K
步骤二:使用mysql命令从备份中恢复数据库、表
( \( X; K( ]) z
, E: Y" F0 x3 B! Y% z; U以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。
5 r8 N  Z# z- w1 }$ g5 o8 ]' i5 V" s0 [
1)创建名为userdb2的新库% P  z% Y2 v8 [5 k: A  a

1 j% @" O% z4 i; o7 Mmysql> CREATE DATABASE userdb2;4 S; w% b2 y( G: i
Query OK, 1 row affected (0.00 sec)& k: w" A7 ^3 w" L3 G. \
mysql> CREATE DATABASE userdb2;
# e0 b. d6 d! f6 [# e2 dQuery OK, 1 row affected (0.00 sec)+ |+ W! \+ _6 `: \# o
2)导入备份文件,在新库中重建表及数据
* i* A; j" [" l. g" u0 Q
; ]2 G7 O8 V$ c+ a1 d! W1 }[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql, I6 ^  a+ B* D. c
Enter password:                                 //验证口令: ]& J$ B; s3 D7 k/ X
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql" Y* ^: D+ d; ^8 t" Y
Enter password:                                                                  //验证口令% E& y* c3 ~; X1 D
3)确认新库正常,启用新库
( p. X- B. p& |( F. E3 b9 j  ~* U! \( y3 L$ i
mysql> USE userdb2;                             //切换到新库
. [/ F2 Z- G! q! i+ i$ Kmysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用' p9 w4 A" d  Q6 d1 i
-> FROM userlist LIMIT 10;
' Z  F  e3 `4 `. h1 ~4)废弃或删除旧库1 i4 a' X* X# x+ W& C/ j$ t9 j

) Z7 C1 O: Q. f3 Z) r4 nmysql> DROP DATABASE userdb;  D, l, T; O( O- N3 o( Z8 G- ]
方法二:
$ L: r/ {6 {: L" j/ P2 ^1,使用脚本修改
" X' t% L9 A: v  g8 N2 z$ B  C4 o, Q
8 z" G7 R" d5 n9 {# vim /tmp/mv-mysql-databses.sh , D; p( Z$ Z+ b1 o$ ?# I3 ~2 V/ W

  `5 D* P3 L* x% `* p  p#!/bin/bash
. d# F3 W% d8 m1 X2 {; ^# 我的在Innodb下用这种方法+ e) a0 L1 ^. b1 R! C
# 假设将yct数据库名改为jingcaiwang
, x5 H3 t. o6 i: J# MyISAM那么可以直接去到数据库目录mv就可以! x: U6 A" s0 G; O  A  O
# MyISAM直接更改数据库目录下的文件即可! U  Z! T1 Y% }: [! d+ u* [

# E3 r( V9 U, A2 o# B- [# a' S( tmysql -uroot -p123456 -e 'create database if not exists jingcaiwang'$ _! `4 ?& ~4 S$ `
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")
9 D$ ^- B+ r$ s* ~+ K4 }3 {
* i. o( A; g3 r7 _+ t3 yfor table in $list_table
1 K9 ?0 p- W0 P  p" P; h" Wdo
5 i) W$ R2 m1 t, K/ S0 `1 J    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"
$ g( H  \2 {; F6 i6 mdone0 \8 w% A9 h$ o. N
. C$ Y5 \, K' b

1 v2 M( P% g  ?9 i; L5 E7 e2,执行脚本
" W! M' ~) F( o9 k5 k. u4 n3 D5 M+ {, l5 Z, C6 d  _# {4 V* Y
#   sh mv-mysql-databses.sh( K6 s7 u6 {! ?" G/ S- |5 C0 A
8 K; G* u3 J8 q1 N: t8 C

. I9 Q0 m6 s" b# G& v+ M) b1 L( w0 S7 a+ _8 d! l) i
3,查询,确认结果
+ E" f+ H' U7 z0 M3 c- r8 I$ R3 B' A; u% A% ?# G$ i4 ?9 Z* v0 Y( a
mysql>  show tables jingcaiwang;
' r/ B" N3 k- ~: n% C6 s* V9 P7 ]0 V. U3 v) f
方法三:
% J( C; x1 |9 l- g8 I) l
0 N' I% W3 i; j9 ^. @% R; e# G使用binlog日志1 p$ }% l: @8 _* N3 O  b9 U6 Z
/ W# U& z8 K; s1 e; s7 [8 u
见其他章节!!!+ V0 C0 Y$ p$ L1 z) b

/ G! }1 z% x5 G
2 B4 m: W; g: @  r* M+ I7 D1 w  V. ~
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:19 , Processed in 0.019710 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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