博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql禁用autocommit,以及遇到的问题(转)
阅读量:6655 次
发布时间:2019-06-25

本文共 2032 字,大约阅读时间需要 6 分钟。

的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关闭掉,通过程序来控制,只要一次commit就可以了。

 

1,我们可以通过set来设置autocommit

  1. mysql> set global init_connect="set autocommit=0";  //提示你用权限更高的财户来设置  
  2. ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation  
  3. mysql> set autocommit=0;  
  4. Query OK, 0 rows affected (0.00 sec)  
  5.   
  6. mysql> select @@autocommit;   //查看一下autocommit的设置  
  7. +--------------+  
  8. | @@autocommit |  
  9. +--------------+  
  10. |            0 |  
  11. +--------------+  
  12. 1 row in set (0.00 sec)  

2,我们可以修改mysql的配置文件my.cnf来关闭autocommit

  1. [mysqld]  
  2. init_connect='SET autocommit=0'  //在mysqld里面加上这些内容  

用第二种方法关,有一点要注意,连接mysql用户的权限不能大于启动mysql的用户的权限,不然init_connect='SET autocommit=0'根本不会启作用,也不会报任何错误,汗一个先。看以下实例

  1. zhangy@ubuntu:~$ mysql -umysql  
  2. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  3. Your MySQL connection id is 1  
  4. Server version: 5.5.2-m2-log Source distribution  
  5.   
  6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
  7.   
  8. mysql> select @@autocommit;     //mysql是启动用户,关闭autocommit成功  
  9. +--------------+  
  10. | @@autocommit |  
  11. +--------------+  
  12. |            0 |  
  13. +--------------+  
  14. 1 row in set (0.00 sec)  
  15.   
  16. mysql> Ctrl-C -- exit!  
  17. Aborted  
  18. zhangy@ubuntu:~$ mysql -uroot  
  19. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  20. Your MySQL connection id is 2  
  21. Server version: 5.5.2-m2-log Source distribution  
  22.   
  23. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
  24.   
  25. mysql> select @@autocommit;    //用root财户启动,不成功。  
  26. +--------------+  
  27. | @@autocommit |  
  28. +--------------+  
  29. |            1 |  
  30. +--------------+  
  31. 1 row in set (0.00 sec)  

这个会不会是mysql的bug呢?我在网上找了找这方面的问题,还真有。部分内容如下:

If a user has SUPER privilege, init_connect will not execute
(otherwise if init_connect will a wrong query no one can connect to server).

Note, if init_connect is a wrong query, the connection is closing without any errors

and next command will clause 'lost connection' error.

里面有一点说的很清楚If a user has SUPER privilege, init_connect will not execute,如果用户有更高级的权限,init_connect根本不会执行。

 

http://blog.csdn.net/ying_593254979/article/details/12095169

你可能感兴趣的文章
Java 框架新贵入驻 TechEmpower Framework Benchmark
查看>>
CentOS6.3 64位安装wine出错,牛人帮帮忙
查看>>
js获取textarea标签中的换行符和空格。
查看>>
国内的Maven服务器
查看>>
C# winform DataGridView 的18种常见属性
查看>>
Cygwin的安装、配置与调整
查看>>
MySQL存储过程
查看>>
做有中国特色的程序员
查看>>
JVM【第九回】:【OutOfMemoryError异常之本机直接内存溢出】
查看>>
Angular
查看>>
ANTLR Reference书摘
查看>>
我的友情链接
查看>>
索引失效
查看>>
DELL云计算解决方案【我身边的戴尔企业级解决方案】
查看>>
我的友情链接
查看>>
MyBatis学习总结(14)——Mybatis使用技巧总结
查看>>
SSH 密钥 认证 多台机器
查看>>
图解TCPIP协议
查看>>
《Effective C++第三版》读书笔记——构造/析构/赋值运算
查看>>
Mysql中文汉字转拼音的实现(每个汉字转换全拼)
查看>>