MySQL 復制表
在丹寨等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站設計制作、成都網(wǎng)站制作 網(wǎng)站設計制作定制開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設,丹寨網(wǎng)站建設費用合理。
如果我們需要完全的復制MySQL的數(shù)據(jù)表,包括表的結(jié)構(gòu),索引,默認值等。 如果僅僅使用CREATE TABLE … SELECT 命令,是無法實現(xiàn)的。
本章節(jié)將為大家介紹如何完整的復制MySQL數(shù)據(jù)表,步驟如下:
使用 SHOW CREATE TABLE 命令獲取創(chuàng)建數(shù)據(jù)表(CREATE TABLE) 語句,該語句包含了原數(shù)據(jù)表的結(jié)構(gòu),索引等。
復制以下命令顯示的SQL語句,修改數(shù)據(jù)表名,并執(zhí)行SQL語句,通過以上命令 將完全的復制數(shù)據(jù)表結(jié)構(gòu)。
如果你想復制表的內(nèi)容,你就可以使用 INSERT INTO … SELECT 語句來實現(xiàn)。
-from 樹懶學堂 - 一站式數(shù)據(jù)知識平臺
有兩種辦法。
1、在B機器上裝mysql。
將A機器上的mysql/data下的你的數(shù)據(jù)庫目錄整個拷貝下來。
將B機器上的mysql服務停止。
找到B機器上的mysql/data目錄,將你拷貝的目錄粘貼進去,然后啟動mysql服務就可以了。
2、使用SQL語句備份和恢復
你可以使用SELECT INTO OUTFILE語句備份數(shù)據(jù),并用LOAD DATA INFILE語句恢復數(shù)據(jù)。這種方法只能導出數(shù)據(jù)的內(nèi)容,不包括表的結(jié)構(gòu),如果表的結(jié)構(gòu)文件損壞,你必須要先恢復原來的表的結(jié)構(gòu)。
語法:
SELECT * INTO {OUTFILE | DUMPFILE} ’file_name’ FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ’file_name.txt’ [REPLACE | IGNORE]
INTO TABLE tbl_name
SELECT ... INTO OUTFILE ’file_name’
在dos命令提示符下使用mysqldump命令進行備份.
如下:
C:\Documents and Settings\Administratormysqldump yinshi c:\\backup.txt -uroot
-p12142022
在工作中需要把MySQL環(huán)境某一個庫里一個表復制一份,故整理記錄方法如下:復制整個表create table new_table select * from old_table;
復制表,不復制數(shù)據(jù)create table new_table select * from old_table where 0;
主鍵,索引,自增等其他額外特征不會被帶到新表中。這點和其他的數(shù)據(jù)庫產(chǎn)品類似。
我google了一下大概有一下幾個方法,
1.復制表結(jié)構(gòu)及數(shù)據(jù)到新表
CREATE TABLE 新表 SELECT * FROM 舊表
2.只復制表結(jié)構(gòu)到新表
CREATE TABLE 新表 SELECT * FROM 舊表 WHERE 1=2
即:讓WHERE條件不成立.
3.復制舊表的數(shù)據(jù)到新表(假設兩個表結(jié)構(gòu)一樣)
INSERT INTO 新表 SELECT * FROM 舊表
4.復制舊表的數(shù)據(jù)到新表(假設兩個表結(jié)構(gòu)不一樣)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 舊表
這種架構(gòu)一般用在以下三類場景
1. 備份多臺 Server 的數(shù)據(jù)到一臺如果按照數(shù)據(jù)切分方向來講,那就是垂直切分。比如圖 2,業(yè)務 A、B、C、D 是之前拆分好的業(yè)務,現(xiàn)在需要把這些拆分好的業(yè)務匯總起來備份,那這種需求也很適用于多源復制架構(gòu)。實現(xiàn)方法我大概描述下:業(yè)務 A、B、C、D 分別位于 4 臺 Server,每臺 Server 分別有一個數(shù)據(jù)庫來隔離前端的業(yè)務數(shù)據(jù),那這樣,在從庫就能把四臺業(yè)務的數(shù)據(jù)全部匯總起來,而不需要做額外的操作。那沒有多源復制之前,要實現(xiàn)這類需求,只能在匯總機器上搭建多個 MySQL 實例,那這樣勢必會涉及到跨庫關(guān)聯(lián)的問題,不但性能急劇下降,管理多個實例也沒有單臺來的容易。
2. 用來聚合前端多個 Server 的分片數(shù)據(jù)。
同樣,按照數(shù)據(jù)切分方向來講,屬于水平切分。比如圖 3,按照年份拆分好的數(shù)據(jù),要做一個匯總數(shù)據(jù)展現(xiàn),那這種架構(gòu)也非常合適。實現(xiàn)方法稍微復雜些:比如所有 Server 共享同一數(shù)據(jù)庫和表,一般為了開發(fā)極端透明,前端配置有分庫分表的中間件,比如愛可生的 DBLE。
3. 匯總并合并多個 Server 的數(shù)據(jù)
第三類和第一種場景類似。不一樣的是不僅僅是數(shù)據(jù)需要匯總到目標端,還得合并這些數(shù)據(jù),這就比第一種來的相對復雜些。比如圖 4,那這樣的需求,是不是也適合多源復制呢?答案是 YES。那具體怎么做呢?
1、復制表結(jié)構(gòu)(語法
creata
table
舊表
select
*
from
新表)
create
table
t1(
id
int
unsigned
auto_increment
primary
key,
name
varchar(32)
not
null
default
'',
pass
int
not
null
default
);
desc
查看表結(jié)構(gòu)
創(chuàng)建表
t2
同時復制表
t1
表結(jié)構(gòu)
create
table
t2
select
*
from
t1;
desc
t2
查看表結(jié)構(gòu)
注意:兩張的表字段結(jié)構(gòu)一樣,但是
主鍵
primary
key
和
自增
auto_increment
沒有了,所以這種方法不推薦大家使用,那如何才能創(chuàng)建出兩張完全一樣的表呢,辦法肯定有的,如下面語句。
create
table
t2
like
t1;
這就可以創(chuàng)建一張
t2
和
t1
完全一樣的表了。
2、指定字段復制表結(jié)構(gòu)
語法:
create
table
新表
select
字段1,字段2
…
from
舊表
3、復制表中數(shù)據(jù)
假設要把表
t1
中的數(shù)據(jù)全部復制到表
t2中
insert
into
t2
select
* from
t1;
如果只想復制某個字段
insert
into
t2(字段1,字段2)
select
字段1,字段2 from
t1;