MySQL 40 表的複製

2021-10-13 22:59:20 字數 1633 閱讀 4148

常見的複製方法有三種: mysqldump 方法,csv 檔案 , 物理拷貝方法 。

40.1 mysqldump

使用mysqldump命令將資料匯出成一組insert語句,也就是sql檔案。

命令如下:

mysqldump -h$host -p$port -u$user

--add-locks=0 --no-create-info --single-transaction --set-gtid-purged=off db1 t --where="a>900" --result-file=/client_tmp/t.sql

–single-transaction :表示匯出資料時使用可重複讀的隔離級別。

–add-locks 值為 0時,表示在輸出的檔案結果裡,不增加" lock tables t write;" 。

–no-create-info 表示不需要匯出表結構;

–set-gtid-purged=off 表示不匯出跟 gtid 相關的資訊;

–result-file 指定了輸出檔案的路徑 ;

sql檔案的使用:

mysql -h127.

0.0.1

-p13000 -uroot db2(庫)

-e "source /client_tmp/t.sql"

如果使用了視覺化工具,直接拖拽即可。

40.2 匯出csv檔案

執行如下語句,可以將查詢到的結果輸入指定csv檔案中。

select

*from db1.t where a>

900into

outfile

'/server_tmp/t.csv'

;

匯出csv檔案,使用load data語句匯入執行資料

load

data

infile

'/server_tmp/t.csv'

into

table db2.t;

40.3 物理拷貝方法

mysql 5.6 引入可傳輸表空間的方法,通過匯出和匯入表空間的方式,來實現物理拷貝表的功能。

假設我們現在的目標是在 db1 庫下,複製乙個跟表 t 相同的表 r,具體的執行步驟如下:

執行 create table r like t,建立乙個相同表結構的空表;

執行 alter table r discard tablespace,這時候 r.ibd 檔案會被刪除;

執行 flush table t for export,這時候 db1 目錄下會生成乙個 t.cfg 檔案;

在 db1 目錄下執行 cp t.cfg r.cfg; cp t.ibd r.ibd;這兩個命令(這裡需要注意的是,拷貝得到的兩個檔案,mysql 程序要有讀寫許可權);

執行 unlock tables,這時候 t.cfg 檔案會被刪除;

執行 alter table r import tablespace,將這個 r.ibd 檔案作為表 r 的新的表空間,由於這個檔案的資料內容和 t.ibd 是相同的,所以表 r 中就有了和表 t 相同的資料。

三種方法的優缺點:

mysql 4 0火速轉換到mysql 4 1

偶的是win2000下的,mysql4的資料庫,為了公升級,一直擔心到4。1會有問題,結果用phpmyadmin 2。7去匯出再匯入放到 mysql 4。1裡,果然中文亂碼,於是,只好把mysql 4.1的my。ini的編碼改為gb2312,並把原來mysql 4.0的data目錄下的 資料庫所有檔...

關於mysql 4 0到5 0的資料遷移

本來想用個資料前端工具,用了好多都是出現亂碼,不得已還得用命令 我們資料庫是utf8編碼格式 關於mysql資料庫之間的資料遷移的說明 一 d匯出資料 首先開啟資料庫服務 dos命令下進入 d mysql bin mysqldump h 10.10.129.155 uroot p quick com...

c 在連線mysql(4 0) 亂碼問題

在用c 連線mysql 4.0的資料庫時候,發現返回的值字母和漢字都正常,只有一列返回異常,檢視資料庫發現此欄位定義的型別為 type varchar length 6 attributes binary not null 在實際呼叫過程中發現返回的是byte型別,於是進行轉換,問題解決。具體轉換如...