日期:2014-05-16  浏览次数:20437 次

7-8章Mysql技术内幕InnoDB存储引擎——事务&备份&性能调优

目录(?)[-]

事务

事务概述

事务的实现

redo

undo

事务控制语句

隐式提交的SQL语句

对于事务的统计

事务隔离级别

分布式事务

不好的习惯

备份与恢复

备份于恢复概述

冷备

逻辑备份

select into outfile

逻辑备份的恢复

mysqlimport

二进制日志备份与恢复

热备

ibbackup

xtrabackup

快照备份

复制

复制的工作原理

快照复制的备份架构

性能调优

?

?

事务

? ? ? transaction是数据库区别于文件系统的重要特性之一,innodb引擎完全符合事务的ACID特性。

?

? ? ? Atomicity 原子性

?

? ? ? Consistency一致性

?

? ? ? Isolation 隔离性

?

? ? ? Durability 持久性

?

7.1、事务概述

? ? ? Atomicity 原子性:整个数据库事务是不可分割的工作单位。

?

? ? ? Consistency一致性:事务将数据库从一种状态转变为下一种一致的状态。

?

? ? ? Isolation 隔离性:一个事务的影响在该事务提交前对其他事务都不可见。

?

? ? ? Durability 持久性:事务一旦提交,其结果就是永久性的。

?

7.2、事务的实现

? ? ? 隔离性通过锁来实现,原子性、一致性、持久性通过数据库的redo和undo来完成。

?

7.2.1、redo

? ? ? innodb通过redo日志文件和innodb log buffer来实现redo。

?

? ? ? 当事务开始时,innodb会记录该事务的一个LSN(Log Sequence Number,日志序列号)。当执行事务时,会往innodb log buffer写入事务日志。当事务提交时,必须将innodb存储引擎的日志缓存写入磁盘(默认的实现,通过innodb_flush_log_at_trx_commit=1)。这意味这磁盘上的页和内存缓冲池中的页是不同步的,

?

7.2.2、undo

? ? ? undo和redo相反,redo是重做,undo是撤销。使用rollback语句请求回滚就可以利用undo信息将数据回滚到修改之前的样子。redo存放在redo日志里面,undo存放在数据库内部的一个特殊段(undo segment),undo段位于共享表空间里。undo是逻辑操作,它实际上是做与之前相反的工作,之前是insert,它就delete对于每个update,undo都会执行一个相反的update,当插入操作回滚时,表空间的大小并不会因此而收缩。

?

7.3、事务控制语句

? ? ? AUTOCOMMIT = 0 关闭自动提交,等于1 开启自动提交。

?

? ? ? START TRANSACTION | BEGIN 显示的开启一个事务。

?

? ? ? COMMIT 提交你的事务。

?

? ? ? ROLLBACK 回滚。

?

? ? ? SAVEPOINT identifier SAVEPOINT允许你的事务中创建一个保存点,一个事务中可以有多个保存点。

?

? ? ? RELEASE SAVEPOINT identifier 删除一个事务的保存点。

?

? ? ? ROLLBACK TO [savepoint]identifier 回滚到之前创建的保存点,需要显示运行COMMIT或者ROLLBACK命令。

?

? ? ? SET TRANSACTION 这个语句用来设置事务的隔离级别,innodb的隔离级别在6.4已经说过了。

?

? ? ? completion_type = 0 时COMMIT和COMMIT WORK功能完全相同。

?

? ? ? completion_type = 1 时COMMIT WORK等于COMMIT AND CHAIN,表示提交后马上开启一个相同隔离级别的事务。

?

? ? ? complation_type = 2 时COMMIT WORK等于COMMIT AND RELEASE,当事务提交后会自动断开与服务器的链接。

?

7.4、隐式提交的SQL语句

? ? ? 1.DDL语句

?

? ? ? 2.CREATEUSER,DROPUSER,GRANT、RENAME USER,REVOKE,SET PASSWORD。

?

? ? ? 3.ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE。

?

7.5、对于事务的统计

? ? ? QPS = Question Per Second = 每秒请求数。

?

? ? ? TPS = Transaction Per Second = 每秒事务处理能力。

?

? ? ? 计算TPS的方法是com_commit + com_rollback/TIME = TPS。

?

7.6、事务隔离级别

? ? ? READ UNCOMMITTED(事务隔离最低的级别,有事务隔离就能解决更新丢失,但是存在脏读的问题)。

?

? ? ? READ COMMITED(ORACLE和SQL SERVER默认的隔离级别,解决了脏读,但是一个事务多次读取的内容不同,出现了不可重复读的问题)。

?

? ? ? READ REPEATABLE(可重复读,innodb引擎的默认事务隔离级别,解决了不可重复读的问题,但是产生了幻读,innodb通过Next-key lock解决了幻读)。

?

? ? ? SERIALIZABLE(可串行化,通过强制事务排序解决幻读问题,会降低性能)总的看来innodb默认的 READ REPEATABLE是非常棒的。

?

7.7、分布式事务

? ? ? innodb引擎支持XA分布式事务。

?

? ? ? 分布式事务指营运需多个独立的事务资源(transactional resources)参与一个全局的事务中。事务资源通常是关系型数据库系统。全局事务要求在其中所有参与的事务要么都提交、要么都回滚,对于原有的ACID有了提高。注意:在使用分布式事务时,innodb存储引擎的事务隔离级别必须设置成SERIALIABLE。

?

? ? ? 分布式事务由一个或多个资源管理器Resource Managers一个事务管理器Transaction Manager及一个应用程序Application Program。

?

? ? ? ? ?1.资源管理器:提供访问事务资源的方法,通常一个DB就是一个资源管理器。

?

? ? ? ? ?2.事务管理器:协调参与全局事务中的各个事务,需要和参与全局事务中的所有资源管理器进行通信。

?

? ? ? ? ?3.应用程序:定义事务的边界,指定全局事务中的操作。

?

?

7.8、不好的习惯

7.8.1、在循环中提交事务

?

7.8.2、不要开启自动提交事务 set auto_commit = 0

?

7.8.3、使用自动回滚,存储过程中使用 declare exit handlerfor sqlexception rollba