others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

mysql 日志与常用命令

访问量:1146 创建时间:2021-04-28

mysql日志

日志种类 作用
错误日志 是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 连接mysql,-e在命令行执行sql
mysqladmin 管理命令
mysqlbinlog 二进制日志查看命令
mysqldump 导出命令
mysqlimport 导入
source 在mysql中加载sql文件
mysqlshow
登陆评论: 使用GITHUB登陆