MySQL的資料備份與恢復

2021-10-06 03:53:26 字數 3592 閱讀 2325

mysql資料備份分為邏輯備份和物理備份,邏輯備份的優點是對於各種儲存引擎都可以使用同樣的方法來備份,而物理備份對於不同的儲存引擎有不同的備份方法,但備份和恢復的速度更快。物理備份分為熱備和冷備,熱備是在mysql服務執行時進行的,而冷備需停止mysql服務。

使用select into outfile匯出資料:

mysql> select * from table_name into outfile "/tmp/filename";
mysql> show variables like "%secure%";

+--------------------------+-------+

| variable_name | value |

+--------------------------+-------+

| require_secure_transport | off |

| secure_file_priv | null |

+--------------------------+-------+

2 rows in set (0.01 sec)

當secure_file_priv為null時,表示禁止匯出。可修改my.cnf檔案,增加secure_file_priv選項,以支援匯出。只能匯出到指定的目錄下(如下面的/tmp目錄)。修改之後重啟mysqld即可。

1 # default homebrew mysql server config

2 [mysqld]

3 # only allow connections from localhost

4 bind-address = 127.0.0.1

5 # skip-grant-tables

6 secure_file_priv="/tmp"

使用load data into table恢復資料:

mysql> load data infile "/tmp/filename" into table table_name;
1.備份單個資料庫或單個庫中部分資料表

$ mysqldump [options] db_name [table_names] > filename.txt
2.備份多個資料庫

$ mysqldump [options] --databases db_name1 [db_name2 ...] > filename.txt
3.備份所有資料庫

$ mysqldump [options] --all-databases > filename.txt
其中,options引數列表如下:

引數名含義

-u登入mysql的使用者名稱

-p登入mysql的密碼

-hmysql服務ip位址

-pmysql服務埠號

--add-drop-database

資料庫建立語句前增加drop database語句,表示若資料庫存在先進行刪除

--add-drop-table

資料表建立語句前增加drop table語句,表示若資料表存在先進行刪除

-n--no-create-db

不包含資料庫建立語句

-t--no-create-info

不包含資料表建立語句

-d--no-data

不包含資料

--compact

不包含預設選項中的各種注釋

-c--complete-insert

輸出檔案的insert語句中包含欄位名,預設是不包含的

-t將sql語句和資料分開,分別生成sql檔案和txt檔案

--default-character-set

設定預設字符集

-f-flush-logs

備份前重新整理日誌:關閉舊日誌,生成新日誌,這在恢復的時候非常有用,只需將新的binlog重做即可

-l--lock-tables

給所有表加讀鎖,使得備份期間資料庫無法被更新,保證資料的一致性

mysqldump的恢復很簡單,只需將備份檔案作為輸入執行即可。

$ mysql -uroot -p db_name < filename.txt
但是,恢復後的資料並不完整,因為備份後可能會有新的資料寫入。還需將備份後新生成的binlog進行重做。

$ mysqlbinlog binlog-file | mysql -uroot -p db_name
這裡有乙個關鍵點,將備份檔案恢復的時候,會寫入binlog。如果binlog是以追加的方式寫入,即追加到了備份後新生成的binlog檔案中,這將導致重做此binlog的操作無效,因為備份檔案恢復的內容覆蓋了備份後新生成的binlog的內容。

在備份恢復之前,可執行flush logs以生成新的binlog檔案,這樣就可以把之前的binlog檔案進行重做,而不受備份恢復時生成的binlog的影響。

以下是乙個完整的mysqldump備份與恢復的例子。

1.備份資料庫

$ mysqldump -uroot -p -l -f db_name > db_name.tmp
-f引數會生成新的binlog檔案,這裡為binlog.000006。

2.備份後插入新資料

mysql> insert into table_name values (100, "chenyubo");
此操作的binlog會寫入binlog.000006檔案。

3.遇到故障,要恢復備份的資料,先重新整理日誌,生成新的binlog檔案

mysql> flush logs;
新生成的binlog檔名為binlog.000007,恢復時生成的binlog會寫入此檔案。

4.進行恢復

$ mysql -uroot -p db_name < db_name.tmp
5.重做備份和恢復之間生成的binlog

$ mysqlbinlog binlog.000006 | mysql -uroot -p db_name
這樣就完整地恢復了備份檔案中的資料和備份之後新寫入的資料。

停掉資料庫服務,在作業系統級別備份與恢復,一般使用cp資料檔案的方法。此方法很少用,因為很多應用不允許資料庫服務長時間停服。

1.使用mysqlhotcopy工具備份

$> mysqlhotcopy db_name /path/to/bak_directory
2.手工鎖表copy

先將資料庫中所有的表加讀鎖:

mysql> flush tables for read;
然後將資料檔案copy到備份目錄即可。

1.使用ibbackup工具備份。

2.使用xtrabackup工具備份。

xtrabackup包含xtrabackup和innobackupex兩種工具。

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命令列匯出資料庫 mysql命令列匯出資料庫 1,進入mysql目錄下的bin資料夾 cd mysql中到bin資料夾的目錄 如我輸入的命令列 cd c program files mysql mysql server 4.1 bin 或者直接將windows的環境變數path中新增該目錄...