mysql的事务操作及日志文件

事务

事务特性

ACID特性:

  • A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
  • C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态,能量守恒,保持一致
  • I:Isolation隔离性;一个事务所做出的操作在提交之前,其它事务是看不到的;隔离有多种隔离级别,实现并发
  • D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中
事务操作
#可以批量执行指令,提高效率
#以begin标明开始进行事务,未输入提交之前别人看不到,
begin;
insert teachers(name,age) values('x',20);
insert teachers(name,age) values('y',22);

#取消操作,不是所有都可撤销,DML可以,DDL语言无法撤销drop
rollback;

#提交操作,输入begin也会提交结束事务
commit;

不以事务执行指令子句会进行自动提交

set autocommit={1|0}       #可更改值改为是否自动提交,可支持全局,每次执行指令后都要执行commit;才会提交
事务隔离级别
隔离级别脏读不可重复读幻读加读锁
读未提交可以出现可以出现可以出现
读已提交不允许出现可以出现可以出现
可重复读不允许出现不允许出现可以出现
序列化不允许出现不允许出现不允许出现
  • READ UNCOMMITTED

    可读取到未提交数据,产生脏读,生产中不推荐

  • READ COMMITTED

    可读取到已提交数据,但未提交数据不可读,产生不可重复读,即可读取到其他多个已提交的数据,导致每次读取数据不一致,会在相对应时间段看到别人已提交的数据而不是初始执行的数据,每次读取的数据都不一致

  • REPEATABLE READ

    可重复读,多次读取数据都一致,产生幻读,即读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改前的旧数据。此为MySQL默认设置,任何时间段看到的都是最初的数据

  • SERIALIZABLE

    可串行化,加锁,未提交的读事务阻塞修改事务(加读锁,但不阻塞读事务),或者未提交的修改事务阻塞读事务(加写锁,其它事务的读,写都不可以执行)。会导致并发性能差

更改默认级别

8.0之前用tx_isolation,8.0之后,包含8.0用transaction_isolation

#更改配置文件
vim /etc/my.cnf
[mysqld]
transaction-isolation=SERIALIZABLE

systemctl restart mysqld

日志管理

事务日志

仅保留一部分时间

查看事务日志文件相关配置

show variables like '%innodb_log%';

innodb_log_file_size   50331648 每个日志文件大小
innodb_log_files_in_group  2     日志组成员个数
innodb_log_group_home_dir ./ 事务文件路径

事务日志性能优化

innodb_flush_log_at_trx_commit=0|1|2

在这里插入图片描述

0 模式,对表添加记录时,和事务提交时都会写入mysql程序的缓冲区,固定每秒再转发写入到磁盘文件,程序损坏几率大,不安全,不停电情况下,有可能会丢失一秒钟的数据

1 模式,对表添加记录会写入程序缓冲区,发起事务提交会写入操作系统的缓冲区,然后再写入磁盘,只要提交就写入磁盘,安全性最强,但性能最差,主要用于金融产业或者其他重要项目使用,保证安全性

2 模式,对表添加记录会写入程序缓冲区,发起事务提交,会写入操作系统的缓冲区,固定每秒固定再转发写入到磁盘文件,内核损坏几率小,比较安全,不停电情况下,有可能会丢失一秒钟的数据

0和2的性能差不多,2比0要安全一丢丢
#更改配置文件
#建议把事务日志文件单独存放在独立目录分区中,减少文件处理碎片化,提高性能
mkdir /data/tran_logs
chmod -R /data/tran_logs

vim /etc/my.cnf
[mysqld]
innodb_flush_log_at_trx_commit=2
innodb_log_file_size=500000000   
innodb_log_files_in_group=3 
innodb_log_group_home_dir=/data/tran_logs      

systemctl restart mysqld
错误日志

主要存放失败的,错误,或者重大事件如无法启动

查看存放路径,可更改,改配置文件log_error的值即可启用并存放再自定义目录下

SHOW GLOBAL VARIABLES LIKE 'log_error'   
通用日志

会记录数据库的各种操作

general_log=ON|OFF                 #是否启用通用日志,启用后会在数据库路径下生成一个主机名.log
general_log_file=HOSTNAME.log      #记录的文件名,也可在此更改文件路径
log_output=TABLE|FILE|NONE         #通用日志的存放形式,表|文件    表形式会存放在mysql数据库的general_log表里,磁盘路径在数据库路径下的.CSV文件里
慢查询日志

记录执行查询时长超出指定时长的操作,慢的定义默认十秒

slow_query_log=ON|OFF                          #开启或关闭慢查询,支持全局和会话,只有全局设置才会生成慢查询文件
long_query_time=N                              #慢的定义,单位秒
slow_query_log_file=HOSTNAME-slow.log          #慢查询日志文件路径和命名
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk 
#上述查询类型且查询时长超过long_query_time,则记录日志
log_queries_not_using_indexes=ON  #不使用索引或使用全索引扫描,不论是否达到慢查询阀值的语句也都会记录在日志中,默认OFF,即不记录
log_slow_rate_limit = 1                        #多少次查询才记录,mariadb特有
log_slow_verbosity= Query_plan,explain         #记录内容
log_slow_queries = OFF                         #同slow_query_log,MariaDB 10.0/MySQL 5.6.1 版后已删除
二进制日志(备份)

不依赖于存储引擎类型,建议单独存放

记录格式
  • 基于“语句”记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少,只记录语句
  • 基于“行”记录:row,记录数据,日志量较大,更加安全,建议使用的格式,会记录语句所更改的信息
  • 混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上)
查看格式
show variables like 'binlog_format';
#可更改配置文件
相关变量
select @@log_bin;
sql_log_bin=ON|OFF:                #是否记录二进制日志,默认ON,支持动态修改,系统变量,而非服务器选项,
#例如在大规模批量导入千万行记录,属于测试数据时;数据库还原过程中可临时关闭二进制功能,set更改即可
log_bin=/PATH/BIN_LOG_FILE:        #指定文件位置,需写在配置文件中;默认OFF,表示不启用二进制日志功能,
#当不指定路径时默认存放在数据库文件下的binlog文件
#上述两项都开启才可以

binlog_format=STATEMENT|ROW|MIXED:  #二进制日志记录的格式,默认STATEMENT
max_binlog_size=1073741824#单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
#说明:文件达到上限时的大小未必为指定的精确值,重启数据库服务也会生成新的文件
binlog_cache_size=4m                 #此变量确定在每次事务中保存二进制日志更改记录的缓存的大小(每次连接)
max_binlog_cache_size=512m           #限制用于缓存多事务查询的字节大小。
sync_binlog=1|0#设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘
expire_logs_days=N:                 #二进制日志可以自动删除的天数。 默认为0,即不自动删除
开启二进制功能,建议单独存放文件
mkdir /data/binlog/
chown mysql. /data/binlog/

vim /etc/my.cnf
[mysqld]
log_bin=/data/binlog/mysql-bin              #需指定日志文件前缀
max_binlog_size=1073741824                  #单个二进制日志文件的最大体积,到达最大值会自动生成新文件

mysql>set sql_log_bin=ON;                   #登录mysql打开变量

#重启服务
systemctl restart mysqld
查看二进制文件中的内容
#需登录mysql
show binlog events in 'mysql-bin.000001' 
from 6516 limit 2,3      #筛选条件

#不用登录查看
mysqlbinlog /data/binlog/mysql-bin.000001 -v

#查看二进制日志列表
show master logs;或者show binary logs;

#当前正在使用的二进制日志文件
show master status;
导出备份及还原
#将编号678到编号752之间所产生的记录挑出,还原到该记录事件发生时的状态
mysqlbinlog --start-position=322 --stop-position=465 /var/lib/mysql/mariadb-bin.000003 -v > binlog.sql

#用导出文件还原
mysql < binlog.sql
同步远程主机的二进制日志
#远程实时将10.0.0.8上的从指定二进制日志文件开始,同步到当前主机的当前目录下,账号注意授权,要求同一版本
mysqlbinlog -R --host=10.0.0.8 --user=wei --password=123456 --raw --stop-never mysql-bin.000001
删除
PURGE MASTER LOGS TO 'mysql-bin.000002';       #将文件2前面的文件删除
RESET MASTER;                                 #清空全部二进制日志,重新开始记录     

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值