控制 MySQL 磁盘写入策略 以及 数据安全性 的两个关键参数: innodb_flush_log_at_trx_commit 和 sync_binlog

参数:innodb_flush_log_at_trx_commit

如果设置为0,log buffer将每秒一次地写入log file中,并且同时进行log file的flush(刷新到磁盘中)操作。此模式下,在事务提交时,不主动触发写入磁盘的操作;

如果设置为1,此模式下,在每次事务提交时,mysql都会把log buffer的数据写入log file中,并且同时进行log file的flush(刷新到磁盘中)操作;

如果设置为2,此模式下,在每次事务提交时,mysql都会把log buffer的数据写入log file中,但是不会同时进行log file的flush(刷新到磁盘中)操作,会每秒执行一次log file的flush(刷新到磁盘中)操作。

注意:由于进程调度策略问题,不能保证"每秒执行一次flush(刷新到磁盘中)操作"100%的"每一秒执行一次"。

参数:sync_binlog

如果设置N=0,像操作系统刷新其他文件的机制一样,mysql不会同步到磁盘中去,而是依赖操作系统来刷新binary log。

如果设置N>0,mysql在每写N次二进制日志binary log时,会调用fdatasync()函数将二进制日志binary log同步到磁盘中去。

注意:如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。

如图:

性能:

测试场景1:

innodb_flush_log_at_trx_commit=2
sync_binlog=1000

测试场景2:

innodb_flush_log_at_trx_commit=1
sync_binlog=1000

测试场景3:

innodb_flush_log_at_trx_commit=1
sync_binlog=1

测试场景4:

innodb_flush_log_at_trx_commit=1
sync_binlog=1000

测试场景5:

innodb_flush_log_at_trx_commit=2
sync_binlog=1000
innodb_flush_log_at_trx_commit sync_binlog                          TPS                                
1000 2 41000
1000 1 33000
1 1 26000
1000 1 33000

由此可见:

Ⅰ、当innodb_flush_log_at_trx_commit=1和sync_binlog=1时,写入操作性能最差;

Ⅱ、当innodb_flush_log_at_trx_commit=2和sync_binlog=2时,写入操作达到最高性能;

安全:

当innodb_flush_log_at_trx_commit设置为0时,mysqld进程崩溃会导致上一秒所有事务数据丢失。

当innodb_flush_log_at_trx_commit和sync_binlog都为1时最为安全,mysqld进程崩溃或者服务器crash的情况下,binary log只有可能最多丢失一个事务。

当innodb_flush_log_at_trx_commit设置为2时,只有在服务器崩溃或断电情况下,上一秒所有事务数据才可能丢失。

[Mysql]过大sql文件导入过慢问题解决的更多相关文章

  1. 如何导入大sql文件到虚拟主机mysql数据库

    大部分网站虚拟主机为了安全起见,都限制了通过命令或者phpMyAdmin导入大sql文件到mysql数据库,例如godaddy只允许站长通过phpMyAdmin上传不超过2m的sql文件,但实际上我们 ...

  2. mysql 导入 大sql文件

    任务:第一次用mysql,需要将一个1G左右的sql文件导入: 步骤:1:安装mysql-installer-community-5.7.20.0.msi 64位安装包 2:命令行登录:  mysql ...

  3. phpmyadmin导入大sql文件失败解决办法

    摘自:http://www.xunway.com/info/post/499.asp 昨天小编的一个客户在在利用phpmyadmin导入大sql文件的时候,总是提示错误,反应给小编,小编也是第一次遇到 ...

  4. oracle导入大sql文件

    最近遇到一个需要导入大SQL文件的问题,最先直接用SQL developer 导入大SQL文件,结果报IO Exception,只好采用sqlplus 导入,操作过程如下: sqlplus 用户名/密 ...

  5. mysql source命令超大文件导入方法总结

    本文章来给各位朋友介绍利用mysql source命令超大文件导入方法总结,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件,下面我一一给各位朋友介绍. 导 ...

  6. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  7. 将.sql文件导入powerdesigner的实现方法详解

    将.sql文件导入powerdesigner的步骤是本文我们主要要介绍的内容,步骤如下: 第一步:将要导入的库的所有表的表结构(不要表数据,只要表结构)导出成一个.sql文件. 第二步:在powerd ...

  8. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js

    atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐)  vs   lang  ...

  9. Mysql导入大SQL文件数据问题

    如果sql文件过大,会出现mysql out of memory  (Needed XXX bytes) ,或者 "MySQL server has gone away"问题; 另 ...

随机推荐

  1. idea快捷生成

    列模式: shift+alt+insert进入列选择模式,可选择一列或者多列 shift+alt+insert退出列选择模式 大小写转换: Ctrl + Shift + U 循环: iter  增强版 ...

  2. PAT A1046 Shortest Distance (20 分)

    题目提交一直出现段错误,经过在网上搜索得知是数组溢出,故将数组设置的大一点 AC代码 #include <cstdio> #include <algorithm> #defin ...

  3. 如何利用swoole搭建一個簡易聊天室

    <?php class Chat { const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问 const PART = 82;//端口号 private ...

  4. X-UA-Compatibles

    今天在看京东网页代码的时候,发现了X-UA-Compatibles 这个元信息属性,不是很清楚,百度了一下,做下记录 X-UA-Compatible 属性是 IE 浏览器在 IE8 版本开始提供的一个 ...

  5. charles 抓包 (二)

    本文基于charles 抓包 https (1)中的配置完成. 1.移动设备上的网络请求 打开要调试的APP,请求就会先发送到Charles,然后验证是否允许访问. 当点击允许后,可以在Proxy - ...

  6. MFC + XToolKit的使用 ( 亲自实践 )

    1. 变量声明: 在Dlg.h    的public下 CXTPButton m_Button2; 2. 变量交换并设置按钮风格: Dlg.cpp下 void CXT_VS2010Dlg::DoDat ...

  7. maven入门-- part3 生命周期

    简介: Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是: Clean Lifecycle 在进行真正的构建之前进行一些清理工作. Default ...

  8. layDate面板出现红色花纹图案

    要使用layDate,有两种方法: 1. 要么在引用layui.js和layui.css,然后通过layui.use('laydate', callback) 加载模块后,调用方法使用. 2. 去la ...

  9. python将list元素转为数字

    mask_x = ['11', '12', 13'] 方法1:for循环遍历 mask_x = [int(x) for x in mask_x] 方法2:map迭代 mask_x = list(map ...

  10. Intellij IDEA显示调用时序图插件SequenceDiagram

    1 推荐一个插件SequenceDiagram可以自动生成项目调用的时序图 安装好之后重启idea即可 2 使用,找到你要查询的方法