mysql的邏輯備份

dotaddjj發表於2012-07-24

Mysql物理備份可以利用mysqldump工具來備份相應的資料庫的文字資料,其命令相對也很簡單。

C:Userspc>mysqldump -help

Usage: mysqldump [OPTIONS] database [tables]

OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

OR mysqldump [OPTIONS] --all-databases [OPTIONS]

For more options, use mysqldump --help

例如備份xiaoyutab02

C:Userspc>mysqldump -u root -p xiaoyu tab02 >f:tab02.txt

Enter password: ******

備份xiaoyutab02tab01的表

C:Userspc>mysqldump -u root -p xiaoyu tab02 tab01 >f:tab02.txt

Enter password: ******

備份xiaoyu這個database

C:Userspc>mysqldump -u root -p xiaoyu >f:tab02.txt

Enter password: ******

備份相應的條件的資料文字記錄

C:Userspc>mysqldump -u root -p xiaoyu t_qury01 --where='id=3' > f:test01.txt

Enter password: ******

Mysqldump還可以使用—no-data不匯出建表語句,只匯出文字檔案資料;--no-create-info不匯出rows,只匯出建表的ddl語句, .

-master-data或者--master-data=2mysqldump會將當前mysql使用的binlog日誌的名稱和位置記錄到dump檔案中,並且是以change_master語句的形式,--master-data=1將會把change-master以註釋的形式存在,這些資訊可以在實施slave線上搭建時有用。即使不搭建slave也可以在某些情況下利用binlog做進一步恢復。

當然這些dump檔案都是ddldml的文字檔案,可以擴平臺遷移,同樣mysql也提供了純文字的檔案備份,簡而言之就是資料來源。

C:Userspc>mysqldump -u root -p -T f:app xiaoyu tab02 --fields_terminated_by=,

--fields_enclosed_by="

Enter password: ******

這樣就會在f:app目錄下生成一個tab02.sqlddl檔案和tab02.txt存檔案檔案,tab02.txt也就是資料來源。

也可以先進入到mysql資料庫中,用如下形式匯出文字檔案的資料來源,不過疑惑的是該命令在linux環境下正常執行,在windows環境下居然抱許可權不足,無法寫入。

mysql> select * into outfile '/tmp/test01.txt'

-> fields terminated by ',' enclosed by '"'

-> from userinfo limit 10;

那麼相對的邏輯備份的恢復就很簡單了,ddldml的文字檔案可以用如下方式:

Source pathmyql –u root –p < /tmp/test01.txt恢復即可。

這裡順便提一下對於mysql的邏輯備份和恢復的理解,由於邏輯備份時是一個一個表的備份,就有可能造成資料的不一致,有些應用可能影響不大但是對於關係比較嚴格的系統就不能忽略了,可以在備份開始時採取lock table(針對所有儲存引擎)或者—single_transaction的形式來備份,前者lock table write只提供讀取功能,後者是利用innodb等儲存引擎的事務一致性來實現的。

資料來源方式的邏輯恢復也相對簡單,這裡個人一般使用如下方式:

[root@Analyser ~]# mysqlimport -u root -p cobra --fields_terminated_by=, --fields_optionally_enclosed_by=" /tmp/userinfo.txt

注意再測試mysqlimport過程中,如果該表有索引資訊,那麼用mysqimport 資料來源很可能會出現

mysqlimport: Error: 1062, Duplicate entry '0' for key 'SYS_C009326', when using table: userinfo

此時是因為索引造成,採取的truncate表後然後倒入資料來源正常。

雖然資料來源檔案佔用空間小,但是還是推薦使用mysqldump的形式來進行邏輯備份,簡單而且命令相對來說比較容易記憶。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1058999/,如需轉載,請註明出處,否則將追究法律責任。

相關文章