mysql備份恢復

1.備份的兩個概念

備份方式 mysql

邏輯備份 sql

裸備份 數據庫

 

概念 windows

邏輯備份(也叫導出),它裏面的數據時Mysql能識別的,多是sql,或者是帶分界符的文本 緩存

裸設備是指本來存儲在DISK上的那些data文件。 服務器

 

特色 網絡

是普通文件能夠用編輯器打開,檢查。 oracle

容易恢復,直接導入便可 app

能夠跨網絡備份 socket

兼容性強,能夠控制備份的內容,如where控制,甚至能夠跨數據庫恢復

能夠避免數據損壞。

 

 

方便快速,不須要作太多額外操做

忽略engine

能夠跨OS平臺

 

 

缺點

須要服務器生成,會使用更多的CPU週期。

邏輯備份文件每每比數據庫文件大。

邏輯備份時,數據恢復須要Mysql加載和解釋這些聲明,重建索引,增大開銷

INNODB裸設備佔用空間比邏輯備份大。

對Mysql版本可能有影響

 

 


2.備份的注意事項和備份那些東西。

備份那些東西

如二進制日誌,Innodb事務日誌,代碼如觸發器,存儲過程

 

注意事項

數據的一致性

文件的一致性

備份恢復所用的時間和系統資源的開銷。

 

 

3.備份操做

使用mysqldump工具

兩個數據庫之間的複製

$ mysqldump –host=server1 test t1 | mysql –host=server2 test

 備份整個服務器

$ mysql –all-databases > /root/mysql.sql

 只備份sakile數據庫

$ mysqldump –databases sakile > /root/mysql.sql

 只備份 sakile.bbs

$ mysqldump sakile bbs > /root/mysql.sql

 

 Mysqldump參數介紹

 

--all-databases  , -A

導出所有數據庫。

mysqldump  -uroot -p --all-databases

--all-tablespaces  , -Y

導出所有表空間。

mysqldump  -uroot -p --all-databases --all-tablespaces

--no-tablespaces  , -y

不導出任何表空間信息。

mysqldump  -uroot -p --all-databases --no-tablespaces

--add-drop-database

每一個數據庫建立以前添加drop數據庫語句。

mysqldump  -uroot -p --all-databases --add-drop-database

--add-drop-table

每一個數據表建立以前添加drop數據表語句。(默認爲打開狀態,使用--skip-add-drop-table取消選項)

mysqldump  -uroot -p --all-databases  (默認添加drop語句)

mysqldump  -uroot -p --all-databases –skip-add-drop-table  (取消drop語句)

--add-locks

在每一個表導出以前增長LOCK TABLES而且以後UNLOCK  TABLE。(默認爲打開狀態,使用--skip-add-locks取消選項)

mysqldump  -uroot -p --all-databases  (默認添加LOCK語句)

mysqldump  -uroot -p --all-databases –skip-add-locks   (取消LOCK語句)

--allow-keywords

容許建立是關鍵詞的列名字。這由表名前綴於每一個列名作到。

mysqldump  -uroot -p --all-databases --allow-keywords

--apply-slave-statements

在'CHANGE MASTER'前添加'STOP SLAVE',而且在導出的最後添加'START SLAVE'。

mysqldump  -uroot -p --all-databases --apply-slave-statements

--character-sets-dir

字符集文件的目錄

mysqldump  -uroot -p --all-databases  --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments

附加註釋信息。默認爲打開,能夠用--skip-comments取消

mysqldump  -uroot -p --all-databases  (默認記錄註釋)

mysqldump  -uroot -p --all-databases --skip-comments   (取消註釋)

--compatible

導出的數據將和其它數據庫或舊版本的MySQL 相兼容。值能夠爲ansi、mysql32三、mysql40、postgresql、oracle、mssql、db二、maxdb、no_key_options、no_tables_options、no_field_options等,

要使用幾個值,用逗號將它們隔開。它並不保證能徹底兼容,而是儘可能兼容。

mysqldump  -uroot -p --all-databases --compatible=ansi

--compact

導出更少的輸出信息(用於調試)。去掉註釋和頭尾等結構。可使用選項:--skip-add-drop-table  --skip-add-locks --skip-comments --skip-disable-keys

mysqldump  -uroot -p --all-databases --compact

--complete-insert,  -c

使用完整的insert語句(包含列名稱)。這麼作能提升插入效率,可是可能會受到max_allowed_packet參數的影響而致使插入失敗。

mysqldump  -uroot -p --all-databases --complete-insert

--compress, -C

在客戶端和服務器之間啓用壓縮傳遞全部信息

mysqldump  -uroot -p --all-databases --compress

--create-options,  -a

在CREATE TABLE語句中包括全部MySQL特性選項。(默認爲打開狀態)

mysqldump  -uroot -p --all-databases

--databases,  -B

導出幾個數據庫。參數後面全部名字參量都被看做數據庫名。

mysqldump  -uroot -p --databases test mysql

--debug

輸出debug信息,用於調試。默認值爲:d:t:o,/tmp/mysqldump.trace

mysqldump  -uroot -p --all-databases --debug

mysqldump  -uroot -p --all-databases --debug=」 d:t:o,/tmp/debug.trace」

--debug-check

檢查內存和打開文件使用說明並退出。

mysqldump  -uroot -p --all-databases --debug-check

--debug-info

輸出調試信息並退出

mysqldump  -uroot -p --all-databases --debug-info

--default-character-set

設置默認字符集,默認值爲utf8

mysqldump  -uroot -p --all-databases --default-character-set=latin1

--delayed-insert

採用延時插入方式(INSERT DELAYED)導出數據

mysqldump  -uroot -p --all-databases --delayed-insert

--delete-master-logs

master備份後刪除日誌. 這個參數將自動激活--master-data。

mysqldump  -uroot -p --all-databases --delete-master-logs

--disable-keys

對於每一個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣能夠更快地導入dump出來的文件,由於它是在插入全部行後建立索引的。該選項只適合MyISAM表,默認爲打開狀態。

mysqldump  -uroot -p --all-databases 

--dump-slave

該選項將致使主的binlog位置和文件名追加到導出數據的文件中。設置爲1時,將會以CHANGE MASTER命令輸出到數據文件;設置爲2時,在命令前增長說明信息。該選項將會打開--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。默認值爲0。

mysqldump  -uroot -p --all-databases --dump-slave=1

mysqldump  -uroot -p --all-databases --dump-slave=2

--events, -E

導出事件。

mysqldump  -uroot -p --all-databases --events

--extended-insert,  -e

使用具備多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項。

mysqldump  -uroot -p --all-databases

mysqldump  -uroot -p --all-databases--skip-extended-insert   (取消選項)

--fields-terminated-by

導出文件中忽略給定字段。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項

mysqldump  -uroot -p test test --tab=」/home/mysql」 --fields-terminated-by=」#」

--fields-enclosed-by

輸出文件中的各個字段用給定字符包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項

mysqldump  -uroot -p test test --tab=」/home/mysql」 --fields-enclosed-by=」#」

--fields-optionally-enclosed-by

輸出文件中的各個字段用給定字符選擇性包裹。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項

mysqldump  -uroot -p test test --tab=」/home/mysql」  --fields-enclosed-by=」#」 --fields-optionally-enclosed-by  =」#」

--fields-escaped-by

輸出文件中的各個字段忽略給定字符。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項

mysqldump  -uroot -p mysql user --tab=」/home/mysql」 --fields-escaped-by=」#」

--flush-logs

開始導出以前刷新日誌。

請注意:假如一次導出多個數據庫(使用選項--databases或者--all-databases),將會逐個數據庫刷新日誌。除使用--lock-all-tables或者--master-data外。在這種狀況下,日誌將會被刷新一次,相應的因此表同時被鎖定。所以,若是打算同時導出和刷新日誌應該使用--lock-all-tables 或者--master-data 和--flush-logs。

mysqldump  -uroot -p --all-databases --flush-logs

--flush-privileges

在導出mysql數據庫以後,發出一條FLUSH  PRIVILEGES 語句。爲了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql數據庫數據的任什麼時候候。

mysqldump  -uroot -p --all-databases --flush-privileges

--force

在導出過程當中忽略出現的SQL錯誤。

mysqldump  -uroot -p --all-databases --force

--help

顯示幫助信息並退出。

mysqldump  --help

--hex-blob

使用十六進制格式導出二進制字符串字段。若是有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。

mysqldump  -uroot -p --all-databases --hex-blob

--host, -h

須要導出的主機信息

mysqldump  -uroot -p --host=localhost --all-databases

--ignore-table

不導出指定表。指定忽略多個表時,須要重複屢次,每次一個表。每一個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

mysqldump  -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port

在--dump-slave產生的'CHANGE  MASTER TO..'語句中增長'MASTER_HOST=<host>,MASTER_PORT=<port>'  

mysqldump  -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore

在插入行時使用INSERT IGNORE語句.

mysqldump  -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by

輸出文件的每行用給定字符串劃分。與--tab選項一塊兒使用,不能用於--databases和--all-databases選項。

mysqldump  -uroot -p --host=localhost test test --tab=」/tmp/mysql」  --lines-terminated-by=」##」

--lock-all-tables,  -x

提交請求鎖定全部數據庫中的全部表,以保證數據的一致性。這是一個全局讀鎖,而且自動關閉--single-transaction 和--lock-tables 選項。

mysqldump  -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables,  -l

開始導出前,鎖定全部表。用READ  LOCAL鎖定表以容許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,由於它根本不須要鎖定表。

請注意當導出多個數據庫時,--lock-tables分別爲每一個數據庫鎖定表。所以,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不一樣數據庫表的導出狀態能夠徹底不一樣。

mysqldump  -uroot -p --host=localhost --all-databases --lock-tables

--log-error

附加警告和錯誤信息到給定文件

mysqldump  -uroot -p --host=localhost --all-databases  --log-error=/tmp/mysqldump_error_log.err

--master-data

該選項將binlog的位置和文件名追加到輸出文件中。若是爲1,將會輸出CHANGE MASTER 命令;若是爲2,輸出的CHANGE  MASTER命令前添加註釋信息。該選項將打開--lock-all-tables 選項,除非--single-transaction也被指定(在這種狀況下,全局讀鎖在開始導出時得到很短的時間;其餘內容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項。

mysqldump  -uroot -p --host=localhost --all-databases --master-data=1;

mysqldump  -uroot -p --host=localhost --all-databases --master-data=2;

--max_allowed_packet

服務器發送和接受的最大包長度。

mysqldump  -uroot -p --host=localhost --all-databases --max_allowed_packet=10240

--net_buffer_length

TCP/IP和socket鏈接的緩存大小。

mysqldump  -uroot -p --host=localhost --all-databases --net_buffer_length=1024

--no-autocommit

使用autocommit/commit 語句包裹表。

mysqldump  -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db,  -n

只導出數據,而不添加CREATE DATABASE 語句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info,  -t

只導出數據,而不添加CREATE TABLE 語句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d

不導出任何數據,只導出數據庫表結構。

mysqldump  -uroot -p --host=localhost --all-databases --no-data

--no-set-names,  -N

等同於--skip-set-charset

mysqldump  -uroot -p --host=localhost --all-databases --no-set-names

--opt

等同於--add-drop-table,  --add-locks, --create-options, --quick, --extended-insert, --lock-tables,  --set-charset, --disable-keys 該選項默認開啓,  能夠用--skip-opt禁用.

mysqldump  -uroot -p --host=localhost --all-databases --opt

--order-by-primary

若是存在主鍵,或者第一個惟一鍵,對每一個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工做花費很長時間。 

mysqldump  -uroot -p --host=localhost --all-databases --order-by-primary

--password, -p

鏈接數據庫密碼

--pipe(windows系統可用)

使用命名管道鏈接mysql

mysqldump  -uroot -p --host=localhost --all-databases --pipe

--port, -P

鏈接數據庫端口號

--protocol

使用的鏈接協議,包括:tcp, socket, pipe, memory.

mysqldump  -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q

不緩衝查詢,直接導出到標準輸出。默認爲打開狀態,使用--skip-quick取消該選項。

mysqldump  -uroot -p --host=localhost --all-databases 

mysqldump  -uroot -p --host=localhost --all-databases --skip-quick

--quote-names,-Q

使用(`)引發表和列名。默認爲打開狀態,使用--skip-quote-names取消該選項。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-quote-names

--replace

使用REPLACE INTO 取代INSERT INTO.

mysqldump  -uroot -p --host=localhost --all-databases --replace

--result-file,  -r

直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。

mysqldump  -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt

--routines, -R

導出存儲過程以及自定義函數。

mysqldump  -uroot -p --host=localhost --all-databases --routines

--set-charset

添加'SET NAMES  default_character_set'到輸出文件。默認爲打開狀態,使用--skip-set-charset關閉選項。

mysqldump  -uroot -p --host=localhost --all-databases 

mysqldump  -uroot -p --host=localhost --all-databases --skip-set-charset

--single-transaction

該選項在導出數據以前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,由於LOCK  TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。

mysqldump  -uroot -p --host=localhost --all-databases --single-transaction

--dump-date

將導出時間添加到輸出文件中。默認爲打開狀態,使用--skip-dump-date關閉選項。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-dump-date

--skip-opt

禁用–opt選項.

mysqldump  -uroot -p --host=localhost --all-databases --skip-opt

--socket,-S

指定鏈接mysql的socket文件位置,默認路徑/tmp/mysql.sock

mysqldump  -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab,-T

爲每一個表在給定路徑建立tab分割的文本文件。注意:僅僅用於mysqldump和mysqld服務器運行在相同機器上。

mysqldump  -uroot -p --host=localhost test test --tab="/home/mysql"

--tables

覆蓋--databases (-B)參數,指定須要導出的表名。

mysqldump  -uroot -p --host=localhost --databases test --tables test

--triggers

導出觸發器。該選項默認啓用,用--skip-triggers禁用它。

mysqldump  -uroot -p --host=localhost --all-databases --triggers

--tz-utc

在導出頂部設置時區TIME_ZONE='+00:00' ,以保證在不一樣時區導出的TIMESTAMP 數據或者數據被移動其餘時區時的正確性。

mysqldump  -uroot -p --host=localhost --all-databases --tz-utc

--user, -u

指定鏈接的用戶名。

--verbose, --v

輸出多種平臺信息。

--version, -V

輸出mysqldump版本信息並退出

--where, -w

只轉儲給定的WHERE條件選擇的記錄。請注意若是條件包含命令解釋符專用空格或字符,必定要將條件引用起來。

mysqldump  -uroot -p --host=localhost --all-databases --where=」 user=’root’」

--xml, -X

導出XML格式.

mysqldump  -uroot -p --host=localhost --all-databases --xml

--plugin_dir

客戶端插件的目錄,用於兼容不一樣的插件版本。

mysqldump  -uroot -p --host=localhost --all-databases --plugin_dir=」/usr/local/lib/plugin」

--default_auth

客戶端插件默認使用權限。

mysqldump  -uroot -p --host=localhost --all-databases --default-auth=」/usr/local/lib/plugin/<PLUGIN>」

--tab

使用select into outfile 導出數據

--lock-all-tables

使用flush tables wirite read lock 獲取一個全局一致的備份

 

 

使用界定符文件備份(恢復速度快)

使用「,」分割導出Syslog.SystemEvents數據

Mysql>SELECT * FROM Syslog.SystemEvents INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',';

導回去

Mysq> LOAD DATA INFILE 'data.txt' INTO TABLE Syslog.SystemEvents FIELDS TERMINATED BY ',';

 

 

裸設備備份

MYISAM表裸備份工具

mysqlhotcopy -h 127.0.0.1 -P 3306 -u root –p123456 app /root                       備份app數據庫到/root目錄下

相關文章
相關標籤/搜索