MySQL Study之–MySQL關閉自動commit(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已被關閉
+——————————————-+——-+