天天看點

研究mysqldump對我的資料庫做了哪些操作

/usr/local/mysql55/bin/mysqldump -uroot  -S /data/mysqldata/3306/mysql.sock  --single-transaction --default-character-set=gbk  test t10>/usr/tmp/testzsd.sql

--single-transaction               

--default-character-set=gbk

test t10

從官方文檔看,上面的選項操作分别是:開啟了事務,保證資料一緻性,設定了預設字元集,選擇了test資料庫的t10表,但我卻想驗證上面的操作,是否對我的資料庫做了如上操作:

方法:開啟general log,觀察mysqldump之後的general log日志。

mysql> show variables like '%log%';

mysql> set global general_log=on;

檢視相應日志:

120713 15:41:53    20 Connect   root@localhost on 

                   20 Query     /*!40100 SET @@SQL_MODE='' */

                   20 Query     /*!40103 SET TIME_ZONE='+00:00' */

                   20 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ(這裡的級别是repeatable read)

                   20 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */(确實開啟了日志,為了獲得一緻性快照)

                   20 Query     UNLOCK TABLES

                   20 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 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='test' AND TABLE_NAME IN ('t10'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME

120713 15:41:54    20 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='test' AND TABLE_NAME IN ('t10')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME

                   20 Init DB   test

                   20 Query     SHOW TABLES LIKE 't10'

                   20 Query     show table status like 't10'

                   20 Query     SET OPTION SQL_QUOTE_SHOW_CREATE=1

                   20 Query     SET SESSION character_set_results = 'binary'

                   20 Query     show create table `t10`

                   20 Query     SET SESSION character_set_results = 'gbk'

                   20 Query     show fields from `t10`

                   20 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `t10`

120713 15:42:02    20 Query     SET SESSION character_set_results = 'binary'

                   20 Query     use `test`

                   20 Query     select @@collation_database

                   20 Query     SHOW TRIGGERS LIKE 't10'

                   20 Query     SET SESSION character_set_results = 'gbk'

                   20 Quit

從上面的日志可以分析,給與了重複讀的事務級别,開啟了事務之後,在取讀需要dump的資料SELECT /*!40001 SQL_NO_CACHE */ * FROM `t10`。這裡是保證資料唯一性的根據和本質。由于重複讀的事務級别上面使用了MVCC,保證了資料一緻性快照,也不會出現幻讀。