mysqldump簡單解析
MySQL中的mysqldump,真是一個經典而有效的工具,經常用,但是不知道後臺執行的過程中到底在幹些什麼,其實如果想得到這些基本的資訊不一定要去看程式碼,我們透過日誌的方式就能一窺其中的奧妙。
如果想看到裡面的一些較為細節的日誌,開個general log就可以了。至於效能不用太擔心,general log我們隨開隨關。
在不同的版本中也有一些差別,我選擇的是MySQL 5.7.13的版本,簡單看了下里面的日誌。
首先這個環境的事務隔離級別我選擇的是RC.
# mysqladmin var|grep isol
| tx_isolation | READ-COMMITTED
匯出的時候,用了下面的命令匯出:
mysqldump --single-transaction --databases mobile_billing > test.sql
得到的日誌如下,我們來選擇性的解讀一下。
Query /*!40100 SET @@SQL_MODE='' */
Query /*!40103 SET TIME_ZONE='+00:00' */
這裡需要注意mysqldump會預設把隔離級別改為RR,然後開啟的事務是有consistent snapshot選項,這個選項只對RR隔離級別有效。
Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
因為開啟了GTID,這裡就會按照這個規則來,後面匯出的資料都是以這個GTID的事務為基準。
Query SELECT @@GLOBAL.GTID_EXECUTED
Query UNLOCK TABLES
下面考慮了儲存的差異性,比如undo,通用表空間等,在這個環境中暫時沒用,所以結果都是空。
Query SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('mobile_billig'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE, EXTRA ORDER BY LOGFILE_GROUP_NAME
考慮了分割槽的影響範圍
Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('mobile_billig')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
下面是要匯出資料的步驟了,會在開始的時候設定一個savepoint,然後匯出表中的資料,完成之後,rollback到之前的save point點位,繼續匯出下一個表,直到完成,會釋放savepoint,這樣一來得到的資料就是基於同一個基準了。
Query SHOW VARIABLES LIKE 'ndbinfo\_version'
Init DB mobile_billing
得到建庫語句,預設沒有新增if not exists的選項。
Query SHOW CREATE DATABASE IF NOT EXISTS `mobile_billing`
開啟save point
Query SAVEPOINT sp
得到指定庫下的資料表列表
Query show tables
迴圈列表,得到表的狀態,以便進一步處理。
Query show table status like 'open\_sdk\_doc\_version'
sql_quote_show_create這個採納數有兩個值(1,0),預設是1,表示表名和列名會用``包著的。 這個伺服器引數只可以在session級別設定,不支援global設定的(不支援my.cnf設定)
Query SET SQL_QUOTE_SHOW_CREATE=1
Query SET SESSION character_set_results = 'binary'
得到建表語句,預設沒有新增if not exists的選項。
Query show create table `open_sdk_doc_version`
設定字符集
Query SET SESSION character_set_results = 'utf8'
得到欄位資訊
Query show fields from `open_sdk_doc_version`
Query show fields from `open_sdk_doc_version`
得到的資料會是insert into的形式,其中sql_no_cache的作用是避免查詢結果快取
Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `open_sdk_doc_version`
Query SET SESSION character_set_results = 'binary'
Query show create table `open_sdk_doc_version`
Query SET SESSION character_set_results = 'utf8'
Query ROLLBACK TO SAVEPOINT sp
。。。
繼續下一個表
直到完成,就會釋放save point
Query ROLLBACK TO SAVEPOINT sp
Query RELEASE SAVEPOINT sp
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2143463/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單的mysqldump備份(windows)MySqlWindows
- UINavigationBar簡單解析UINavigation
- 簡單理解DNS解析流程(一)DNS
- mysqldump 恢復單個資料庫MySql資料庫
- mysqldump 欄位值帶單引號MySql
- webpack4簡單實用配置解析Web
- 簡單解析MySQL中的cardinality異常MySql
- 簡單介紹PostgreSQL解析URL的方法SQL
- 1.物件和類的簡單解析物件
- 讓 json 解析更簡單高效的 GJSONJSON
- 【mysqldump】mysqldump及備份恢復示例MySql
- 【postgresl】PG資料庫sql特性簡單解析資料庫SQL
- 結合案例深入解析簡單工廠模式模式
- C++寫一個簡單的JSON解析C++JSON
- 簡單語法解析器實現參考
- 簡單介紹下各種 JavaScript 解析器JavaScript
- mysqldump原理分析MySql
- mysqldump小談MySql
- Using mysqldump for backupsMySql
- Express檔案表單解析中介軟體 Multer簡介Express
- 利用tesseract解析簡單數字驗證碼圖片
- 簡單sql欄位解析器實現參考SQL
- mysqldump備份單庫、部分庫、全庫、及排除部分庫MySql
- PHP GD庫解析一張簡單圖片並輸出PHP
- 簡單解析C++基於Boost庫實現命令列C++命令列
- mysqldump 深入淺出MySql
- mysqldump Got error: 1045MySqlGoError
- mysqldump Got error 1290MySqlGoError
- mysqldump 使用規範MySql
- mysqldump匯出報錯"mysqldump: Error 2013 ... during query when dumping tableMySqlError
- 實現一個簡單版本的vue及原始碼解析(二)Vue原始碼
- 簡單易用的.NET免費開源RabbitMQ操作元件EasyNetQ解析MQ元件
- SiriKit框架詳細解析(九) —— 構建Siri Shortcuts簡單示例(三)框架
- 實現一個簡單版本的Vue及原始碼解析(一)Vue原始碼
- JavaScript實現一個簡單的Markdown語法解析器JavaScript
- Linux定時任務crontab通俗易懂簡單扼要地解析Linux
- 將物件解析為JSON資料和將JSON資料解析為物件的簡單例項物件JSON單例
- mysqldump的最佳實踐MySql
- mysqldump引數說明MySql