一:事务
一:事务介绍
保证交易的完整性 ACID特性: Atomic(原子性) 所有语句作为一个单元全部成功执行或全部取消。不允许出现中间过程. Consistent(一致性) 如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。 Isolated(隔离性) 事务之间不相互影响。 两个方面: 修改同一行 , 一致性读行级锁:事务修改行,会锁定这行(持有这行的锁)
Durable(持久性) 事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
隔离级别(一致性读):
RU (read-uncommitted) 读未提交:A可以读到B未提交的数据 比如B修改了age的值但未提交,A可以查到修改后的值 RC (read-committed) 不可重复读:A只能读到B修改后commit的值,B修改值但未commit,A只能读到修改前的值 RR (repeatable-read)mysql默认的隔离级别 可重复读:A的会话先开启,事务B修改了age值并且commit,但是A读取的仍然是修改前的值,除非A重新开始会话,select的才是正确的值,但是该模式下的insert、update和delete 会使用最新的数据进行操作,保证数据的一致性
S (serializable) 串行化
事务控制语句
begin;xxxxxxcommit; 正常情况begin;
xxxxxx 半路死亡begin;
xxxxxxxxrollback; 回滚
出现隐式提交的情况:
隐式提交 不做commit 自动提交了
mysql> show variables like 'auto%';+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| auto_increment_increment | 1 || auto_increment_offset | 1 || autocommit | ON || automatic_sp_privileges | ON |+--------------------------+-------+4 rows in set (0.01 sec)可以看到mysql默认设置了autocommit 一条sql语句为一个事务,一般涉及金钱交易的业务会将autocommit 关闭
临时设置:
set autocommit=0;
永久:
my.cnf autocommit=0;
二:Mysql日志
一: 错误日志 默认是开启的
错误日志位置可在配置文件/etc/my.cnf中进行配置:log_error=/var/log/mysql.log分析日志找[error]就行了
二: 二进制日志 (binlog,逻辑型日志) 默认不开启
1:作用: 记录所有变更类的语句 DDL,DCL :以语句方式(statement)记录 DML(已提交的事务语句insert,update,delete):默认是以行模式记录(row模式,数据行的变化) 可以做数据恢复和操作的审计2:配置方法: log_bin=/opt/mysql/data/mysql-bin binlog_format=row server_id=6 sync_binlog=13: 查看日志文件
查看能识别的日志文件 mysql> show binary logs; 查看正在使用的日志文件 mysql> show master status; 4: 日志内容查看 按事件查看日志内容 mysql> show binlog events in 'mysql-bin.000012'; 直接查看日志内容 mysqlbinlog --base64-output=decode-rows -vvv /opt/mysql/data/mysql-bin.000012 |more5 截取二进制日志 [root@standby data]# mysqlbinlog --start-position=219 --stop-position=186613 /opt/mysql/data/mysql-bin.000012 >/tmp/binlog.sql
三: 慢日志(slow-log) 默认是关闭的
功能:记录慢语句的日志文件,可以根据需要,开启一段时间来进行统计配置文件:slow_query_log=1slow_query_log_file=/opt/mysql/data/standby-slow.loglong_query_time=0.1 #记录查询时间超过0.1s的log_queries_not_using_indexes=1 #记录查询不使用索引的语句
可以使用Box Anemometer基于pt-query-digest将MySQL慢查询可视化
三:Mysql的备份与恢复
一: 备份的种类
逻辑备份:SQL语句的备份 物理备份:数据页备份二:逻辑备份工具的介绍
mysql数据导入到文件中,首先得在配置文件中授权tmp为信任文件 select xxxx from t1 into outfile '/tmp/redis.txt' 将mysql中数据导入到redis中 mysql -uroot -p123 -e "select concat('hmset city_',id,' id ', id,' name ',name,' countrycode ',countrycode,' district ',district,' population ',population) from world.city limit 10 "|redis-cli如何备份:
mysqldump 参数,和mysql命令通用,用来登录数据库 -u -p -S -h -P其他备份参数 -A 全库备份 mysqldump -uroot -p123 -A >/backup/full.sql -B 备份一个或多个指定库 mysqldump -uroot -p123 -B world bbs >/backup/wb.sql 备份单库中的表 这种不加参数的备份中不包括建库语句,在恢复的时候需要手动create database并use mysqldump -uroot -p123 world city country >/backup/ccc.sql --master-data=2 备份时记录二进制日志的状态 一般备份必加 --single-transaction 开启innodb热备功能 一般备份必加 -R --triggers完成的备份语句:
mysqldump -uroot -p123 -A --master-data=2 --single-transaction -R --triggers >/backup/full.sql使用navicat进行备份:右键导出为sql文件恢复文件:mysql> source /backup/full.sql