且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

菜鸟学Linux 第077篇笔记 mysql logs

更新时间:2022-10-01 17:36:35

菜鸟学Linux 第077篇笔记 mysql logs




内容总览

错误日志

一般查询日志

慢查询日志

二进制日志(重点)

中继日志

事务日志

存储引擎






日志系统

错误日志

一般查询日志

慢查询日志

二进制日志 DML, DDL(任何引起或可能引起数据库变化操作的日志)

复制,即时点恢复;

中继日志 (中继日志格式和二进制日志格式相同)

事务日志


SHOW GLOBAL VARIABLES LIKE '%log%';  查看日志相关全局变量




错误日志记录内容

服务器启动和关闭过程中的信息

服务器运行过程中的错误信息

事件调度器运行一个事件时产生的信息

在从服务器上启动从服务器进程时产生的信息


log_warnings 

log_error



一般查询日志(默认不开启)

log_output={TABLE|FILE|NONE}

SELECT 查询记录


general_log 

general_log_file



慢查询日志 (只是查询时间比较长与一般查询日志相同)

 SHOW GLOBAL VARIABLES LIKE '%long%';  指定慢查询语句执行时长


 log_slow_queries={YES|NO}

 long_query_time

 slow_query_log  

 slow_query_log_file



二进制日志

mysqlbinlog

可以重现 重新执行sql语句


二进制日志相关的全局变量

SHOW GLOBAL VARIABLES LIKE '%log%';

binlog_format  二进制日志文件格式{statement|row|mixed}


log_bin {on|off}  是否启用二进制日志(可以指定路径,不指定则在数据目录中)


binlog_cache_size 二进制日志缓冲大小默认32768


binlog_stmt_cache_size 二进制日志语句缓冲大小(不建议设置太大)


sql_log_bin={on|off} 用户控制二进制日志信息是否记录进日志文件


sync_binlog 0不同步 如果为其它数据表示以多长时间同步二进制日志文件到硬盘


expire_logs_days 日志的过期天数  (是指的所有日志不只是事务日志)


max_binlog_cache_size

max_binlog_size 

max_binlog_stmt_cache_size  

(此三条用来设置二进制日志文件大小的上限,一般不用配置)



二进制日志格式

基于语句 statement

基于行 row

混合方式 mixed


二进制日志事件

产生的时间 starttime

相对位置 position


二进制日志文件

索引文件   (默认数据库位置下 mysql-bin.index文件 )

二进制日志文件 (默认数据库位置下 mysql-bin.0000001-....)

(建议和数据库存储位置分开,***硬盘级区分 基于数据可靠性,和性能考虑)


查看当前所拥有的二进制日志文件

SHOW BINARY LOGS;


查看当前使用的二进制日志文件   

SHOW MASTER STATUS;  


查看二进制文件里记录的内容   

SHOW BINLOG EVENTS IN 'mysql-bin.000005';

SHOW BINLOG EVENTS IN 'mysql-bin.000005' FROM 205;  指定从某个位置显示

SHOW BINLOG EVENTS IN '二进制日志文件名' [FROM pos];


手动让日志实现滚动

FLUSH LOGS;

SHOW MASTER STATUS;

重启mysql服务器也可以实现日志滚动


清除某个二进制日志文件之前的二进制日志文件

PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr};

PURGE BINARY LOGS TO 'mysql-bin.000002';


即时点还原

当服务器出现故障时,虽然mysql有备份,但未必是故障时间点正好备份了数据

所以当mysql服务器出现故障时只可以还原故障之前某个备份时间点的数据,而备份

点之后的数据要想恢复就需要依靠二进制日志所存储的信息来还原到故障发生时的

数据库状态,需要手动去查找备份出备份时间点之后的二进制日志,将其导入数据服务

器里重新执行一次操作命令即可恢复到故障点时的数据服务器状态,此流程就叫做

即时点还原


mysqlbinlog  (命令行命令)

--start-datetime

--stop-datetime


--start-position

--stop-position


显示二进制日志文件全部内容 

mysqlbinlog mysql-bin.000004


显示指定时间的二进制日志文件内容

mysqlbinlog --start-datetime='2017-01-11 16:48:35' 

--stop-datetime='2017-01-12 01:21:52' mysql-bin.000004

(此为一行命令)

如果不指定结束时间则默认显示到文件尾部

将上述命令进行重定向写到某文件并以.sql结尾 则在进入数据库后

将此文件导入命令,即可实现即时点还原(这里只作解释之后有详细解释)


显示指定位置的二进制日志文件内容

与时间类似这里不再讲解,只需要把命令datetime 换成position 

=号后改为位置即可




中继日志

从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件

此日志文件会在从服务器里再执行一次复制过来的事件


IOPS

IO 100, 200

SSD 500, 1000, 




事务日志

事务性存储引擎用于保证原子性、一致性、隔离性和持久性

ACID (Atomicity Consistency Isolation Durability)


提交的事务要同步到数据硬盘

未提交的事务要撤消其事务操作


innodb_flush_log_at_trx_commit = {0|1|2}

0 每秒从缓存同步到事务日志一次(到内核时不会缓存,直接同步硬盘)

1 每事务提交便同步,并执行硬盘flush操作;(默认为1)

2 每事务提交同步,但不执行硬盘flush操作;


innodb_log_buffer_size

内存缓存大小


innodb_log_file_size

事务日志大小(不建议设置太大)


innodb_log_files_in_group

事务日志组文件个数 事务日志文件可以有多个,当一个写满后会切换到下一个事务

日志文件,被切换的事务日志将同步操作到数据硬盘


innodb_log_group_home_dir

事务日志存放目录


innodb_mirrored_log_groups

事务日志镜像



存储引擎

MyISAM

不支持事务

只支持表锁

不支持外键

支持B树索引,FULLTEXT索引,空间索引

支持表压缩


数据文件

.frm 表格式

.MYD 数据文件

.MYI 索引文件


InnoDB

事务

行级锁

支持B树索引,聚簇索引,自适应hash索引

表空间,raw磁盘设备(裸设备)


数据文件

.frm 表格式

.ibd 表空间


设置每表一个表空间 SHOW GLOBAL VARIABLES LIKE 'innodb%';

innodb_file_per_table=on


MRG_MYISAM

支持将MYISAM逻辑上合起来显示


CSV

将表存储为文本文件(数据库导入导出)


ARCHIVE

归档,将表归档压缩存放


MEMORY

将表存储到内存里(读写速度快,安全性相对低)


BLACKHOLE

黑洞存储引擎(以后再详细了解)



存储引擎也称之为表类型,一个库里边表的存储引擎可以不一样,

但是不建议混合使用存储引擎

(如果一个表支持事务一个表不支持,当撤消操作时 你懂得)

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1891583如需转载请自行联系原作者

Winthcloud