Tag: MySQL

MySQL transaction-isolation参数的设置

1.在my.cnf中的【mysqld】部分添加: [mysqld] transaction-isolation = read-committed 2.重启mysql数据库 mysql> show variables like ‘tx%’; +—————+—————-+ | Variable_name | Value          | +—————+—————-+ | tx_isolation  | READ-COMMITTED | +—————+—————-+ 摘自『https://anmh.wordpress.com/2010/06/30/mysql%EF%BC%9Atransaction-isolation%E5%8F%82%E6%95%B0%E7%9A%84%E8%AE%BE%E7%BD%AE/』

Read More »

MySQL 事务以及加锁机制

事务的特征ACID,即原子性、一致性、隔离性、持久性。 原子性保证一个事务为一个最小的单元,内部不可分割; 一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚; 隔离性保证不同事务间看到的数据视图相互独立,相互隔离(隔离级别可设置); 持久性保证事务提交后数据会持久的保存下来; sql规范定义的事务的隔离级别: 1.READ UNCOMMITTED(读取未提交内容)     所有事务可以看到未提交事务的执行结果,本隔离级别很少用到实际应用中,读取未提交的数据,又称为“脏读”。 2.READ COMMITTED(读取提交内容)     大多数数据库的默认隔离级别是此级别,但不是mysql默认的。一个事务在开始的时候只能看见已提交事务所做的改变。一个事务从开始到提交前所做的任何改变都是不可见的,除非提交。这种隔离级别也称为不可重复读。 3.REPEATABLE READ(可重复读)     此隔离级别是为了解决可重复读隔离级别导致的问题即一个事务多个实例并发读取数据时会看到不同的结果。此隔离级别不会看到其他事务提交后的结果,即事务即使提交了我也看不到。此级别也称为“幻读”。 4.SERIALIZABLE(可串行化)     可串行化是最高的隔离级别,它通过强制事务排序,使之不可重读,解决了幻读的问题。此隔离级别会在每个读的数据行上加共享锁,使用这种隔离级别会产生大量的超时现象,一般实际开发中不会用到。 mysql加锁机制 : 根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。 根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。 mysql提供了3种事务型存储引擎,InnDB、NDB Cluster和Falcon。 一个事务执行的任何过程中都可以获得锁,但是只有事务提交或回滚的时候才释放这些锁。这些都是隐式锁定,也可以显式锁定,InnoDB支持显式锁定,例如: SELECT …. LOCK IN SHARE MODE (加共享锁) SELECT …..FOR UPDATE(加排他锁) 多版本并发控制(重要): Mysql的事务存储引擎不是简单实用行加锁机制,而是叫多版本并发控制(MVCC)技术,和行加锁机制关联实用。以便应对更高的并发,当然是以消耗性能作为代价。 每种存储引擎对MVCC的实现方式不同,InnoDB引擎的简单实现方式如下: InnoDB通过为每个数据航增加两个隐含值的方式来实现。这两个隐含值记录了行的创建时间,以及过期时间。每一行存储事件发生时的系统版本号。每一次开始一个新事务时版本号会自动加1,每个事务都会保存开始时的版本号,每个查询根据事务的版本号来查询结果。 摘自『http://www.php1.cn/Content/Mysql_ShiWuYiJiJiaSuoJiZhi.html』

Read More »

MySQL 全局禁用autocommit

mysql默认开启auto commit,我们可以通过系统变量控制来动态控制session级别autocommit,如何从全局禁用autocommit呢,也许有时候我们不想让mysql自动提交。 mysql有一个Cmd-Line&Option file&System Var可以帮助我们实现这样的功能,它就是init_connect。 这个参数用来定义每个session建立时自动执行的query。 A string to be executed by the server for each client that connects. The string consists of one or more SQL statements. To specify multiple statements, separate them by semicolon characters.A string to be executed by the server for each client that connects. The string consists of one or more SQL statements. To specify multiple statements, separate them by semicolon characters. 利用这个变量,可以通过如下方式禁用autocommit: way1:mysql>SET GLOBAL init_connect=’SET autocommit=0′; way2:在初始化参数文件中设置 [mysqld] init_connect=’SET autocommit=0′ way3: 启动mysql时带上命令行参数–init_connect=’SET autocommit=0′ 当然这个参数的设置对拥有super权限的用户是无效的,具体说明…

Read More »

centos7 安装 MariaDB – MySQL社区版

一、安装 # yum install mariadb-server mariadb-client # systemctl start mariadb # systemctl enable mariadb 二、配置 1、修改root用户密码 默认情况下安装好mysql数据库之后root密码是空的,为了安全起见需要修改root用户密码 # mysqladmin -u root password 111111   //将root用户的密码修改为111111 2、表名大小写不敏感 用root帐号登录,在/etc/my.cnf 或 /etc/myql/my.cnf中的[mysqld]后添加 lower_case_table_names=1 三、创建数据库 1、创建数据库 # mysql -u root -p MariaDB [(none)]> CREATE DATABASE `malldb` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 2、远程连接malldb数据库 MariaDB [(none)]> grant all on malldb.* to root@’%’ identified by ‘123456’;

Read More »