MySQL Study之--MySQL关闭自动commit(autocommit)

数据库 MySQL
对于mysql来讲,在事务处理时,默认是在动提交的(autocommit),以下方法可以自动关闭autocommit;

对于mysql来讲,在事务处理时,默认是在动提交的(autocommit),以下方法可以自动关闭autocommit;

 案例分析:

1、在mysql登录环境下修改

[root@mysql2 soft]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, 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 databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.02 sec)

mysql> select version();
+-------------+
| version()   |
+-------------+
| 5.6.25-73.1 |
+-------------+
1 row in set (0.00 sec)

mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |                ;;默认autocommit是开启的
+---------------+-------+
1 row in set (0.03 sec)

在当前session关闭autocommit:
mysql> set @@session.autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

在global级别关闭autocommit:
mysql> set @@global.autocommit=0;

Query OK, 0 rows affected (0.01 sec)

创建普通用户:
mysql> create user tom identified by 'tom';

Query OK, 0 rows affected (0.00 sec)

mysql> grant all on prod.* to 'tom'@'localhost' identified by 'tom';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

普通用户登录:
[root@mysql2 ~]# mysql -u tom -p

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, 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> use mysql;
ERROR 1044 (42000): Access denied for user 'tom'@'localhost' to database 'mysql'
mysql> use  prod;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> show variables like '%commit%';
+-------------------------------------------+-------+
| Variable_name                             | Value |
+-------------------------------------------+-------+
| autocommit                                | OFF   |
| binlog_order_commits                      | ON    |
| innodb_api_bk_commit_interval             | 5     |
| innodb_commit_concurrency                 | 0     |
| innodb_flush_log_at_trx_commit            | 1     |
| innodb_use_global_flush_log_at_trx_commit | ON    |
+-------------------------------------------+-------+
6 rows in set (0.00 sec)

创建测试表:
mysql> create table t1(id int,name varchar(10));

Query OK, 0 rows affected (0.15 sec)

mysql> insert into t1 values (10,'tom');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|   10 | tom
 |
+------+------+
1 row in set (0.00 sec)

事务回滚:
mysql> rollback;

Query OK, 0 rows affected (0.02 sec)

mysql> select * from t1;
Empty set (0.00 sec)

2、在mysql service重启后
mysql server 重启后:
[root@mysql2 ~]# service mysql stop
Shutting down MySQL (Percona Server)....[  OK  ]
[root@mysql2 ~]# service mysql start
Starting MySQL (Percona Server).....[  OK  ]
[root@mysql2 ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, 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 variables like '%commit%';
+-------------------------------------------+-------+
| Variable_name                             | Value |
+-------------------------------------------+-------+
| autocommit                                | ON    |             ;;autocommit仍然是开启状态
+-------------------------------------------+-------+
6 rows in set (0.01 sec)

编辑/etc/my.cnf文件:

[root@mysql2 ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
init_connect='set autocommit=0'                                    ;;用户登录时,关闭autocommit
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
explicit_defaults_for_timestamp=true
innodb_buffer_pool_size = 128M
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M

用户登录查看:
[root@mysql2 ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, 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 variables like '%commit%';
+-------------------------------------------+-------+
| Variable_name                             | Value |
+-------------------------------------------+-------+
| autocommit                                | ON    |                ;;root用户不受影响(为安全起见)

mysql> system mysql -u tom -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, 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 variables like '%commit%';
+-------------------------------------------+-------+
| Variable_name                             | Value |
+-------------------------------------------+-------+
| autocommit                                | OFF   |                ;;普通用户,autocommit已被关闭
+-------------------------------------------+-------+

 

本文出自 “天涯客的blog” 博客,请务必保留此出处http://tiany.blog.51cto.com/513694/1683722

责任编辑:honglu 来源: 51CTO博客
相关推荐

2017-06-30 15:17:59

AndroidAndroid StufindViewByI

2017-01-18 10:57:24

MySQLZabbix监控

2017-06-23 15:01:10

2009-11-17 17:31:58

Oracle COMM

2022-04-14 11:17:41

MySQL字符配置

2011-03-28 16:12:55

mysql自动远程备份

2010-10-11 11:46:20

MySQL主键

2009-11-28 20:16:04

2010-06-12 15:31:04

MySQL查询优化

2019-07-12 08:49:04

MySQ数据库Redis

2011-05-16 11:29:00

MySQL自动备份

2010-05-19 16:45:26

MySQL自动启动

2009-12-15 14:36:24

2013-09-09 17:17:18

MYSQL自动备份

2023-05-11 08:46:28

MySQL

2014-05-21 14:37:27

Zabbix监控MySQL

2021-05-31 16:09:31

MySQLSchema设计

2011-03-21 11:08:15

LAMPMySQL

2011-03-21 15:00:13

LAMPMySQL

2010-05-19 18:42:23

点赞
收藏

51CTO技术栈公众号