MySQL備份與恢復

2021-08-31 12:46:29 字數 3943 閱讀 1173

##############

#### 備 份 ####

#############

使用mysqldump進行mysql備份

mysqldump 是採用sql級別的備份機制,它將資料表導成 sql 指令碼檔案,在不同的 mysql 版本之間公升級時相對比較合適,這也是最常用的備份方法。

基本語法:

shell> mysqldump [options] database [tables] > data_backup.sql (不指定資料庫名表示全部備份)

例如:mysqldump -uroot -p --default-character-set=cp932 --opt --extended-insert=false --hex-blob -r -x mysql > e:\mysql.sql

主要引數:

--compatible=name

它告訴 mysqldump,匯出的資料將和哪種資料庫或哪個舊版本的 mysql 伺服器相相容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個值,用逗號將它們隔開。當然了,它並不保證能完全相容,而是盡量相容。

--complete-insert,-c

匯出的資料採用包含欄位名的完整 insert 方式,也就是把所有的值都寫在一行。這麼做能提高插入效率,但是可能會受到 max_allowed_packet 引數的影響而導致插入失敗。因此,需要謹慎使用該引數,至少我不推薦。

--extended-insert = true|false

預設情況下,mysqldump 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設定它的值為 false 即可。

--default-character-set=charset

指定匯出資料時採用何種字符集,如果資料表不是採用預設的 latin1 字符集的話,那麼匯出時必須指定該選項,否則再次匯入資料後將產生亂碼問題。

--disable-keys

告訴 mysqldump 在 insert 語句的開頭和結尾增加 /*!40000 alter table table disable keys */; 和 /*!40000 alter table table enable keys */; 語句,這能大大提高插入語句的速度,因為它是在插入完所有資料後才重建索引的。該選項只適合 myisam 表。

--hex-blob

使用十六進製制格式匯出二進位制字串字段。如果有二進位制資料就必須使用本選項。影響到的字段型別有 binary、varbinary、blob。

--lock-all-tables,-x

在開始匯出之前,提交請求鎖定所有資料庫中的所有表,以保證資料的一致性。這是乙個全域性讀鎖,並且自動關閉 --single-transaction 和 --lock-tables 選項。

--lock-tables

它和 --lock-all-tables 類似,不過是鎖定當前匯出的資料表,而不是一下子鎖定全部庫下的表。本選項只適用於 myisam 表,如果是 innodb 表可以用 --single-transaction 選項。

--no-create-info,-t

只匯出資料,而不新增 create table 語句。

--no-data,-d

不匯出任何資料,只匯出資料庫表結構。

--opt

這只是乙個快捷選項,等同於同時新增 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqldump 很快的匯出資料,並且匯出的資料能很快導回。該選項預設開啟,但可以用 --skip-opt 禁用。注意,如果執行 mysqldump 沒有指定 --quick 或 --opt 選項,則會將整個結果集放在記憶體中。如果匯出大資料庫的話可能會出現問題。

--quick,-q

該選項在匯出大表時很有用,它強制 mysqldump 從伺服器查詢取得記錄直接輸出而不是取得所有記錄後將它們快取到記憶體中。

--routines,-r

匯出儲存過程以及自定義函式。

--single-transaction

該選項在匯出資料之前提交乙個 begin sql語句,begin 不會阻塞任何應用程式且能保證匯出時資料庫的一致性狀態。它只適用於事務表,例如 innodb 和 bdb。

本選項和 --lock-tables 選項是互斥的,因為 lock tables 會使任何掛起的事務隱含提交。

要想匯出大表的話,應結合使用 --quick 選項。

--triggers

同時匯出觸發器。該選項預設啟用,用 --skip-triggers 禁用它。

練習:1.將整個資料庫備份成all.sql檔案

#/usr/local/mysql/bin/mysqldump -uroot --default-character-set=cp932 --opt --extended-insert=false --hex-blob -x --all-databases > all.sql

2.將整個資料庫的表結構備份成table.sql,不要資料和trigger

#/usr/local/mysql/bin/mysqldump -uroot --default-character-set=cp932 --opt --extended-insert=false --hex-blob -x --all-database --no-data --skip-triggers database > table.sql

3.將所有資料備份成data.sql,注意不要表結構和trigger

#/usr/local/mysql/bin/mysqldump -uroot --default-character-set=cp932 --opt --extended-insert=false --hex-blob -x --all-database --no-create-info --skip-triggers database > data.sql

4.只將trigger備份成trigger.sql,資料和表結構都不要。

#/usr/local/mysql/bin/mysqldump -uroot --default-character-set=cp932 --opt --extended-insert=false --hex-blob -x triggers >trigger.sql

---------

1.匯出整個資料庫

mysqldump -u 使用者名稱 -p 資料庫名 > 匯出的檔名

2.匯出乙個表

mysqldump -u 使用者名稱 -p 資料庫名 表名》 匯出的檔名

3.匯出乙個資料庫結構

說明:-d 沒有資料 --add-drop-table 在每個create語句之前增加乙個drop table

##############

#### 恢 復 ####

#############

使用mysqldump匯出的檔案恢復資料庫

用 mysqldump 備份出來的檔案是乙個可以直接倒入的 sql 指令碼,有兩種方法可以將資料匯入。

1)直接用 mysql 客戶端

shell> mysql 庫名 < 檔名

例如:#/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql

2)用 source 語句

其實這不是標準的 sql 語法,而是 mysql 客戶端提供的功能,例如:

# source /tmp/db_name.sql; (這裡需要指定檔案的絕對路徑,並且必須是 mysqld 執行使用者有許可權讀取的檔案)

restore table tb1 from 『/aaa』

mysql 備份與恢復 MySQL 備份與恢復

1 檢視資料庫的資料儲存在哪個目錄下 shiyanlou mysql uroot e show variables like datadir variable name value datadir var lib mysql 2 備份資料的方法 select into outfile 檔名 或者 s...

mysql 備份與恢復 Mysql 備份與恢復

資料檔案一致性處理 在完全備份的情況下,檔案不是時間點一致的,因為進行快照的時間點不一樣。如果嘗 試在未prepare資料的情況下還原資料庫,雖然操作上支援恢復,但是在啟動的時候仍會 進行資料recovery。執行帶 prepare 選項的 mariabackup 命令會使資料檔案進行統一,達到資料...

mysql備份恢復 mysql之備份與恢復

工作中,我們經常會遇到資料庫的備份與恢復場景 目錄1 mysql的備份與恢復 2 mysql的匯入與匯出 1 mysql的備份與恢復 mysql的備份命令是mysqldump,mysql之備份 mysqldump u user h host port p db table.file u 後面接資料庫...