老男孩mysql笔记_老男孩MySQL笔记 第二天2-2

两种修改隔离级别的方法

事务具有ACID四种特性。

但是Isolation并发可能引起如下问题:

1.脏读

允许读取到未提交的脏数据。

2.不可重复读

如果你在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。

3.幻读

解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。

由ANSI/ISO定义的SQL-92标准定义的四种隔离级别

1.Read Uncommitted

2.Read Committed

3.Repeatable Read

4.Serializable

隔离解别脏读不可重复读幻读

Read UncommittedYYY

Read CommittedNYY

Repeatable(default)NNY

SerializableNNN

下面用Mysql数据库做一些小实验

方法1:

用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:

SET[SESSION | GLOBAL] TRANSACTIONISOLATION LEVEL{READ UNCOMMITTED| READ COMMITTED | REPEATABLE READ| SERIALIZABLE}

注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION关键字为将来在当前连接上执行的事务设置默认事务级别。任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。你可以用下列语句查询全局和会话事务隔离级别:

SELECT@@global.tx_isolation;

SELECT@@session.tx_isolation;

SELECT@@tx_isolation;

网上有人使用set tx_isolation命令:

mysql> settx_isolation='read-committed';Query OK, 0 rows affected (0.00sec)+----------------+| @@tx_isolation |+----------------+| READ-COMMITTED|+----------------+1 row in set (0.00 sec)

mysql> select@@session.tx_isolation;+------------------------+| @@session.tx_isolation|+------------------------+|READ-COMMITTED        |+------------------------+1 row in set (0.00 sec)事务隔离变了。网上还有人这样写set @@tx_isolation命令,但这个命令是有问题的。

mysql>  set @@tx_isolation='read-committed';QueryOK, 0 rows affected (0.00 sec)

mysql> select@@session.tx_isolation;+------------------------+| @@session.tx_isolation|+------------------------+| REPEATABLE-READ      |+------------------------+1 row in set (0.00 sec)

mysql> select @@tx_isolation;+-----------------+|@@tx_isolation  |+-----------------+| REPEATABLE-READ |+-----------------+1row in set (0.00 sec)session事物的隔离级别并没有改变。

方法2:

[sql]viewplaincopy

1.mysql>selectversion();

2.+------------+

3.| version()  |

4.+------------+

5.| 5.1.52-log |

6.+------------+

7.1 row inset(0.00 sec)

查看InnoDB存储引擎系统级的隔离级别和会话级的隔离级别

[sql]viewplaincopy

1.mysql>select@@global.tx_isolation,@@tx_isolation;

2.+-----------------------+-----------------+

3.| @@global.tx_isolation | @@tx_isolation  |

4.+-----------------------+-----------------+

5.|REPEATABLE-READ|REPEATABLE-READ|

6.+-----------------------+-----------------+

7.1 row inset(0.00 sec)

更改会话级的隔离级别

[sql]viewplaincopy

1.Session 1:

2.mysql>setsession tx_isolation='read-uncommitted';

3.Query OK, 0rowsaffected (0.00 sec)

4.mysql>select@@global.tx_isolation,@@tx_isolation;

5.+-----------------------+------------------+

6.| @@global.tx_isolation | @@tx_isolation   |

7.+-----------------------+------------------+

8.|REPEATABLE-READ|READ-UNCOMMITTED|

9.+-----------------------+------------------+

10.1 row inset(0.00 sec)

11.

12.

13.Session 2:

14.mysql>select@@global.tx_isolation, @@tx_isolation;

15.+-----------------------+-----------------+

16.| @@global.tx_isolation | @@tx_isolation  |

17.+-----------------------+-----------------+

18.|REPEATABLE-READ|REPEATABLE-READ|

19.+-----------------------+-----------------+

20.1 row inset(0.00 sec)

更改系统级的隔离级别

[sql]viewplaincopy

1.Session 1:

2.mysql>setglobaltx_isolation='read-uncommitted';

3.Query OK, 0rowsaffected (0.00 sec)

4.mysql>select@@global.tx_isolation,@@tx_isolation;

5.+-----------------------+------------------+

6.| @@global.tx_isolation | @@tx_isolation   |

7.+-----------------------+------------------+

8.|READ-UNCOMMITTED|READ-UNCOMMITTED|

9.+-----------------------+------------------+

10.1 row inset(0.00 sec)

11.

12.Session 2:

13.mysql>select@@global.tx_isolation, @@tx_isolation;

14.+-----------------------+-----------------+

15.| @@global.tx_isolation | @@tx_isolation  |

16.+-----------------------+-----------------+

17.|READ-UNCOMMITTED|REPEATABLE-READ|

18.+-----------------------+-----------------+

19.1 row inset(0.00 sec)

关闭SQL语句的自动提交

[sql]viewplaincopy

1.mysql>setautocommit=off;

2.Query OK, 0rowsaffected (0.00 sec)

查看SQL语句自动提交是否关闭

[plain]viewplaincopy

1.mysql> show variables like 'autocommit';

2.+---------------+-------+

3.| Variable_name | Value |

4.+---------------+-------+

5.| autocommit    | OFF   |

6.+---------------+-------+

7.1 row in set (0.00 sec)

不重启修改MySQL的方法

在线修改mysql的系统变量:

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

mysql> set global log_slave_updates=0;ERROR1193 (HY000): Unknown system variable 'log_slave_updates'

mysql>system gdb -p $(pidof mysqld) -ex"set opt_log_slave_updates=0" -batchExcess command line argumentsignored. (9922 ...)19885: No such file or directory.(no debugging symbolsfound)Using host libthread_db library "/lib64/libthread_db.so.1".(nodebugging symbols found)(no debugging symbols found)(no debugging symbolsfound)(no debugging symbols found)[Thread debugging using libthread_dbenabled][New Thread 47873757603968 (LWP 12328)][New Thread 1166383424 (LWP12341)][New Thread 1166117184 (LWP 12339)][New Thread 1092294976 (LWP12338)][New Thread 1165850944 (LWP 12337)][New Thread 1155361088 (LWP12336)][New Thread 1144871232 (LWP 12335)][New Thread 1134381376 (LWP12333)][New Thread 1123891520 (LWP 12332)][New Thread 1113401664 (LWP 12331)][NewThread 1102911808 (LWP 12330)](no debugging symbols found)(no debugging symbolsfound)(no debugging symbols found)(no debugging symbols found)(no debuggingsymbols found)(no debugging symbols found)(no debugging symbols found)(nodebugging symbols found)0x00000039314cb332 in select () from /lib64/libc.so.6

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

MySQL系统参数设置

InonoDB参数设置

演练参数

innodb_buffer_pool_size

spacer.gif

spacer.gif

spacer.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该视频包含以下文件目录 均为高清不加密录制 此资源来源于某宝购买 觉得有学习价值 特此分享 共勉 -------------------Mysql DBA高级运维系列课程(男孩19部全)-------------------------------- 01-第一部-MySQL基础入门(21节) 02-第二部-男孩MySQL多实例安装与企业应用场景(10节) 03-第三部-男孩MySQL应用管理及进阶实战操作(29节) 04-第四部-男孩MySQL乱码问题及字符集实战(14节) 05-第五部-男孩MySQL备份-增量备份及数据恢复基础实战(12节) 06-第六部-男孩MySQL主从复制原理及实战部署(10节) 07-第七部-男孩MySQL主从复制企业级深入高级应用实战(20节) 08-第八部-男孩MySQL备份与恢复实战案例及生产方案(10节) 09-第九部-男孩MySQL服务日志详细介绍及增量恢复命令实践(7节) 10-第十部-男孩MySQL常用引擎及优缺点-应用场景-调优详解(14节) 11-第十一部 MySQL读写分离实现(2节) 12-第十二部-男孩MySQL高可用工具heartbeat实战(33节) 13-第十三部-男孩MySQL高可用工具drbd实战(18节) 14-第十四部-男孩MySQL高可用综合实现实战(22节) 15-第十五部-男孩MySQL数据库优化思想与优化实战(9节) 16-第十六部-男孩MySQL业务变更流程与安全管理思想(7节) 17-第十七部-男孩MySQL数据库索引优化及数据丢失案例-3节 18-第十八部-男孩MySQL数据库生产场景核心优化精讲-05-节 19-第十九部-男孩MySQL读写分离开发实现及软件实现-物理备份-高可用分享-5节

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值