MySQL備份工具之mysqldump

前言:html

一直使用mysqldump進行數據備份,可是對這個工具一直感受很陌生。今天我就具體的撕一撕關於備份那些事mysql

 

 

1、咱們爲何要備份? sql

 

作災難恢復:好比操做系統故障、電源故障、硬件有問題、一個不經意的bug致使數據損壞等意想不到的災難數據庫

需求改變:刪除數據後想恢復或者要把數據還原到之前服務器

測試須要 :測試須要,可能會按期將線上環境同步到測試環境微信

 

備份的目的就是爲了恢復。同時沒有備份的後果也是很嚴重的:數據會丟失、業務停掉、用戶丟失、甚至項目不存在、you get out編輯器

 

 

2、備份須要考慮的因素有哪些ide

 

在線備份仍是離線備份函數

在線備份要考慮:鎖的時間、備份時間、備份時業務和負載工具

 

是邏輯備份仍是物理備份

邏輯備份要考慮:備份時系統開銷。備份先後數據一致性(浮點數有可能恢復後數據不同)。邏輯備份須要加載和解釋語句,轉化爲存儲過程,建索引,因此會很慢。

物理備份要考慮:innodb的原始文件一般比邏輯備份要大的多。物理備份不老是能夠跨平臺、操做系統、版本。大小寫敏感、浮點格式可能會遇到麻煩

 

備份什麼

非顯著數據:二進制日誌和innodb事務日誌

代碼:如觸發器和存儲過程

服務器配置:最好備份中帶有服務器配置或者有單獨的服務器配置信息

 

 

3、備份的類型有那幾種?

 

1、根據在線仍是離線

冷備(cold backup):須要關mysql服務,讀寫請求均不容許狀態下進行;
溫備(warm backup): 服務在線,但僅支持讀請求,不容許寫請求;
熱備(hot backup):備份的同時,業務不受影響。

PS:

這種類型的備份取決於業務需求,而不是備份工具

MyISAM不支持熱備,innoDB支持熱備,可是須要特殊的工具

 

2、根據備份的範圍

徹底備份:full backup,備份所有字符集。
增量備份: incremental backup 上次徹底備份或增量備份以來改變了的數據,不能單獨使用,要藉助徹底備份,備份的頻率取決於數據的更新頻率。
差別備份:differential backup 上次徹底備份以來改變了的數據。
建議的恢復策略:
徹底+增量+二進制日誌
徹底+差別+二進制日誌

 

3、根據備份數據或文件

物理備份:直接備份數據文件

優勢:

備份和恢復操做都比較簡單,可以跨mysql的版本、平臺和操做系統
恢復速度快,不須要執行任何SQL和構建索引

缺點:

innodb的原始文件一般比邏輯備份要大的多。物理備份不老是能夠跨平臺、操做系統、版本。大小寫敏感、浮點格式可能會遇到麻煩
mysql>check tables;檢測表是否可用


邏輯備份: 備份表中的數據和代碼

優勢:

l  查看和恢復都很簡單,可使用編輯器或者sed、grep等命令操做

l  能夠遠程備份和恢復,能夠在雲平臺上恢復

l  備份很是靈活,可選參數不少,好比用where限制備份

l  與存儲引擎無關,能夠在innoDB引擎備份,在MyISAM引擎恢復,工做量少

l  有助於避免數據損壞,當磁盤驅動器有故障須要恢復時,邏輯備份就很最重要了

缺點:

l  備份或恢復都須要mysql服務器進程參與,消耗系統資源,可能會出現擠壓內存和性能抖動等

l  邏輯備份在某些場景下比數據庫文件自己大(例,一個整型須要4字節存儲,可是用ASCII寫入時,可能須要12個字符)

l  邏輯備份須要加載和解釋語句,轉化爲存儲過程,建索引,因此會很慢。

l  備份的時候不能有DDL操做,

 

 

4、經常使用的備份工具備哪些?備份的對象是什麼

 

官方的工具:mysqldump、mysqlpump

Percona工具:xtrabackup、mydumper(mysql5.7纔有的)

商業備份工具:Innobase:提供了商業備份工具爲Innobackup,能夠實現InnoDB的熱備支持增量備份;可是對於MyISAM不支持增量備份,只能實現徹底備份,屬於物理備份,速度比較快。

 

備份的對象主要有:數據、配置文件、代碼:存儲過程,存儲函數,觸發器、os相關的配置文件、複製相關的配置、二進制日誌

 

 

5、MySQL備份之into outfile和load data

 

主要用於單表或者單列,部分字段導出導入

##注意存放目錄必定要有mysql啓動的權限(也能夠單列導出、導入)

mysql> select * from test01 into outfile '/data/mysql/mysql3306/test01.sql';

Query OK, 3 rows affected (0.06 sec)

##恢復

mysql> load data infile '/data/mysql/mysql3306/test01.sql' into table test01;

Query OK, 3 rows affected (0.08 sec)

Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

##導出cvs格式文件

mysql> select * from test01 into outfile '/data/mysql/mysql3306/test01.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

Query OK, 3 rows affected (0.00 sec)

案例:有時候有excel打開的時候會出現亂碼, 
解決導出csv中文亂碼問題:

將csv用txt打開,另存爲,選擇utf8編碼便可。

 

解決導入問題:

mysql安裝目錄下的my.ini,增長以下參數:

[client]
default-character-set=utf8

[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

重啓mysql服務。

 

 

##導入cvs格式文件

mysql> LOAD DATA INFILE '/data/mysql/mysql3306/456.cvs.csv' INTO TABLE test01 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

Query OK, 3 rows affected (0.00 sec)

Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
[root@mysql-01 ~]# iconv -f GBK -t utf-8 abc.txt -o def.txt   格式轉換

註釋:

FIELDS TERMINATED BY ',' 字段間分割符
OPTIONALLY ENCLOSED BY '"' 將字段包圍 對數值型無效
LINES TERMINATED BY '\n' 換行符

以上備份須要file權限

 

6、MySQL備份之mysqldump

 

1、建立備份須要的帳號

create user 'bkuser'@'localhost' identified by 'bkzhishuedu';
root@localhost [(none)]>grant reload, lock tables, process, replication client on *.* to 'bktom'@'10.0.0.%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.00 sec)
flush privileges;

 

2、數據表都是innodb的表全備

從庫執行:

[root@mysql-02 ~]# mysqldump -uroot -p123456 --single-transaction --dump-slave=2 --events --routines --triggers --hex-blob --quick --databases pbs > dump.sql

GTID:

[root@mysql-02 ~]# mysqldump -uroot -p123456 --single-transaction --dump-slave=2 --events --routines --triggers --hex-blob --set-gtid-purged=OFF --databases pbs > dump.sql

 

主庫執行:

[root@mysql-01 ~]# mysqldump -uroot -p123456 --single-transaction --master-data=2 --events --routines --triggers --hex-blob --quick --databases pbs > dump.sql

GTID:

[root@mysql-01 ~]# mysqldump -uroot -p123456 --single-transaction --master-data=2 --events --routines --triggers --hex-blob --set-gtid-purged=OFF --databases pbs > dump.sql

TIPS:

數據表有MyIsam表,先lock tables,而後再flush tables,確保數據索引都刷新到磁盤,而後再備份呢

 

3、用mysqlbinlog作增備

這個很簡單就是把binlog文件拷貝一份,到時候能夠按須要恢復。

 

 

參考文檔:

http://www.cnblogs.com/wenanry/archive/2010/05/18/1737939.html

http://www.jb51.net/article/41570.htm

https://my.oschina.net/jettyWang/blog/719731

https://my.oschina.net/abcijkxyz/blog/721858

 

 

爲了方便你們交流,本人開通了微信公衆號,和QQ羣291519319。喜歡技術的一塊兒來交流吧

相關文章
相關標籤/搜索