常見的複製方法有三種: 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型別,於是進行轉換,問題解決。具體轉換如...