Windows下关闭MySQL的自动提交(autocommit)功能
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,随着MySQL的应用日益广泛,支持事务特性的InnoDB已经成为MySQL的默认存储引擎。和很多关系数据库不同的是,在InnoDB存储引擎中,事务默认是自动提交的,也就是说每条DML语句都会触发com
千家信息网最后更新 2026年10月31日Windows下关闭MySQL的自动提交(autocommit)功能随着MySQL的应用日益广泛,支持事务特性的InnoDB已经成为MySQL的默认存储引擎。和很多关系数据库不同的是,在InnoDB存储引擎中,事务默认是自动提交的,也就是说每条DML语句都会触发commit操作。这一自动提交(autocommit)特性在很多场景下对于性能还是有一定影响的。
最近我们尝试将一个Oracle数据库的数据迁移到MySQL数据库,发现导入时间很长。举个例子来说,其中有一个表包含四千多条数据,插入时间竟然超过了100秒。每插入一条数据,数据库就会自动提交一次,也就是说单这一个表MySQL会commit超过4000次,如果我们关闭自动提交功能,通过程序来控制,只要一次commit就可以了。
那么,如何关闭MySQL的autocommit特性呢?
通常有两种方法:
首先,我们通过set命令来修改autocommit参数。
但是这个时间其实还是蛮长的,继续提升!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.01
最近我们尝试将一个Oracle数据库的数据迁移到MySQL数据库,发现导入时间很长。举个例子来说,其中有一个表包含四千多条数据,插入时间竟然超过了100秒。每插入一条数据,数据库就会自动提交一次,也就是说单这一个表MySQL会commit超过4000次,如果我们关闭自动提交功能,通过程序来控制,只要一次commit就可以了。
那么,如何关闭MySQL的autocommit特性呢?
通常有两种方法:
- 一种是通过set命令修改会话级别或者数据库级别的参数,但是数据库重启后参数会恢复默认值;
- 第二种方法是修改mysql的配置文件my.ini,一劳永逸。
1.测试环境 Windows Server 2008 r2+MySQL Community Server (GPL) 5.7.16
我是在Windows Server 2008 r2环境下进行测试。点击(此处)折叠或打开
- mysql> status
- --------------
- mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64)
- Connection id: 2
- Current database:
- Current user: root@localhost
- SSL: Not in use
- Using delimiter: ;
- Server version: 5.7.16 MySQL Community Server (GPL)
- Protocol version: 10
- Connection: localhost via TCP/IP
- Server characterset: latin1
- Db characterset: latin1
- Client characterset: utf8
- Conn. characterset: utf8
- TCP port: 3306
- Uptime: 9 min 5 sec
- Threads: 1 Questions: 7 Slow queries: 0 Opens: 106 Flush tables: 1 Open tables: 99 Queries per second avg: 0.012
- --------------
- mysql>
2.通过set来关闭autocommit,重启后恢复默认值
首先,我们通过set命令来修改autocommit参数。
点击(此处)折叠或打开
- mysql>
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | ON |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.00 sec)
- mysql> set autocommit=0;
- Query OK, 0 rows affected (0.00 sec)
- mysql>
- mysql> set global autocommit=0;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | OFF |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.02 sec)
- mysql>
接下来,我们重启数据库,发现autocommit参数已经恢复默认值。
点击(此处)折叠或打开
- E:\mysql-5.7.16-winx64\bin>net stop mysql
- MySQL 服务正在停止.
- MySQL 服务已成功停止。
- E:\mysql-5.7.16-winx64\bin>net start mysql
- MySQL 服务正在启动 .
- MySQL 服务已经启动成功。
- E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 2
- Server version: 5.7.16 MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql>
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | ON |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.00 sec)
- mysql>
3.修改mysql的配置文件my.ini
我们找到mysql的配置文件my.ini,在里面添加一行记录"autocommit=0"。
点击(此处)折叠或打开
- [mysql]
- default-character-set=utf8
- [mysqld]
- max_connections=200
- default-storage-engine=INNODB
- basedir =E:\mysql-5.7.16-winx64\bin
- datadir =E:\mysql-5.7.16-winx64\data
- port = 3306
- autocommit=0
然后重新启动数据库,确认autocommit参数是否为OFF。
点击(此处)折叠或打开
- E:\mysql-5.7.16-winx64\bin>net stop mysql
- MySQL 服务正在停止.
- MySQL 服务已成功停止。
- E:\mysql-5.7.16-winx64\bin>net start mysql
- MySQL 服务正在启动 .
- MySQL 服务已经启动成功。
- E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 2
- Server version: 5.7.16 MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | OFF |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.01 sec)
- mysql>
- mysql>
4.数据插入速度提升十倍
以开头提到的那张表为例,4000多条数据,在关闭autocommit参数之前插入时间为101505ms;关闭autocommit参数之后插入时间为8869ms,插入速度提升了十倍还多。但是这个时间其实还是蛮长的,继续提升!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.01
数据
参数
数据库
服务
时间
成功
正在
文件
特性
配置
也就是
也就是说
事务
命令
多条
引擎
方法
环境
级别
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司排名
科技互联网技术
互联网科技公司怎么样
互联网科技股票
唐信互联网科技
远拓互联网科技
奇酷互联网络科技公司
互联网高科技企业
互联网科技汛
顺网科技2021年互联网排名
蓝色互联网科技
须眉科技是互联网公司吗
互联网系的金融科技公司
浙江互联网科技研学营
电子科技大学互联网创业大赛
华夏恒生互联网科技013171
区块链结合互联网科技
互联网安防科技感
卡尔迅互联网科技有限公司
米泉互联网科技专业怎么样
互联网与科技金融数据
科技互联网创业计划书
坤平互联网科技
佛山市翊博互联网络科技有限公司
南博望互联网科技有限公司
伊宁互联网科技做什么的
互联网科技圈年度人物
众安科技工业互联网合作
北京天晋互联网科技有限公司
科技互联网专业工作会议发言稿