MySQL日志文件

本文介绍了MySQL中的各种日志类型,包括错误日志、二进制日志、查询日志、慢查询日志和事务日志的功能及配置方法,并详细解释了它们如何帮助提升数据库性能。

查看系统设置:
show [ gloabl | session ] variables like ‘%word%’;

查看运行状态:
show [ gloabl | session ] status like ‘%word%’;

查看mysql版本:
[root@localhost ~ ]mysql -v
或者
mysql> status;
或者
mysql> select version();

MySQL日志文件:错误日志,二进制日志,查询日志,慢查询日志,事务日志

错误日志(Error Log):默认是开启的,文件通常的名称为localhost.err
一般包含以下几个方面:
1.服务器启动和关闭过程中的信息
2.服务器运行过程中的错误信息
3.事件调度器运行一个事件时产生的信息
4.在从服务器上启动服务器进程时产生的信息

查看全局系统设置中的错误日志信息:
mysql> show global variables like ‘%log_error%’;
这里写图片描述

log_error为错误日志文件路径
log_error_verbosity为错误日志级别
* 以上信息可以在my.cnf中添加更改 *

错误日志级别如下:
这里写图片描述

当数据库错误日志文件太多,管理员可以备份并删除,然后使用mysqladmin命令开启新的错误日志
[root@localhost ~ ] # mysqladmin -u root -p flush-logs


MySQl二进制日志(Binary log & Binary Log Index):

主要用于记录修改数据或者有可能引起数据改变的MySQL语句,并且记录了语句发生的所有变化操作等。
二进制日志记录功能需要在配置文件中修改“log-bin=file_name”或者“log-bin=file_path”如果不设置路径的话,默认是保存在/usr/local/mysql/data下。
查看二进制文件信息:
mysql> show global variables like ‘%log_bin%’;

* 二进制文件不开启不影响mysql的运行与操作,只是不能做主从复制了 *

系统文件中的其他参数:
max_binlog_size“可以设置binlog的最大存储上线。当日志达到该上线的时候,MySQL会重新创建一个日志开始记录。但是也有例外,比如在即将达到上线的时候,产生了一个较大的事务,超出了设置的最大上线。为了保证事务安全,MySQL不会将一个事务分开记录到两个binlog中。
mysql> set [ global | seesion ] max_binlog_size=NO.;
有些设置可以在mysql中修改,但是有些设置只有读的权限。所以,只读的设置只能在my.cnf配置文件中修改,然后重启mysqld服务生效。

binlog-do-db=db_name1“:只对某个数据库(db_name)做记录,其他数据库则被忽略。
binlog-ignore-db=db_name2“:只忽略对某个数据库(db_name)的记录

  • 在db_name1中对其他数据库执行的命令也被记录,在binlog-ignore-db=db_name2对其他数据库执行的命令也被忽略

查看二进制日志:
1.在mysql交互式的界面查看
mysql> show binary logs;

查看所有日志的二进制信息
mysql> show binlog events\G

查看指定日志的二进制信息
mysql> show binlog events in ‘binlog_name’\G

2.使用命令行查看二进制文件
因为二进制文件是不可以使用cat来查看的,所以需要使用专用的命令来查看
[ root@localhost data ]# mysqlbinlog binlog_name

删除二进制日志信息
数据库只要运行就会产生大量日志文件,如果长时间不清理,那些不用的日志就会浪费很多的磁盘空间。若要删除二进制日志需要做到如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:
1.根据文件或时间点来删除二进制日志:
mysql> purge { binary | master } logs { to log_name | before datetime_expr };
log_name:表示把这个文件之前的其他文件都删除掉,删除的日志不包括这个日志
datetime_expr:指定把这个时间点之前的二进制日志删除,也是删除的内容不包括这个时间点

2.删除所有的二进制日志(不建议使用,慎用)
mysql> reset master;


事务日志(redo日志)
事务日志是InnoDB特有的日志,可以帮助提高事务的效率。
使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录持久到磁盘上的事务日志中。而不用每次都将修改的数据本身持久到磁盘。
记录持久到事务日志之后,内存中被修改的数据在后台可以慢慢的刷回到磁盘
如果数据修改的记录已经持久化到事务日志中,但数据本身还没有写回到磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据,具体的恢复方式则视存储引擎而定。
事务日志采用追加的方式,只可增加,不可减少。因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。

事务提交过程:
一个事务,在没有提交的时候,产生的日志,记录到cache中;等到事务需要提交的时候,则把日志写入到磁盘。
可以在mysql中查看缓存大小mysql> show variables like ‘%binlog%’;

1.binlog_stmt_cache_size = 32768 当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句
2.binlog_format = [ ROW | STATEMENT | MIXED] :可以指定二进制日志的类型
ROW:基于行的复制(默认),仅记录哪条数据被修改了,缺点是会产生大量的日志,让日志暴涨,但是可以保证数据的精准性。
STATEMENT:基于SQL语句的复制,每一条会修改数据的sql语句会记录到binlog中。优点并不需要记录每一行的数据变化,减少了binlog日志量。缺点是在某些情况下会导致master-slave中的数据不一致。
MIXED:混合模式复制,交替使用行和语句,由mysql服务器自行判断
3.sync_binlog = NO. :设定做多少次写操作之后同步一次二进制日志到磁盘文件中,0表示不同步,1表示执行一条语句都会同步到二进制文件中。查看事务日志的定义:
mysql> show global variables like ‘%innodb_flush%’;
这里写图片描述

其中innodb_flush_log_at_trx_timeout | 1
在事务提交时,innodb是否同步日志从缓冲区到文件中
当值为1时(默认值),在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到刷新磁盘地操作,性能会很差造成大量的磁盘I/O,但是这种方法最安全。

当值为2时,每次提交事务都会写入日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有缓存的,所以这个写入并不能保证数据已经写入到物理磁盘。

当值为0时,日志缓存每秒一次地被写到日志文件,并且对日志文件做到刷新磁盘地操作,但是在一个事务提交之前不做任何操作。


慢查询日志(slowquerylog):
它对服务器性能地影响微乎其微,但是可以记录mysql服务器上执行了长时间查询地语句。可以帮助我们定位性能问题。MySQL 还提供了专门用来分析满查询日志的工具程序mysqldumpslow,用来帮助数据库管理人员解决可能存在的性能问题。
查看慢查询日志的定义:
mysql> show global variables like ‘%slow_query_log%’;
这里写图片描述
long_query_time = NO.    =====>设置慢查询时间
也可以通过my.cnf文件来修改慢查询的配置参数

慢查询分析mysqldumpslow
可以通过打开log文件查看得知哪些SQL执行效率低下。从日志中,可以发现查询时间超过long_query_time时间的query为慢查询,而小于long_query_time时间的没有出现在此日志中。
如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。mysqldumpslow对日志文件进行了分类汇总,显示汇总后摘要结果
进入log的存放目录,运行
[root@localhost data]# mysqldumpslow mysqld-slow.log


mysqldumpslow -s c -t 10 /database/mysql/slow-query.log
这会输出记录次数最多的10条SQL语句,其中:
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
例如:
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。


<think> 我们正在讨论MySQL日志文件访问权限的相关内容。根据用户的问题,需要关注如何设置和管理MySQL日志文件的访问权限,包括系统文件权限和数据库用户权限。 首先,结合之前的回答和引用内容,我们可以从以下几个方面展开: 1. MySQL日志类型及其默认存储位置(引用[1]提到慢日志路径,引用[3]和引用[5]提到错误日志路径) 2. 系统级文件权限设置(日志文件属主、权限位设置) 3. 数据库用户权限管理(引用[2]展示了用户创建和授权,但需结合日志管理权限) 4. 日志分析工具可能涉及的权限(如使用mysqlbinlog等工具,引用[4]提到了一些选项) 同时,注意引用[1]中关于慢日志配置的参数,我们可以将其与权限关联。 具体回答结构: 一、MySQL日志文件类型与默认路径 - 错误日志(/var/log/mysqld.log,引用[3][5]) - 慢查询日志(引用[1]中的slow_query_log_file) - 二进制日志(通常位于数据目录,如/var/lib/mysql) - 通用查询日志(一般也在数据目录或日志目录) 二、系统文件权限设置 - 日志文件应仅允许mysql用户和特定管理员访问 - 示例命令:设置慢查询日志权限 ```bash chown mysql:mysql /var/log/mysql/slow.log chmod 640 /var/log/mysql/slow.log # 用户读写,组用户读,其他无权限 ``` 三、数据库用户权限管理 - 查看日志的数据库权限(如SHOW BINARY LOGS需要REPLICATION SLAVE权限) - 修改日志配置的权限(如SET GLOBAL slow_query_log=1需要SYSTEM_VARIABLES_ADMIN权限) - 创建专用日志管理用户(类似引用[2]的方式,但授权不同) 四、安全注意事项 - 日志中可能包含敏感信息(如SQL语句中的密码) - 定期清理日志并设置合适权限 最后,生成相关问题。 注意:引用标记要自然,例如在提到错误日志路径时引用[3][5],慢日志配置引用[1]。 </think> ### MySQL日志文件访问权限详解 #### 一、日志类型与文件路径 1. **错误日志** - 默认路径:`/var/log/mysqld.log`(记录服务启动、运行错误等信息)[^3][^5] - 关键权限:需`mysql`用户读写权限 ```bash chown mysql:mysql /var/log/mysqld.log chmod 640 /var/log/mysqld.log # 用户读写,组读,其他无权限 ``` 2. **慢查询日志** - 配置参数(`my.cnf`): ```ini slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log # 自定义路径[^1] long_query_time = 2 # 超过2秒的查询被记录 ``` - 文件权限: ```bash chown mysql:mysql /var/log/mysql/slow.log chmod 640 /var/log/mysql/slow.log ``` 3. **二进制日志** - 默认路径:`/var/lib/mysql/binlog.XXXXXX` - 关键权限: ```bash chown mysql:mysql /var/lib/mysql/binlog.* chmod 600 /var/lib/mysql/binlog.* # 仅mysql用户可读写 ``` #### 二、数据库用户权限控制 1. **日志查看权限** ```sql -- 查看慢日志(需PROCESS权限) SHOW VARIABLES LIKE 'slow_query_log%'; -- 查看二进制日志(需REPLICATION SLAVE权限) SHOW BINARY LOGS; ``` 2. **专用日志管理用户创建** ```sql CREATE USER 'log_auditor'@'localhost' IDENTIFIED BY 'SecurePass!'; GRANT REPLICATION SLAVE, PROCESS, BINLOG_ADMIN ON *.* TO 'log_auditor'@'localhost' WITH MAX_QUERIES_PER_HOUR 100; -- 限制查询频率[^2] ``` #### 三、访问工具与权限要求 1. **mysqlbinlog工具** - 解析二进制日志需要文件读取权限[^4]: ```bash mysqlbinlog --start-position=1234 /var/lib/mysql/binlog.00001 ``` - 安全建议:通过`sudo`限制特定用户访问 ```bash sudo setfacl -m u:audit_user:r /var/lib/mysql/binlog.* ``` 2. **日志分析权限** - 使用`mysqldumpslow`分析慢日志需文件读取权限: ```bash mysqldumpslow -s t /var/log/mysql/slow.log ``` #### 四、安全最佳实践 1. **权限隔离原则** - 应用账户禁止授予`FILE`权限(防止读取日志文件) - 审计账户仅授予`SELECT`和`SHOW`权限 2. **日志加密存储** ```ini [mysqld] binlog_encryption = ON # MySQL 8.0+支持二进制日志加密 ``` 3. **自动化清理配置** ```sql SET GLOBAL expire_logs_days = 7; # 自动清理7天前的二进制日志[^1] ``` #### 五、访问故障排查 1. **权限拒绝错误处理** ```bash # 检查文件权限 ls -l /var/log/mysql/slow.log # 检查SELinux上下文 chcon -t mysqld_log_t /var/log/mysql/slow.log ``` 2. **密码恢复场景** 临时密码在错误日志中存储(需root权限访问)[^3][^5]: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值