日志种类 | 作用 |
---|---|
错误日志 | 是mysql中记录mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障无法正常使用时,可以首先查看此日志。 |
二进制日志binlog | 记录了所有的DDL数据定义语言和DML数据操纵语言,但是不记录查询语句。此日志对于灾难恢复时的数据恢复有重要作用,Mysql的主从复制也基于二进制日志binlog |
查询日志 | 记录客户端的所有操作语句,而二进制日志不包含查询数据的sql语句(select)。 |
慢查询日志 | 记录执行时间超过long_query_time大小并且扫描记录数不小于min_examined_row_limit的所有SQL语句的日志,long_query_time默认10秒,最小为0,精度可以带微秒。 |
错误日志
mysql> show variables like 'log_error%';
+----------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------+----------------------------------------+
| log_error | /var/log/mysqld.log |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
+----------------------------+----------------------------------------+
###查看错误日志内容
[root@localhost ~]# tail -f /var/log/mysqld.log
二进制日志
mysql8 的配置文件/etc/my.cnf虽然没有明确开启二进制日志,但是默认是打开的。
###查看binlog日志文件
mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 | 59589 | No |
+---------------+-----------+-----------+
###查看当前mysql正在使用的binlog文件
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 59589 | | | |
+---------------+----------+--------------+------------------+-------------------+
###查看binlog中的内容help SHOW BINLOG EVENTS
###语法格式为:
###SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
mysql> show binlog events in 'binlog.000001' from 59367;
+---------------+-------+----------------+-----------+-------------+--------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-------+----------------+-----------+-------------+--------------------------------------------------------------------------------------+
| binlog.000001 | 59367 | Anonymous_Gtid | 1 | 59444 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000001 | 59444 | Query | 1 | 59589 | use `demo_01`; create index idx_seller_address on tb_seller(address) /* xid=17503 */ |
+---------------+-------+----------------+-----------+-------------+--------------------------------------------------------------------------------------+
mysql> show binlog events in 'binlog.000001' from 59367 limit 1;
在命令行通过mysqlbinlog命令查看二进制日志内容:mysqlbinlog 可以根据--start-position、--stop-position和-start-datetime、--stop-datetime等参数指定查看特定区间范围内的日志。
###binlog.index存储了binlog文件名字
[root@localhost mysql]# cat
./binlog.000001
[root@localhost mysql]# mysqlbinlog ./binlog.000001 | head -n7
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210418 22:46:24 server id 1 end_log_pos 125 CRC32 0x5b1473c4 Start: binlog v 4, server v 8.0.23 created 210418 22:46:24 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
配置mysqlbinlog
[root@localhost ~]# vim /etc/my.cnf
log_bin=mysqlbin
binlog_format=STATEMENT
###重启数据库,mysql会生成新的.index文件盒二进制日志文件
[root@localhost mysql]# systemctl restart mysqld
###再在mysql中查看
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000001 | 156 | | | |
+-----------------+----------+--------------+------------------+-------------------+
binlog的日志格式有三种:
格式 | 特点 |
---|---|
statement | 该日志格式在日志文件中记录的都是SQL语句,每一条对数据进行的修改的SQL都会记录在日志文件中。 |
row | 该日志格式在日志文件中记录的是每一行的数据变更,而不是sql语句。 |
mixed | 是目前mysql默认的日志格式,混合了statement和row两种格式,默认情况下采用statement,特殊情况用row记录。 |
binlog删除方式 | 特点 |
---|---|
Reset Master指令 | 删除全部binlog日志,删除之后,日志编号冲xxx.000001开始 |
purge master logs to 'mysqlbin.**' | 该命令将删除**编号之前的所有日志 |
purge master logs before 'yyyy-mm-dd hh24:mi:ss' | 该命令将删除日期之前的所有日志 |
--expire_logs_days=# | 参数作用设置日志的过期天数#,过了指定的天数后日志将会被自动删除, |
查询日志: 默认未开启,0关闭,1开启
[root@localhost ~]# vim /etc/my.cnf
general_log=1
general_log_file=mysql_query.log
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# ll /var/lib/mysql/mysql_query.log
-rw-r----- 1 mysql mysql 179 Apr 27 20:56 /var/lib/mysql/mysql_query.log
[root@localhost ~]# tail -f /var/lib/mysql/mysql_query.log
Time Id Command Argument
2021-04-28T00:57:28.468559Z 8 Connect root@localhost on using Socket
2021-04-28T00:57:28.470024Z 8 Init DB demo_01
2021-04-28T00:57:28.471211Z 8 Query show databases
2021-04-28T00:57:28.475535Z 8 Query show tables
2021-04-28T00:57:28.478800Z 8 Field List city
2021-04-28T00:57:28.491236Z 8 Field List country
2021-04-28T00:57:28.492906Z 8 Field List emp
2021-04-28T00:57:28.494630Z 8 Field List emp_logs
2021-04-28T00:57:28.497722Z 8 Field List tb_seller
2021-04-28T00:57:48.330378Z 8 Query show tables
2021-04-28T00:58:00.501282Z 8 Query select * from city
慢查询日志
###查看慢查询日志是否开启,超时
mysql> show variables like '%long_query%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql> show variables like '%slow_query%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
mysql> show variables like '%min_examined_row%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| min_examined_row_limit | 0 |
+------------------------+-------+
开启慢查询日志,设置时间3秒:
[root@localhost ~]# vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=slow_query.log
long_query_time=3
[root@localhost ~]# systemctl restart mysqld
常用命令 | 用处 |
---|---|
mysql | 连接mysql,-e在命令行执行sql |
mysqladmin | 管理命令 |
mysqlbinlog | 二进制日志查看命令 |
mysqldump | 导出命令 |
mysqlimport | 导入 |
source | 在mysql中加载sql文件 |
mysqlshow |