mysqldump的一點使用總結(r12筆記第81天)
MySQL裡的mysqldump無疑是大家使用最為廣泛的備份恢復工具了。這樣一個工具使用起來功能非常豐富,很多功能幾個引數組合起來就能夠輕鬆實現了,我就簡單列舉幾個不錯的點。
--master-data
這個選項在搭建主從的時候經常需要考慮,而有了GTID,這個工作一下子輕鬆了很多,如果需要使用我們總是會使用maser-data=2來匯出,1和2是什麼區別,簡單來看,區別不大,但是差別很明顯。
2的情況
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000033', MASTER_LOG_POS=943935226;
1的情況
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000033', MASTER_LOG_POS=943935226;
--order-by-primary
這個選項屬於MySQL很有特色的一個功能,能夠根據主鍵值來進行排序,這樣得到的資料看起來就更加規整了。
----skip-extended-insert
如果要得到一行資料對應一條insert語句的形式,使用這個選項就可以搞定。預設是使用insert into xxx values(xx)(xx)的形式。
INSERT INTO `test` VALUES (1,'1');
INSERT INTO `test` VALUES (2,'2');
INSERT INTO `test` VALUES (3,'3');
INSERT INTO `test` VALUES (5,'5');
--add-drop-database
如果在資料恢復的時候,資料庫已經存在則刪除重建的情況,使用這個選項就很有用,而在表級預設就不需要了,因為預設是開啟了--add-drop-table選項。
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- ----
all-databases FALSE
all-tablespaces FALSE
no-tablespaces FALSE
add-drop-database FALSE
add-drop-table TRUE
當然對於這個選項,我們得多說說,在最後來引申一個bug。
--replace
這個選項可以生成replace語句而非insert語句,在一些特定的場景中尤其有用。如果出現了資料衝突的情況,需要merge資料,使用replace選項就是一個很不錯的選擇,而我們也承上啟下,比如想一行資料生辰過一條replace語句,那麼就可以結合--skip-extended-insert來完成,這樣一來就會生成若干條replace語句。
REPLACE INTO `test` VALUES (1,'aa');
REPLACE INTO `test` VALUES (2,'bb');
--complete-insert
這個選項簡直臺酸爽了,可以生成一個完整的列值對映關係。
INSERT INTO `test` (`id`, `name`) VALUES (1,'aa'),(2,'bb');
或者結合--skip-extended-insert生成多條語句。
INSERT INTO `test` (`id`, `name`) VALUES (1,'aa');
INSERT INTO `test` (`id`, `name`) VALUES (2,'bb');
一個bug
其實mysqldump匯出資料的過程還是比較清晰的,只是多了一些更加豐富的功能來修飾。但是也在測試的過程彙總發現了--add-drop-database的一個bug,說起來關係就一下子很微妙了。
如果你需要把某個資料庫的資料恢復到指定的備份,如果是全部資料的恢復,包括資料字典資料等,那麼使用mysqldump的時候--add-drop-database選項就尤其關鍵了。
我在使用mysqldup --all-databases --add-drop-database的方式匯出資料,匯入恢復的時候,收到一個錯誤資訊。
ERROR 1580 (HY000): You cannot 'DROP' a log table if logging is enabled
這樣一個問題,看起來很詭異,如果是使用source的方式來執行,基本上會淹沒在大批次的日誌中。而使用管道的方式也好不到哪裡,因為這個錯誤是完全相同的。
為什麼會有這個問題呢,是在mysql這個資料庫中存在兩個表slow_log,general_log(它們的儲存引擎是csv的)。我們的資料庫基本都開啟了慢日誌選項slow_query_log,在啟用的時候,如果嘗試drop這個表就會丟擲錯誤,這一點上來看,這個處理確實有些彆扭,而查詢mysql的bug庫還真有一個匹配的bug
而目前的解決方案就有很多了,如果想盡可能平滑實現這個功能,那就是修改匯出的sql檔案,把drop database if exists mysql這句給去掉,聽起來比較笨重,或者修改mysqldump.c,相當於在程式碼層面加一層過濾。可以參考丁奇的一篇部落格。
而如果你使用一點小技巧,比如匯入資料前,關掉slow_log,匯入後開啟,那麼匯入後就開啟不了了,會提示表不存在,無法開啟,這樣看來,你還得單獨再對此做一個備份,想想都頭疼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2140140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 駕考的一點總結(r12筆記第93天)筆記
- mysqlpump和mysqldump的效能大比拼(r12筆記第90天)MySql筆記
- 玩足彩的一點感受(r12筆記第80天)筆記
- MySQL原始碼安裝總結(r12筆記第12天)MySql原始碼筆記
- 總結一下這一百天來的收穫(r12筆記第100天)筆記
- 一個IT人和ppt的故事(r12筆記第39天)筆記
- 筆記:React 中關於 key 的一點總結筆記React
- MySQL傳輸表空間小結(r12筆記第2天)MySql筆記
- MySQL中的derived table(r12筆記第47天)MySql筆記
- 歸零的心態(r12筆記第82天)筆記
- mysqlpump的效能測試(r12筆記第89天)MySql筆記
- 一種Oracle快速的整合遷移方案(r12筆記第98天)Oracle筆記
- Redis知識點筆記總結Redis筆記
- clickhouse使用的一點總結
- 我爸爸眼中的我(r12筆記第22天)筆記
- 我的女兒二三事(七)(r12筆記第58天)筆記
- 資料架構難點-資料分佈(r12筆記第43天)架構筆記
- 聊點高考往事和駕照科目二考試(r12筆記第86天)筆記
- 版權筆記的一個總結筆記
- 使用繫結變數的一點總結!變數
- Memcached筆記——(三)Memcached使用總結筆記
- 使用pt工具檢測MySQL主從延遲(r12筆記第7天)MySql筆記
- 分分鐘搭建MySQL一主多從環境(r12筆記第31天)MySql筆記
- 推薦最近收藏的幾篇文章(r12筆記第85天)筆記
- 一個ORA-00600問題的簡單分析(r12筆記第18天)筆記
- 鎖的總結筆記筆記
- 筆記:第1章 總論筆記
- MySQL自增列主從不一致的測試(r12筆記第37天)MySql筆記
- MySQL中的binlog和redo淺析(r12筆記第5天)MySql筆記
- 關於金錢的幾個小故事(r12筆記第8天)筆記
- MySQL自增列的重複值問題(r12筆記第25天)MySql筆記
- MySQL無法建立表的問題分析(r12筆記第73天)MySql筆記
- Oracle閃回原理測試(三)(r12筆記第16天)Oracle筆記
- sandbox和MHA快速測試(r12筆記第32天)筆記
- Oracle 12c DBCA淺析(r12筆記第48天)Oracle筆記
- EXTJs學習筆記(知識點總結)JS筆記
- 一個DBA總結的MySQL學習筆記MySql筆記
- Mybatis筆記總結MyBatis筆記