目录(?)[-]
事务
事务概述
事务的实现
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