mysql logfile_MySQL的日志文件及配置

对MySQL中的6种日志文件,以及配置做简单的记录。

版本:MySQL 5.7

二进制日志(binlog)

记录所有引起数据变化的操作,用于备份和还原,使用主从复制时也需要开启binlog;

默认存放在datadir目录下,在刷新和重启数据库是会滚动二进制文件,产生新的binlog;

[mysql@localhost mysql]$ vi /etc/my.cnf

修改[mysqld]下的配置

#以下为 my.cnf 部分配置

[mysqld]

basedir=/home/mysql/mysql-5.7/

datadir=/home/mysql/mysql-5.7/data/

#序列号

server_id=1

#不指定log文件,默认mysqld-bin.00000* 作为文件名称;

log-bin=mysql-bin

#基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)

binlog_format=Row

#binlog每个日志文件大小

max-binlog-size = 500M

#设置binlog清理时间

expire_logs_days = 7

#binlog缓存大小

binlog_cache_size = 4m

#最大binlog缓存大小

max_binlog_cache_size = 512m

登录MySQL查看相关参数

mysql> show variables like '%log_bin%';

+---------------------------------+--------------------------------------------+

| Variable_name | Value |

+---------------------------------+--------------------------------------------+

| log_bin | ON |

| log_bin_basename | /home/mysql/mysql-5.7/data/mysql-bin |

| log_bin_index | /home/mysql/mysql-5.7/data/mysql-bin.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

+---------------------------------+--------------------------------------------+

6 rows in set (0.00 sec)

mysql> show variables like '%binlog%';

+--------------------------------------------+----------------------+

| Variable_name | Value |

+--------------------------------------------+----------------------+

| binlog_cache_size | 4194304 |

| binlog_checksum | CRC32 |

| binlog_direct_non_transactional_updates | OFF |

| binlog_error_action | ABORT_SERVER |

| binlog_format | ROW |

| binlog_group_commit_sync_delay | 0 |

| binlog_group_commit_sync_no_delay_count | 0 |

| binlog_gtid_simple_recovery | ON |

| binlog_max_flush_queue_time | 0 |

| binlog_order_commits | ON |

| binlog_row_image | FULL |

| binlog_rows_query_log_events | OFF |

| binlog_stmt_cache_size | 32768 |

| binlog_transaction_dependency_history_size | 25000 |

| binlog_transaction_dependency_tracking | COMMIT_ORDER |

| innodb_api_enable_binlog | OFF |

| innodb_locks_unsafe_for_binlog | OFF |

| log_statements_unsafe_for_binlog | ON |

| max_binlog_cache_size | 536870912 |

| max_binlog_size | 524288000 |

| max_binlog_stmt_cache_size | 18446744073709547520 |

| sync_binlog | 1 |

+--------------------------------------------+----------------------+

22 rows in set (0.00 sec)

事务日志(redo log / undo log )

innodb的事务日志包括redo log重做日志,提供前滚操作,undo log回滚日志,提供回滚操作;

保证事务一致性;其中innodb_flush_log_at_trx_commit的配置可控制commit是否刷新log buffer是否刷新到磁盘

当设置为1的时候,事务每次提交都会将log buffer中的日志写入os buffer并调用fsync()刷到log file on disk中。这种方式即使系统崩溃也不会丢失任何数据,但是因为每次提交都写入磁盘,IO的性能较差。

当设置为0的时候,事务提交时不会将log buffer中日志写入到os buffer,而是每秒写入os buffer并调用fsync()写入到log file on disk中。也就是说设置为0时是(大约)每秒刷新写入到磁盘中的,当系统崩溃,会丢失1秒钟的数据。

当设置为2的时候,每次提交都仅写入到os buffer,然后是每秒调用fsync()将os buffer中的日志写入到log file on disk。

mysql> show variables like '%innodb%log%';

+----------------------------------+------------+

| Variable_name | Value |

+----------------------------------+------------+

| innodb_api_enable_binlog | OFF |

| innodb_flush_log_at_timeout | 1 |

| innodb_flush_log_at_trx_commit | 1 |

| innodb_locks_unsafe_for_binlog | OFF |

| innodb_log_buffer_size | 33554432 |

| innodb_log_checksums | ON |

| innodb_log_compressed_pages | ON |

| innodb_log_file_size | 134217728 |

| innodb_log_files_in_group | 2 |

| innodb_log_group_home_dir | ./ |

| innodb_log_write_ahead_size | 8192 |

| innodb_max_undo_log_size | 1073741824 |

| innodb_online_alter_log_max_size | 134217728 |

| innodb_undo_log_truncate | OFF |

| innodb_undo_logs | 128 |

+----------------------------------+------------+

15 rows in set (0.00 sec)

中继日志(relay-log)

从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件;

SQL线程读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致;

mysql> show variables like '%relay_log%';

+---------------------------+------------------------------------------------------+

| Variable_name | Value |

+---------------------------+------------------------------------------------------+

| max_relay_log_size | 0 |

| relay_log | |

| relay_log_basename | /home/mysql/mysql-5.7/data/localhost-relay-bin |

| relay_log_index | /home/mysql/mysql-5.7/data/localhost-relay-bin.index |

| relay_log_info_file | relay-log.info |

| relay_log_info_repository | FILE |

| relay_log_purge | ON |

| relay_log_recovery | OFF |

| relay_log_space_limit | 0 |

| sync_relay_log | 10000 |

| sync_relay_log_info | 10000 |

+---------------------------+------------------------------------------------------+

11 rows in set (0.00 sec)

错误日志(mysql_error)

MySQL服务启动和关闭过程中的信息以及其它运行中的错误和警告信息;

log_error_verbosity:1 错误信息;2 错误信息、告警信息; 3:错误信息、告警信息、通知信息;

修改[mysqld]下的配置

#以下为 my.cnf 部分配置

[mysqld]

#错误日志目录配置

log-error=/home/mysql/mysql-5.7/logs/mysql_error.log

mysql> show variables like 'log_error%';

+---------------------+--------------------------------------------+

| Variable_name | Value |

+---------------------+--------------------------------------------+

| log_error | /home/mysql/mysql-5.7/logs/mysql_error.log |

| log_error_verbosity | 3 |

+---------------------+--------------------------------------------+

2 rows in set (0.00 sec)

一般日志(general_log)

记录SQL操作的 DDL / DML 日志,记录信息非常简单,但包括完整的SQL语句;

开启general_log会产生非常庞大的日质量,一般不建议开启;

#以下为 my.cnf 部分配置

[mysqld]

#一般日志开启 默认关闭

general_log=on

#一般日志文件路径

general_log_file=/tmp/mariadb_general_log.log

mysql> show variables like '%general%';

+------------------+------------------------------+

| Variable_name | Value |

+------------------+------------------------------+

| general_log | ON |

| general_log_file | /tmp/mariadb_general_log.log |

+------------------+------------------------------+

2 rows in set (0.00 sec)

慢查询日志(slow_query_log)

记录所有执行超过long_query_time设置的SQL语句;

可以通过slow_query_log分析出系统中SQL语句的存在的问题,方便我们进行优化;

#以下为 my.cnf 部分配置

[mysqld]

#慢查询SQL时间设置(秒)

long_query_time=1

#开启慢查询SQL日志 默认 OFF

slow-query-log=ON

#慢查询日志文件路径

slow-query-log-file=/home/mysql/mysql-5.7/logs/mysql-slow.log

mysql> show variables like '%slow_query_log%';

+---------------------+-------------------------------------------+

| Variable_name | Value |

+---------------------+-------------------------------------------+

| slow_query_log | ON |

| slow_query_log_file | /home/mysql/mysql-5.7/logs/mysql-slow.log |

+---------------------+-------------------------------------------+

2 rows in set (0.01 sec)

结尾

登录服务器查询相关日志还是比较麻烦的,所以可以使用ELK+Filebeat对一般日志、错误日志、慢查询日志进行收集,从而进行分析。后续我会更新ELK7+Beat的分布式日志收集方案的搭建教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值