MySQL MySQL備份與恢復

2022-02-08 07:28:02 字數 4989 閱讀 8073

1. 備份資料的意義

針對不同業務,7*24小時提供服務和資料的重要性不同。

資料庫資料是比較核心的資料,對企業的經營至關重要,資料庫備份顯得尤為重要。

2. 備份資料庫

mysql資料庫自帶的備份命令 `mysqldump`,基本使用方法:

語法:`mysqldump -u username -p password dbname > filename.sql`

執行備份命令

`mysqldump -uroot -pmysqladmin db_test > /opt/mysql_bak.sql`

檢視備份內容

`grep -v "#|\*|--|^$" /opt/mysql_bak.sql`

> 匯出的格式沒有加字符集,會出現亂碼,一般恢復到資料庫會正常。insert語句是批量插入的方式,這樣恢復的效率會更高。

指定對應的字符集備份,預設字符集為 `default-character-set=latinl`

`mysqldump -uroot -p'mysqladmin' --default-character-set=latinl db_test > /opt/mysql_bak.sql`

恢復資料

`mysql -uroot -p'mysqladmin' db_test < /opt/mysql_bak.sql`

引數`-b`的使用

`mysqldump -uroot -pmysqladmin -b db_test > /opt/mysql_bak_b.sql`

> 使用 -b 引數的作用是增加建立資料庫和連線資料的命令。即:

create database /*!32312 if not exists*/`db_test`

use `db_test`;

恢復的時候也不用指定庫名稱。

優化備份檔案大小減少輸出注釋

利用`mysqldump`的`--compact`引數優化備份結果

--compact引數說明:

優化輸出內容,輸出更簡潔,適合除錯。

--skip-add-drop-table

--no-set-names

--skip-disable-keys

--skip-add-locks

指定壓縮命令壓縮備份mysql資料

`mysqldump -uroot -p'mysqladmin' -b db_test|gzip > /opt/mysql_bak.sql.gz`

```1. 匯出資料用`-b`引數(帶建立資料庫語句)

2. 使用 `|gzip` 對資料進行壓縮

```3. mysqldump備份原理

mysqldump 實際上就是把資料以sql語句的形式直接輸出。(邏輯備份)

恢復的過程就是把sql檔案進行執行。

4. 備份多個庫

`mysqldump -uroot -p'mysqladmin' -b db_test db_test1 |gzip > /opt/all_bak.sql.gz`

-b(--database) 引數是關鍵,表示連線多個庫,並且增加 `create database db_name` 、 `use db_name`的資訊。

-b 後的引數將被作為資料庫名,該引數較常用。

當 -b 後的資料庫全部列出時,同 -a 引數。

5. 分庫備份

分庫備份實際上就是將每個庫執行一條命令單獨備份,使用對應的庫名作為備份檔案,以`.sql` 結尾。備份多個庫的命令如下:

1. 查詢所有的資料庫

`mysql -uroot -p'mysqladmin' -e "show databases;" |grep -evi "database|info|perfor"`

2. 在所有庫之前加上備份命令

`mysql -uroot -p'mysqladmin' -e "show databases;" |grep -evi "database|info|perfor" | sed 's#^#mysqldump -uroot -p'mysqladmin' -b #g'`

3. 將備份內容輸出到檔案

`mysql -uroot -p'mysqladmin' -e "show databases;" |grep -evi "database|info|perfor" | sed -r 's#^([a-z].*$)#mysqldump -uroot -p'mysqladmin' -b \1|gzip > /opt/\1.sql.gz#g'`

4. 執行上述輸出的命令 `|bash`

`mysql -uroot -p'mysqladmin' -e "show databases;" |grep -evi "database|info|perfor" | sed -r 's#^([a-z].*$)#mysqldump -uroot -p'mysqladmin' --events -b \1|gzip > /opt/\1.sql.gz#g'| bash`

6. 分庫備份2

```bash

for dbname in `mysql -uroot -p'mysqladmin' -e "show databases;" |grep -evi "database|info|perfor"`; do

mysqldump -uroot -p'mysqladmin' --events -b $dbname | gzip > /opt/bak/$_bak.sql.gz

done

```7. 多表備份

`mysqldump -uroot -p'mysqladmin' db_name tb_test1 tb_test2 `

> 備份多表不使用`-b` 引數,第乙個為資料庫名稱,之後的為表名稱

8. 分表備份

和分庫備份類似,每執行一條語句備份乙個表,生成不同的檔案。

> 分表備份缺點:檔案較多

- 完整備份

- 分庫備份

- 分表備份

- 批量恢復

9. 備份表結構

`mysqldump -uroot -p'mysqladmin' --compact -d db_test tb_test`

10. 備份表資料

`mysqldump -uroot -p'mysqladmin' --compact -t db_test tb_test`

11. 重新整理binlog引數

```mysqldump -uroot -p'mysqladmin' -a -b --events|gzip > /opt/a.sql.gz

mysqldump -uroot -p'mysqlamdin' -a -b -f --events|gzip > /opt/a.sql.gz

-f 切割binlog

12. 記錄binlog位置

`mysqldump -uroot -p'mysqladmin' --master-data=1 --compact db_test`

`--master-data=1`

`--master-data=2` 將change語句加上注釋

--master-data 作用:

--master-data=1: 從庫

`change master to master_log_file='mysql-bin.000020',master_log_pos=1191;`

**mysqldump 的關鍵引數說明**

`mysqldump --help`

-b 指定多個庫,增加建庫語句和 `use` 語句

--compact 去掉注釋,除錯使用

-a 所有庫

-f 重新整理binlog日誌

--master-data 增加binlog日誌檔名及對應的位置點

-x, --lock-all-tables 鎖表

-l, --lock-tables 唯讀鎖表

-d 只備份表結構

-t 只備份資料

--single-transaction 適合innodb事務資料庫備份

innodb 表在備份時,通常啟用選項 --single-transaction 來保證備份的一致性,實際上它的工作原理是設定本次會話的隔離級別為:repeatable read,以確保本次會話(dump)時,不會看到其它會話已經提交了的資料。

myisam備份命令:

mysqldump -uroot -p'mysqladmin' -a -b --master-data=2 -x --events|gzip > /opt/all.sql.gz

innodb備份命令(推薦):

mysqldump -uroot -p'mysqladmin' -a -b --master-data=2 --single-transaction --events|gzip > /opt/all.sql.gz

### 資料庫恢復

1. source 資料恢復

`systel ls `執行系統命令

`source *.sql` 檔案預設為登入mysql前的系統路徑

2. 標準恢復命令

```mysql

mysql -uroot -p'mysqladmin' -e "use db_test; drop tables; show tables;"

mysql -uroot -p'mysqladmin' db_test < /opt/mysql_bak.sql

mysql -uroot -p'mysqladmin' -e "use db_test;show tables;"

```提取目錄下的備份檔案名

```bash

ls| awk -f "." ''

sed 's#_bak.sql.gz##g'

```迴圈恢復

```bash

for dbname in `sed 's#_bak.sql.gz##g'`; do

gzip -d $_bak.sql.gz;

mysql -uroot -p'mysqladmin' $dbname < $_bak.sql;

done

```

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備份資料及資料的恢復

使用mysqldump命令 1 mysqldump u 使用者名稱 p密碼 databasename tablename 檔名.sql 將指定資料庫的資料匯出到指定檔案,如果加表名則只匯出指定表的資料。2 mysqldump u 使用者名稱 p密碼 d databasename tablename ...