MySQL日志小结
文章目录
- MySQL日志小结
-
- 事务日志 transaction log
- 错误日志
- 通用日志
- 慢查询日志
- 中继日志
- 二进制日志
-
- 二进制日志记录格式
- 二进制日志相关的服务器变量
- 二进制日志相关配置
- mysqlbinlog : 二进制日志的客户端命令工具
- 二进制日志时间的格式
- 清除指定二进制日志
事务日志 transaction log
事务日志的写入类型为"追加",因此其操作为"顺序IO";通常也被称为:预写日志(write aheadlogging)
事务日志文件:ib_logfile0、ib_logfile1
[1]事务型存储引擎自行管理和使用,建议和数据文件分开存放
redo log
undo log
[2]InnoDB事务日志相关配置:
MariaDB [hellodb]> show variables like '%innodb_log%';
+
| Variable_name | Value |
+
| innodb_log_block_size | 512 |
| innodb_log_buffer_size | 8388608 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
+
5 rows in set (0.00 sec)
[3]innodb_flush_log_at_trx_commit
说明:设置1,同时sync_binlog=1表示最高级别的容错
innodb_flush_log_at_trx_commit的值确定是否可以使用SET语句重置此变量
- 1默认情况下,日志缓冲区将写入日志文件,并在每次事务后执行刷新到磁盘。
这是完全遵守ACID特性。
- 0提交时没有任何操作;而是每秒执行一次日志缓冲区写入和刷新。
这样可以提供更好的性能,单服务器崩溃可能丢失最后一秒的事务。
- 2每次提交后都会写入日志缓冲区,但每秒都会进行一次刷新。
性能比0略好一些,但操作系统停电可能导致最后一秒的交易丢失。
[4]图示
![linux进阶-MySQL日志小结_第1张图片](http://img.e-com-net.com/image/info8/868b7521987f4374924ef12ef9f2d1eb.jpg)
[5]日志优化
事务日志建议放在单独的一块磁盘上
vim /etc/my.cnf
[mysqld]
innodb_log_group_home_dir=/yourpath
systemctl restart mariadb
错误日志
mysqld启动的关闭过程中输出的事件信息
mysqld运行中产生的错误信息
event scheduler运行一个event时产生的日志信息
在主从复制架构中的从服务器上启动从服务器线程时产生的信息
[1]错误日志相关配置
SHOW GLOBAL VARIABLES LIKE 'log_error'
[2]错误文件相关配置
log_error=/PATH/TO/LOG_ERR_FILE
[3]是否记录警告信息至错误日志文件
log_wrining=1 默认值为1
通用日志
通用日志:记录对数库的通用操作,包括错误的SQL语句
通用日志相关配置
general_log=OFF
general_log_file=HOSTNAME.log
log_output=TABLE|FILE|NONE
慢查询日志
慢查询日志:记录执行查询时长超出指定时长的操作
[1]慢查询相关配置
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
log_queries_not_using_indexes=ON
log_slow_rate_limit=1
log_slow_verbosity=query_plan,explain
log_slow_queries = OFF 同slow_query_log
[2]范例
MariaDB [bokebi]> set global slow_query_log=on;
Query OK, 0 rows affected (0.01 sec)
MariaDB [bokebi]> show global variables like 'slow_query_log%';
+
| Variable_name | Value |
+
| slow_query_log | ON |
+
2 rows in set (0.00 sec)
MariaDB [bokebi]> show global variables like 'long_query_time';
+
| Variable_name | Value |
+
| long_query_time | 10.000000 |
+
1 row in set (0.00 sec)
[3]查询分析参数
MariaDB [bokebi]> show variables like 'profiling';
+
| Variable_name | Value |
+
| profiling | OFF |
+
1 row in set (0.00 sec)
[4]查看使用过的命令
MariaDB [bokebi]> set profiling=1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [bokebi]> select @@profiling;
+
| @@profiling |
+
| 1 |
+
1 row in set (0.00 sec)
MariaDB [bokebi]> show profiles;
+
| Query_ID | Duration | Query |
+
| 1 | 0.00008978 | select @@profiling |
+
1 row in set (0.00 sec)
根据ID就可以找到某条语句的执行过程
MariaDB [bokebi]> show profile for query 2;
+
| Status | Duration |
+
| starting | 0.000020 |
| checking permissions | 0.000003 |
| Opening tables | 0.000002 |
| After opening tables | 0.000003 |
| init | 0.000006 |
| optimizing | 0.000004 |
| executing | 0.000006 |
| end | 0.000002 |
| query end | 0.000002 |
| closing tables | 0.000001 |
| freeing items | 0.000002 |
| updating status | 0.000004 |
| cleaning up | 0.000001 |
+
13 rows in set (0.00 sec)
中继日志
主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事件
二进制日志
记录导致数据改变或潜在导致数据改变的SQL语句
记录已提交的日志
不依赖于存储引擎类型
功能:通过"重放"日志文件中的事件来生成数据副本
注意:建议二进制日志和数据文件分开存放
二进制日志记录格式
[1]二进制日志记录三种格式
- 基于"语句"记录:statement,记录语句,默认模式。
- 基于"行"记录:row,记录数据,日志量较大。
- 混合模式:mixed,让系统自行判定该基于哪种方式进行
[2]格式配置
show variables like 'binlog_format'
二进制日志相关的服务器变量
[1]临时启用
set log_bin=ON
[2]写到配置文件
vim /etc/my.cnf
[mysqld]
log_bin=/yourpath
[3]其他的配置
binlog_format=STATEMENT|ROW|MIXED
max_binlog_size=1073741824
说明:文件达到上限时的大小未必为指定的精确值
sync_binlog=1|0
expire_logs_days=N
二进制日志相关配置
[1]查看mariadb自行管理使用中的二进制日志文件列表,及大小。
SHOW {BINARY | MASTER} LOGS
[2]查看使用中的二进制日志文件
SHOW MASTER STATUS
[3]查看二进制文件中的指定内容
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
show binlog events in 'mysql-bin.000001' from 6516 limit 2,3
mysqlbinlog : 二进制日志的客户端命令工具
[1]命令格式
mysqlbinlog [OPTIONS] log_file…
时间格式:YYYY-MM-DD hh:mm:ss
[2]范例
mysqlbinlog
mysqlbinlog
[3]利用二进制重放数据库
mysqlbinlog mysql-bin.0000003 -v > testlog.sql
二进制日志时间的格式
use `mydb`;
SET TIMESTAMP=1446712300;
CREATE TABLE tb1 (id int, name char(30))
;
GTID:Global Transaction ID,mysql5.6以mariadb10以上版本专属属性:GTID
清除指定二进制日志
[1]purge命令
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
[2]范例
PURGE BINARY LOGS TO 'mariadb-bin.000003';
PURGE BINARY LOGS BEFORE '2017-01-23';
PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30';
[3]删除所有二进制日志,index文件重新记数
RESET MASTER [TO
[4]切换日志文件
FLUSH LOGS;
看到这条信息,首先谢谢您其次表示本次实验到这就完全结束了,欢迎下次光临!(~ ̄▽ ̄)~ |