1.1 错误日志
MySQL的错误日志文件记录错误信息,还会记录mysqld进程的关闭和启动的信息,但也不是什么错误信息都会记录,只记录mysqld进程运行过程中发生的关键性错误。
错误日志的启动,可以在启动mysqld进程时,通过log-error选项来指定错误日志文件名和存放位置,或者my.ini配置文件中配置log-error参数,如果没有指定文件名的话,会自动生成一个[hostname].err文件保存在{datadir}文件夹下。
在删除错误日志后,会把错误日志重建到[hostname].err.old的文件夹下。删除日志可以使用使用flush logs。
错误日志默认位置数据目录DATADIR 指定的目录中
查看日志目录默认在data目录下
MariaDB [(none)]> show global variables like 'log_error';
+---------------+--------------------------------+
| Variable_name | Value |
+---------------+--------------------------------+
| log_error | /data/mysql10.2.11/maridb1.err |
+---------------+--------------------------------+
修改配置文件更改错误日志位置,增加以下参数
log_error = /data/log/mysql-error.log
重启mysql 服务
[root@www.cndba.cn mysql10.2.11]# service mysql restart
查看日志目录
MariaDB [(none)]> show global variables like 'log_error';
+---------------+---------------------------+
| Variable_name | Value |
+---------------+---------------------------+
| log_error | /data/log/mysql-error.log |
+---------------+---------------------------+
1.2 二进制日志
1.2.1 临时开启二进制日志
MariaDB [(none)]> set sql_log_bin=1;
MariaDB [(none)]> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
1.2.2 临时关闭二进制日志
MariaDB [(none)]> set sql_log_bin=0;
MariaDB [(none)]> show variables like 'sql_log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
1.2.3 开启日志
查看日志被关闭
MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
备份配置文件
cp /etc/my.cnf /etc/my.cnf-20171225
编辑配置文件
vi /etc/my.cnf
在[mysqld] 下增加
log-bin=mysql-bin #指定binlog的位置,默认在数据目录下,默认名为主机名后面跟“-bin”
重启mysql 服务
[root@www.cndba.cn ~]# service mysql restart
日志被开启
MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1.2.4 关闭日志
reset master 将删除日志索引文件中记录的所有binlog文件
MariaDB [(none)]> reset master;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 328 |
+------------------+-----------+
1 row in set (0.00 sec)
备份配置文件
cp /etc/my.cnf /etc/my.cnf-20171225
编辑文件/etc/my.cnf
vi /etc/my.cnf
[mysqld]
port = 3306
socket = /tmp/mysql.sock
#log-bin=mysql-bin
#binlog_format=mixed
重启mysql 服务
service mysql restart
查看日志被关闭
MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.07 sec)
1.2.5 查看二进制日志基本信息
mysql>show master status; 查看当前正在使用的二进制日志
mysql>show binlog events in 'mysql-bin.000001'; 查看二进制日志记录的事件[from position]
mysql>show binary logs; 查看所有二进制日志
mysql>purge binary logs to 'mysql-bin.000003'; 删除二进制日志
1.2.6 二进制位置
可以在/etc/my.cnf
log-bin=/data/mysql-bin #指定binlog的位置,默认在数据目录下,默认名为主机名后面跟“-bin”
1.2.7 日志的读取
mysql二进制日志数目
MariaDB [cndba]> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 664 |
+------------------+-----------+
mysqlbinlog [options] log-files
常用options(类似字节偏移数):
--start-position :开始位置
--stop-position :结束位置
--start-datetime 'yyyy-mm-dd hh:mm:ss' :开始时间
--stop-datetime 'yyyy-mm-dd hh:mm:ss' :结束时间
读取二进制内容
[root@www.cndba.cn ~]# mysqlbinlog /data/mysql10.2.11/mysql-bin.000001
[root@www.cndba.cn ~]# mysqlbinlog --start-position=465 --stop-position=664 --start-datetime='2017-12-15 10:00:00' --stop-datetime='2017-12-15 11:00:00' /data/mysql10.2.11/mysql-bin.000001
1.2.8 日志的删除
1.2.8.1 方法1 RESET MASTER;
解释:
该方法可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个以.000001为后缀新的二进制日志文件。
该语法一般只用在主从环境下初次建立复制时。
在主从复制进行过程中,该语句是无效的。
主从环境下的配置步骤:
a. 启动master和slave,开启replication(即复制)
b. 在master上运行一些测试的语句,看数据是否能够复制到 slave上面
c. 当复制运行正常的话,就在从上stop slave 然后执行 reset slave,去掉不需要的数据
d. 在master上面执行reset master 清除测试产生的数据
查看删除前日志
MariaDB [cndba]> system ls - ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 3543 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.000001
-rw-rw----. 1 mysql mysql 342 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.000002
-rw-rw----. 1 mysql mysql 38 Dec 15 11:41 /data/mysql10.2.11/mysql-bin.index
用RESET MASTER命令进行删除
MariaDB [cndba]> RESET MASTER;
查看删除后的日志
MariaDB [cndba]> system ls - ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 328 Dec 15 11:42 /data/mysql10.2.11/mysql-bin.000001
-rw-rw----. 1 mysql mysql 19 Dec 15 11:42 /data/mysql10.2.11/mysql-bin.index
1.2.8.2 方法2 PURGE MASTER LOGS:
方法2:PURGE MASTER LOGS
语法:
PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
实例:
PURGE BINARY LOGS TO 'mysql-bin.000002';
PURGE BINARY LOGS BEFORE '2017-12-15 11:53:59';
分别表示:删除mysql-bin.000002之前的日志(不包括mysql-bin.000002)
删除2014-04-28 23:59:59时间点之前的日志
注意事项:
在删除binlog日志同时,也会清理mysql-bin.index的文件记录,清理完后命令中指定的日志文件成为第一个。
主从架构下,如果复制正在进行中,执行该命令是安全的,例如slave正在读取我们要删除的log,该语句将什么也不会做,并返回一个错误;如果复制是停止的,我们删除了一个slave还未读取的日志,则复制重新建立连接时将会失败。
建议操作步骤:
a 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
b 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
c 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是最新的,这是清单上的最后一个日志。
d 备份您将要删除的所有日志。(这个步骤是自选的,但是建议采用。)
e 清理除目标日志之外的所有日志。
1.2.8.3 方法3 手动删除binlog日志文件
手动删除binlog日志文件
删除mysql-bin.000003 日志
[root@www.cndba.cn mysql10.2.11]# rm -rf mysql-bin.000003
[root@www.cndba.cn mysql10.2.11]# vi mysql-bin.index
./mysql-bin.000003
./mysql-bin.000004
删除./mysql-bin.000003 这一行
查看删除后的日志
MariaDB [(none)]> system ls - ltr /data/mysql10.2.11/mysql-bin*
-rw-rw----. 1 mysql mysql 328 Dec 15 11:58 /data/mysql10.2.11/mysql-bin.000004
-rw-rw----. 1 mysql mysql 19 Dec 15 11:58 /data/mysql10.2.11/mysql-bin.index
1.2.8.4 方法4:指定过期天数(expire_logs_days)
MariaDB [(none)]> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)
临时修改过期时间
MariaDB [(none)]> set global expire_logs_days = 60;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 60 |
+------------------+-------+
1 row in set (0.00 sec)
修改/etc/my.cnf 增加参数
expire_logs_days=60
重启mysql 服务生效
刷新日志查看,日志被清楚
MariaDB [(none)]> flush logs;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000006 | 371 |
+------------------+-----------+
3 rows in set (0.00 sec)
注意事项
在双机复制环境下,应确保过期天数不应小于从机追赶主机binlog日志的时间。
触发过期删除的条件
每次进行 LOG flush的时候会自动删除过期的日志。
触发log flush的条件为:
1. 重启mysql;
2. BINLOG文件大小达到参数max_binlog_size限制;
3. 手工执行命令。
1.3 查询日志
查询日志记录了客户端的所有语句,而二进制日志不包含只查询数据的语句
1.3.1 日志的位置和格式
默认位在数据目录 DATADIR 指定的目录下,默认文件名是host_name.log
修改配置文件/etc/my.cnf指定文件目录
log = {ON|OFF} #是否启用查询日志,该指令在mysq5.6中已废弃
general_log = {ON|OFF} #启动或关闭查询日志,默认是关闭的
general_log_file = /data/mysql10.2.11/mysql.log #指定查询日志的位置,默认在数据目录下
log_output = {TABLE|FILE|NONE} #指定存放查询日志的位置,可以放在文件中,也可以放在数据库的表中,放在表中比放在文件中更容易查看
1.3.2 日志的读取
[root@www.cndba.cn mysql10.2.11]# more data/mysql10.2.11/maridb1.log
/usr/local/mysql10.2.11/bin/mysqld, Version: 10.2.11-MariaDB-log (MariaDB Server). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
171215 14:50:14 10 Query show global variables like 'general_log'
171215 14:50:42 10 Query select * from cndba.cndba
171215 14:50:44 10 Quit
1.4 慢查询日志
说明:默认为关闭状态,记录下来查询时间超过设定时长的查询,这些查询日志将被慢查日志记录下来
1.4.1 文件位置和格式
默认位在数据目录 DATADIR 指定的目录下,默认文件名是host_name-slow.log
修改配置文件/etc/my.cnf指定文件目录 slow_query_log_file=/var/mysql/log/mysql_log.log
1.4.2 日志的读取
记录执行时间超过指定时间的执行语句
在配置文件 /etc/my.cnf 添加以下内容
slow_query_log=1 --开启慢查询
slow_query_log_file=/var/mysql/log/mysql_log.log --慢查询日志路径、
long_query_time=2 --慢查询语句执行时间阀值
log_query_not_using_indexes = {ON|OFF} #设定是否将没有使用索引的查询操作记录到慢查询日志
log_output = {TABLE|FILE|NONE} #定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为FILE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息
默认慢日志没有开启
MariaDB [(none)]> show variables like 'slow%';
+---------------------+------------------+
| Variable_name | Value |
+---------------------+------------------+
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | maridb1-slow.log |
+---------------------+------------------+
[root@www.cndba.cn mysql10.2.11]# vi /etc/my.cnf
slow_query_log=1
slow_query_log_file=/var/mysql/log/mysql_log.log
long_query_time=2
重启mysql服务
[root@www.cndba.cn mysql10.2.11]# service mysql restart
慢日志开启
MariaDB [(none)]> show variables like 'slow%';
+---------------------+------------------------------+
| Variable_name | Value |
+---------------------+------------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/mysql/log/mysql_log.log |
+---------------------+------------------------------+
查看慢日志记录
[root@www.cndba.cn log]# more /var/mysql/log/mysql_log.log
版权声明:本文为博主原创文章,未经博主允许不得转载。