mysql禁用autocommit,以及遇到的问题(转)

MySQL的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

时间: 2024-08-30 11:46:30

mysql禁用autocommit,以及遇到的问题(转)的相关文章

【整理】MySQL 之 autocommit

mysql 默认是开启 auto commit 的.可以通过如下命令查看 session 级别和 global 级别的设置:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql> select @@session.autocommit; +----------------------+ | @@session.autocommit | +----------------------+ |                    1 | +-----

MYSQL禁用生成日志文件mysql-bin.000001

在MySQL数据库中,mysql-bin.000001.mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的. 但是这些文件的生长速度是很快的,特别占用服务器资源.当服务器资源不够充足的情况下,我们可以选择定期删除这些日志文件,或者修改配置文件,不让日志生成. 1.删除这些日志 直接删除mysql-bin.000开头的文件,包括mysql-bi

MySQL禁用InnoDB引擎的方法_Mysql

一.确定版本 查看MySQL版本 复制代码 代码如下: mysql -V 或者可以登录MySQL使用select version();或status;命令查看 二.开始工作 关闭MySQL 复制代码 代码如下: service mysql stop 如果上面的命令无法关闭MySQL,则使用kill -9命令强制杀掉进程: 修改MySQL配置文件my.cnf(通常位于/etc/mysql/my.cnf)下加入如下字段 对于MySQL 5.5而言: 复制代码 代码如下: default-storag

mysql autocommit对myisam,innodb的性能影响

前段时间把数据库的部分myisam表转变成了innodb了,感觉慢了好多.我知道autocommit对innodb性能有一定的影响,但不知道影响有这么大.如何关闭autocommit,请参考MySQL禁用autocommit,以及遇到的问题 ,为了解决这个问题,我做了一些测试,包括autocommit对myisam,innodb影响.   一,测试autocommit对myisam的影响 1,准备测试表和数据 Java代码   mysql>  CREATE TABLE `test_test` (

【Mysql】—— 报错:Can't call commit when autocommit=true

java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.jav

Can't call commit when autocommit=true(转)

  java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.j

mysql 锁表锁行语句分享(MySQL事务处理)_Mysql

复制代码 代码如下: mysql_query("set autocommit=0"); $list_one = $db->fetch_first("select * from prizes where id = ".$id." FOR UPDATE"); $db->query("DELETE from prizes WHERE id =".$list_one['id']); mysql_query("co

mysql Myisamchk小工具使用手册第1/2页_Mysql

1.myisamchk的调用方法 myisamchk [options] tbl_name ... 其中options指定你想让myisamchk干什么. 它允许你通过使用模式"*.MYI"指定在一个目录所有的表. shell> myisamchk *.MYI 推荐的快速检查所有MyISAM表的方式是: shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI 当你运行myisamchk时,必须确保其它程序不使用表.

MySQL和Oracle对比学习之事务

MySQL中的存储引擎很是丰富,常用的有InnoDB,MyISAM等,也查看了不少的资料,基本也有所了解,从一些参考书中看MySQL中的sql部分也是一扫而过,感觉和Oracle中的sql部分没有大的区别. 因为InnoDB和MyISAM存储引擎的一个主要区别就是对于事务的支持,所以自己也复制了oracle中的想法. 简单做了两个测试,只是想练手试一下,结果测试让我很意外. 我创建了两个表myisam_test和innodb_test,做一个insert操作,然后rollback,按照预期的想法