国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysqldump簡單解析

2024-07-24 12:31:33
字體:
來源:轉載
供稿:網友
        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

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 从江县| 安泽县| 蕲春县| 孟州市| 阿合奇县| 鹤峰县| 山东省| 封丘县| 赤城县| 友谊县| 南汇区| 元阳县| 德令哈市| 衢州市| 乌鲁木齐县| 蒲江县| 铁岭市| 汨罗市| 德州市| 垣曲县| 赤壁市| 阿荣旗| 钦州市| 澜沧| 彭水| 巴林左旗| 五华县| 军事| 玉龙| 江达县| 和田市| 阿城市| 蓬安县| 岚皋县| 正宁县| 高州市| 芒康县| 阜平县| 如皋市| 南阳市| 田东县|