易陆发现互联网技术论坛

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

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

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

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

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

x
如果是Innodb完全不行,会提示相关表不存在。
- u, {! u- B* `; w第一种方法:1 f  k1 K2 P1 s3 e: n
RENAME database olddbname TO newdbname
4 F- R: w6 A& N% S+ X3 ]官方不推荐,会有丢失数据的危险4 r/ K) i  k0 y) L
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
( q1 S2 p, {% F/ A
第二种方法:
5 d+ J! Q8 o6 L; z
如果所有表都是MyISAM类型的话,可以改文件夹的名字; o; U7 B. u* h! y& m
关闭mysqld

3 {; U9 t' X7 @' y2 e5 {
service mysqld stop5 |, B6 U/ F% y" k1 O3 L* Z
Shutting down MySQL SUCCESS! ( \% S2 M( u2 q  r
把data目录中的db_name目录重命名为new_db_name

$ O5 k, N4 v! m; S% l# F
# cd /var/lib/mysql
2 c; V! R0 J, h- ~: E, r6 [3 ^
修改成新的数据库名称:

6 L! y, j5 G) \8 ]
# mv sichuan/ Sichuan

+ V) V' G8 P9 F" M0 t! R  U

1 s7 b9 s" M2 r1 n开启mysqld
1 U, l0 z/ G% Q/ E5 W
service mysqld start
4 n; C: w" D$ X/ YStarting MySQL SUCCESS!
1 K/ U" M) U& {1 K, e8 l  M) {

# h* J* E% f; {9 Y

! W8 ]- m. k$ y/ V' [mysql> show databases;/ \" ^+ L$ w: N1 Z0 o& U
+--------------------+3 [4 [' g8 {. M$ S& F0 l
| Database           |
2 j5 w4 W0 ~- X& j+--------------------+
7 `) @! P( ^; x% d| information_schema | 7 l) b( H) T% S
| Sichuan            |
2 c; j4 W/ m5 R5 I5 ^| mysql              |
) ?9 b' r5 Z2 ^: W$ v: y* u| test               |
- }* A/ R" ~, u2 Y" D| yang               | 7 J6 N9 B1 g7 r% k" E3 R0 ?9 l% v
+--------------------+( @! `$ x. b% e
5 rows in set (0.00 sec)
  _6 \$ ?' X" l, c第三种方法:
1 }; Y$ b/ ~3 s- {+ V/ N9 Omysqldump导出数据再导入
8 C5 e* V, z4 y" v7 o: a$ b
1 I0 K, s. ^% g2 |8 K1.创建需要改成新名的数据库。
# r( u( l+ E9 I8 }( kmysql> create database Sichuan;& D* _% T( `) T6 k% F9 T! k7 |
Query OK, 1 row affected (0.00 sec)( X: t- D+ a* E' m. w+ k, a; L7 F
+ \' x1 Y4 }8 _* A+ v
2.mysqldum 导出要改名的数据库5 k$ R, Y/ ?7 ^
mysqldump -uroot -p123456 sichuan >/root/sichuan.sql0 _6 h1 O; t5 j5 e" Z
导入数据到新建的数据库中:
3 x* A/ `% f4 t: [# b2 e1 p# mysql -uroot -p123456 Sichuan <sichuan.sql   或者:mysql> source /root/sichuan.sql( N$ o$ Q6 Y' e# |% _7 c
3.删除原来的旧库(确定是否真的需要)
! a+ Q  X/ J* H' k( }! \5 f7 D  o% R) A) s5 u) X/ W  L  M7 u- U
当然这种方法虽然安全,但是如果数据量大,会比较耗时,同时还需要考虑到磁盘空间等硬件成本。2 z1 o: R. Q! X3 G: d3 p; D

* y# _" k; w7 v+ E
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

2 }% R# q0 R) c- D  ^; J- A$ g( b# `
mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”
6 j, p8 P0 A3 e) f" u& s; }) f
mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL

) Q8 }2 A# r" J+ L: v  z
mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”

$ X) \8 x4 ^2 W4 c, e$ c% g) H  U# `6 q" H

8 P* Z8 v0 Z$ w. [2 {; R0 i8 m第四种方法:
- e$ g$ ~, X- i$ v# s直接跑一个shell脚本,$ z; V* f6 k. v
#!/bin/bash: _8 T$ y$ R0 X; b( V( B' V
# 假设将db1数据库名改为db2
, I# n5 v- w+ i/ t1 E# MyISAM直接更改数据库目录下的文件即可" b# F. G2 ~/ |! ^7 l, \( `0 Q
mysql -uroot -p123456 -e 'create database if not exists db2'
) [9 z4 Y* P: x" m4 H4 t' alist_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db1'")
. T( t; P/ ^- e; d1 l) ?1 ffor table in $list_table% C% R1 s0 s* e
do
+ f, S' A7 B- _  f# D    mysql -uroot -p123456 -e "rename table db1.$table to db2.$table"  y. B! C5 ], [; f
done
9 E* W. h8 ?: I) e/ ^
( B; w- `9 T1 y( ]3 c- V5 `0 g/ P# |: b+ k5 k/ V
#!/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”4 o/ U' N* V# L& Q" N$ d) G) U
" ?9 e* @' P4 o0 N. e  P

3 g: C% }7 x8 m! S  p
注:以上这些操作都是危险的,所以请在执行操作前,备份你的数据库!!

* k: d" @$ g) I, r————————————————, ]9 ?/ `3 @! W) [
7 i" D5 v0 @2 ?- G& |0 Q
 楼主| 发表于 2020-6-15 03:00:17 | 显示全部楼层
第一步:查看存储引擎2 E* u8 Y7 U. i" F4 T
执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB+ C  ?7 m4 \9 |! N3 a
& w6 f! w5 r2 E; \2 o% z7 h6 y
步骤二:查看默认存储类型; z) F1 u! A+ K# |
查看系统变量default_storage_engine 的值,确认默认采用的存储引擎是InnoDB
8 E3 C. d. N. b$ m( F4 U0 U( p2 {$ b2 p4 ]
mysql> SHOW VARIABLES LIKE 'default_storage_engine';
: E) W! H5 P7 y& q; H7 Q. f
  `+ T+ q2 j; \4 g8 A+ o+ v
8 T$ y! }2 G0 O  c& H7 O4 f* j步骤三:修改默认存储引擎
$ F  U, }7 J. X! ~: jInnodb存储引擎的修改方法, d# U6 S- d5 \
方法一:) C# z; s  @4 k
步骤一,使用mysqldump进行逻辑备份
: r1 I% Y" K7 R) m( s; @' p/ n3 c8 D: i/ C$ ]% g3 O$ F
1)备份MySQL服务器上的所有库6 p" h" G% s! ^8 x( F, b6 `
% D: ]4 A- K: K7 p5 A# n* M. M6 k
将所有的库备份为mysql-all.sql文件:
1 f4 Z3 C: a' X" H' z# _
) x3 Q! ?# I$ C0 Y[root@dbsvr1 ~]# mysqldump -u root -p --all-databases > /root/alldb.sql& W. M8 z. o, z3 s2 ?* s4 C6 q6 J5 l
Enter password:                                 //验证口令) W& V% U' Q! J" n" e) _( ]
[root@dbsvr1 mysql]# file /root/alldb.sql         //确认备份文件类型& n4 W' x: W- T4 E( p8 T
2)只备份指定的某一个库+ D; e( C4 [. W' H9 k+ ]( d% C  N
; X( A; h! `1 Y0 m
将userdb库备份为userdb.sql文件:% B) e; J4 l) l; Y  f

* X$ `. O( D1 v, {# g2 d: e[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
7 L5 i; K- u; }: x6 YEnter password:                                 //验证口令" r( w  a- b* Z% l9 j; {
3)同时备份指定的多个库: q1 n2 G$ N  R+ \4 Y, l5 f
  v/ t1 U! \2 K& x0 i# O! p2 O
同时备份mysql、userdb库,保存为mysql+userdb.sql文件:0 r# E/ Q5 u- x0 A

# M! i( c* ~! D" o+ R1 U- P[root@dbsvr1 ~]# mysqldump -u root -p -B mysql userdb > mysql+test+userdb.sql0 |+ Y1 |" ?$ q3 d, I' H4 g
Enter password:                                 //验证口令
# R* H) H$ {$ L- K) x6 l7 u& h步骤二:使用mysql命令从备份中恢复数据库、表
/ P* c, Q2 d$ H9 A) {7 q' Z; B! F6 \$ w- k
$ m$ W  e$ _2 K. D9 {! J8 r以恢复userdb库为例,可参考下列操作。通常不建议直接覆盖旧库,而是采用建立新库并导入逻辑备份的方式执行恢复,待新库正常后即可废弃或删除旧库。
8 F' L% T" [; ]' d" D( X/ O/ H% m; x: u: |
1)创建名为userdb2的新库
( b% \! }9 {4 s& o3 U4 q( p+ Z* ^4 b/ ?: D1 P: o4 M& q. h3 ^5 c
mysql> CREATE DATABASE userdb2;' h3 m4 t( C- A0 w$ x
Query OK, 1 row affected (0.00 sec)- K" B$ f" w! m( G: p) P' m4 W
mysql> CREATE DATABASE userdb2;; b! ^9 r' t2 f$ T# j
Query OK, 1 row affected (0.00 sec)4 X( u8 N4 i; o; O% C
2)导入备份文件,在新库中重建表及数据0 c0 ~7 d' v7 k) g- p" A
6 B' R. ]& y0 w& \9 C4 r
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
3 M' B: R$ @% L8 d* JEnter password:                                 //验证口令
3 ?$ m9 s, g3 P' A: t) h[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
. c1 g( U' E  \: R8 m( REnter password:                                                                  //验证口令
% K3 n* o' X7 Y& A3)确认新库正常,启用新库
, V( |% N% V& q  C5 b/ u
, q( C2 U0 [' O" b: H4 c$ Qmysql> USE userdb2;                             //切换到新库3 w0 F' j8 e1 r& {
mysql> SELECT sn,username,uid,gid,homedir         //查询数据,确认可用" v7 K  Y! r( h* {! @7 \# D
-> FROM userlist LIMIT 10;1 q* G3 B- X6 F- I" f, o) T8 G' g! C
4)废弃或删除旧库
% G; g$ x/ K5 _: W/ e8 G+ q
6 D+ N$ F" {. Nmysql> DROP DATABASE userdb;; e  J4 d# Y" s0 I4 b" Z  H
方法二:2 {' F4 o1 b1 J/ _
1,使用脚本修改
; {0 p6 J8 _' q" }! M: H* P2 b1 R& g
# vim /tmp/mv-mysql-databses.sh 0 A2 u+ t  w/ @8 o

9 q0 [4 B3 n* X#!/bin/bash
; g# i3 ?8 h3 n$ y7 K- |3 d# 我的在Innodb下用这种方法
3 B' G& W6 {3 |$ G9 o, W3 U# 假设将yct数据库名改为jingcaiwang
/ o+ |  v& e3 J# MyISAM那么可以直接去到数据库目录mv就可以
" }9 Z- M8 X; ?# MyISAM直接更改数据库目录下的文件即可
" Q1 Q- S& G! m8 y- h9 D5 F& z, n3 }
mysql -uroot -p123456 -e 'create database if not exists jingcaiwang'% {0 ^$ ?! s. U
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='yct'")
. N' k8 V5 C! A9 n; E7 j- N
  H* W( l0 n3 }0 ufor table in $list_table
+ L7 w! D+ S$ ]+ @do
# l+ C, w" f  f1 @* ?1 C; S    mysql -uroot -p123456 -e "rename table yct.$table to jingcaiwang.$table"0 D) q: r8 v; J
done
3 R1 i- X$ S0 f. S( B" n # z, p2 `2 w# m, U% p8 c8 {3 H

  u+ e/ Z$ p  U, o" {" n, P) \2,执行脚本1 {5 B% Y. A  h5 [! ]& p1 R

4 q4 J8 g+ U8 R; m7 T) ?#   sh mv-mysql-databses.sh& f2 R! t& \3 w6 n
7 @1 Q$ W  _# E: b3 H4 L: C

$ \4 g7 [0 T0 z, |
/ K) u( t! z. Q" e( f/ b( `' E0 [3,查询,确认结果
3 w3 i. Q) \* t+ ]& Q! l& O+ |2 i; m5 l! r- n
mysql>  show tables jingcaiwang;
8 Z& E4 f0 U: O5 M) x; ?
0 K/ ^. t5 ?$ \- [. c3 b方法三:
( N+ [+ v6 ]! ?; D
- w7 U. M' |/ V( B/ J使用binlog日志
: X. Y0 @/ x( u: S( N
$ S7 l) g, Q# D4 V( r; Q见其他章节!!!8 z% ]: R0 ]) `& E1 h

0 M3 `" O2 s3 q' }% J* @
" C5 L0 A% u' g, h1 O! x8 E7 G" f; d2 ?
注意:若数据库都使用MyISAM存储引擎,可以采用冷备份的方式,直接复制对应的数据库目录即可;恢复时重新复制回来就行。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-8 13:45 , Processed in 0.050003 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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