本站和网页 http://www.mamicode.com/info-detail-2340948.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

MySQLdump之single-transaction详解
  首页 Web开发 Windows程序 编程语言 数据库 移动开发 系统相关 微信 其他好文 会员 > > 详细 时间:
2018-06-18 21:46:25
     阅读:
9654
     评论:
     收藏:
    
[点我收藏+]
标签:
不能
   
参数
repeat
from
vcc
lte
stat
efault
cte
single-transaction
开启general log选项
查看目前general log的情况
mysql> show variables
like
‘%general_log%‘
------------------+--------------------------------------------+
| Variable_name
Value
| general_log
OFF
| general_log_file | /data/mysqldata/
3306
/general_statement.log |
rows
in
set
0.00
sec)
开启general log的选项
mysql>
global
general_log=on;
使用mysqldump命令:。
[mysql@racnode1 ~]$ /usr/local/mysql/bin/mysqldump -uroot -p
‘zsd@7101‘
-S /data/mysqldata/
/mysql.sock
--single-transaction --default-character-set=utf8 zdemo student > /tmp/studentbackup.sql
其中使用了两个参数
--single-transaction
??此选项会将隔离级别设置为:REPEATABLE READ。并且随后再执行一条START TRANSACTION语句,让整个数据在dump过程中保证数据的一致性,这个选项对InnoDB的数据表很有用,且不会锁表。但是这个不能保证MyISAM表和MEMORY表的数据一致性。
??为了确保使用
命令时,保证dump文件的有效性。需没有下列语句
ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE
,因为一致性读不能隔离上述语句。所以如果在dump过程中,使用上述语句,可能会导致dump出来的文件数据不一致或者不可用。
??如何验证上述的过程呢,可以开启general log看看过程是否如上述所说。
--default-character-set=utf8
导出的dump文件字符集为uft8,检验文件字符集的命令可以使用
file -i
通用查询日志文件如下:
2018-06-18T11
:42:31.035205Z
9163 Query
/*!40100 SET @@SQL_MODE=
‘‘
*/
:42:31.036090Z
/*!40103 SET TIME_ZONE=
‘+00:00‘
:42:31.036905Z
/*!80000 SET SESSION information_schema_stats_expiry=0 */
:42:31.037521Z
SET SESSION NET_READ_TIMEOUT= 700, SESSION NET_WRITE_TIMEOUT= 700
:42:31.038398Z
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
:42:31.038977Z
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
:42:31.039859Z
SHOW VARIABLES LIKE
‘gtid\_mode‘
:42:31.058093Z
UNLOCK TABLES
中间日志省略
......
:42:31.084432Z
SAVEPOINT sp
:42:31.087632Z
show create table
`student`
:42:31.088094Z
SET SESSION character_set_results =
‘utf8‘
:42:31.088407Z
show fields from
:42:31.092360Z
:42:31.094718Z
SELECT /*!40001 SQL_NO_CACHE */ * FROM
:42:32.815435Z
ROLLBACK TO SAVEPOINT sp
:42:32.815546Z
RELEASE SAVEPOINT sp
从上述日志分析:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ 设置隔离级别为REPEATABLE READ
START TRANSACTION 开启了事务
??事务的实现是通过InnoDB存储引擎的MVCC机制事项,细节如下:InnoDB是一个多版本控制的存储引擎。它可以对已修改的行保留一个旧版本的数据信息。用于支持事务特性。例如:并发和数据回滚。这个信息保留在数据结构中的表空间中,这个表空间称之为rollback segment回滚段。(在Oracle中也有一种类似的数据结构)。
??当事务需要回滚的时候,InnoDB会使用回滚段的信息,用于执行undo操作。对于某一行,InnoDB会用早先版本的信息来保障读一致性(consistent read)。
??Undo日志在回滚段(rollback segment)中被分为两部分,一部分叫做插入undo日志(insert undo logs),另外一部分叫做更新undo日志(update undo logs)。插入undo日志只用于事务回滚,如事务一旦提交,那么日志就可以被丢弃。更新undo日志用在读一致性,InnoDB会指定一个数据快照,这个快照的构建来自于更新undo日志中数据行的早期版本。通过数据行早期版本的快照来保证读一致性,如果不需要这种事务数据保护的时候,这个日志可以被丢弃。
保存点的日志分析
SAVEPOINT
SP
中间日志省略...
SELECT
/*!40001 SQL_NO_CACHE */ * FROM
ROLLBACK
TO SAVEPOINT sp
RELEASE
可以看到通过REPEATABLE READ事务,保证数据一致性数据,然后
设置保存点sp,当读取了所有数据的快照,就回退这个保存点sp。可以比喻为游戏中存档之后,然后取档备份成一个游戏外的文件,删除这个档。可以当作这个档在这个游戏内不存在。
查看当前会话级别
## 会话级当前事务级别
‘%isolation%‘
-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
row
0.03
## 系统全局级当前事务级别
mysql> show
variables
| transaction_isolation | REPEATABLE-READ
0.11
## 修改全局级事务级别
mysql>set
transaction_isolation=
‘read-committed‘
就算修改了全局事务级别,Mysqldump导出时也会设定隔离事务级别为:REPEATABLE READ。用于保证数据的读一致性。
导出文件的字符集类型
mysql@racnode1
tmp]$ file -i studentbackup.sql
studentbackup.sql
: text/plain
charset=
utf-8
原文地址:https://www.cnblogs.com/zhangshengdong/p/9196128.html
举报
评论
一句话评论(
登录后才能评论!
分享档案
更多>
2021年07月29日
(22)
2021年07月28日
(40)
2021年07月27日
(32)
2021年07月26日
(79)
2021年07月23日
(29)
2021年07月22日
(30)
2021年07月21日
(42)
2021年07月20日
(16)
2021年07月19日
(90)
2021年07月16日
(35)
周排行
更多
数据库进阶
2021-07-29
在 Oracle 数据库中执行 SQL 语句遇到特殊字符的转义方式
2021-07-28
Windows
Logstash同步
Sqlserver 到Elasticsearch
2021-07-26
mysql数据库(11):恢复数据
mysql数据库(9):常用查询的例子
SQLAlchemy 多对多
ClickHouse的JDBC连接
Apache HBase 1.7.1 发布,分布式数据库
数据库常用架构和同步工作原理
MySQL数据库设计规范(仅供参考)
友情链接
兰亭集智
  
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
联系我们
留言反馈
© 2014
mamicode.com
版权所有
京ICP备13008772号-2
-->  联系我们:gaon5@hotmail.com
迷上了代码!