MariaDB用法——事务、日志
事务
A:原子性
C:一致性
I:隔离性
D:持久性
默认隐式事务,建议开启显式事务
开启显示事务(临时)
start transaction(开启一个临时事物)
配置文件写入autocommit=0(永久开启事务)
验证
重新登录一个终端看不到
commit:提交,提交后不能撤回
默认为REPEATABLE-READ类型:commit后其他终端依旧看不到,commit或rollback本身的事务才可以看到,这就是传说中的幻读
没有提交的数据又被称为“脏数据”;未被处理的数据
rollback:撤回,后悔药
savepoint 名称;:脏数据索引,表示可以撤回到指定位置,相当去快照
创建两个还原点
恢复到a26,表示恢复到定义a26当时的状态,所有没有改变
恢复到c28,在定义c28之前添加了一条记录,定义之后删除了stuid为26的记录。所以会恢复到“快照”当时的样子
release savepoint 保存点:删除“快照”
事务隔离级别
READ-UNCOMMITTED:其他终端可以读到脏数据
READ-COMMITTED:只能读到提交数据,多次提交会导致读取数据不一致
REPEATABLE-READ:在一个事务中查看的数据是一致的,但会出现幻读
SERIALIZABLE:未提交的读操作会阻塞修改事务
MVCC:多版本并发控制
在配置文件中更改
查看事务隔离级别
select @@tx_isolation;
加配置文件
set tx_isolation="READ-UNCOMMITTED"
并发控制
死锁
两个事务同时更改一个表时,系统会自动牺牲一个事务,牺牲修改时间短的。
show processlist;查看都有谁登录了,在干什么
kill 用户ID; :终止该用户的当前事务
日志
cat .mysql_history:查看mysql操作历史
事务日志
redo log
undo log
show variables like '%innodb_log%';通常会增加日志文件个数和文件大小
存放路径
依照惯例,写入配置文件(最后在安装完数据库后就更改,否则因为已经有数据会报错,该配置文件"_"和"-"不区分,日志最好不要和软件存到同一路径下)
错误日志
通用日志:记录所有人对数据库的动作
show variables like 'general_log%';
set global general_log=on;只会在排错的时候开启,对系统资源消耗太大
查看通用日志报错类型
更改报错类型
set global log_output=TABLE|FILE|NONE
更改后通用日志会保存到mysql库的general_log表中(会影响数据库性能所以不推荐使用)
concat:连接函数
optimize table 表名:优化表
慢查询日志
slow_query_log=ON|OFF 开启或关闭慢查询
set global slow_query_log=on
long_query_time=N 多长时间算慢,默认十秒
select sleep(1),name from 表名:没查询一条记录停顿一秒
二进制日志
show profiles;
show profiles for query ID编号 ;
sql_log_bin:默认开启的
log_bin:手动指定最好指定单独路径log_bin=PATH/logname
set global log_queries_not_using_indexes=on;开启记录不用索引或使用全索引查询的命令到慢日志中
二进制日志
基于行记录二进制日志
关闭二进制日志set sql_log_bin=off;
show master logs;查看二进制日志文件大小
show master status;查看二进制日志的“位置”
写完数据后日志增加
expire_logs_days=N:二进制文件可以自动删除多少天一起的,默认为0
show binlog events in '文件名' from 位置;
mysqlbinlog 日志文件
mysqlbinlog --start-position=位置 --stop-position=位置 日志文件 (-v详情,选项加载文件之前)
purge master logs to '日志文件名':清除日志(删除该日志文件之前的)
reset master彻底删除日志(删除之前的日志,从新生成)