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 ...