前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据库或日志中时间差8个小时的解决方式及慢查询配置

MySQL数据库或日志中时间差8个小时的解决方式及慢查询配置

作者头像
码客说
发布2023-09-26 08:19:43
1.8K0
发布2023-09-26 08:19:43
举报
文章被收录于专栏:码客

前言

日期差8个小时有两种情况

  • 日志中比实际早8个小时
  • 数据库中日期比实际早8个小时

查看系统时区

首先先保证系统的时区是正确的。

在Linux系统中,你可以使用以下命令来查看当前系统时区:

代码语言:javascript
复制
timedatectl

如果需要更改系统时区,你可以使用以下命令:

代码语言:javascript
复制
sudo timedatectl set-timezone Asia/Shanghai

日志中时间异常

在MySQL中设置了慢查询日志,但是日志中的时间都慢了8小时,怀疑是时区的问题。

慢查询日志差8个小时

代码语言:javascript
复制
show variables like '%log_time%';

需要在MySQL的配置文件my.cnf中添加以下行:

代码语言:javascript
复制
[mysqld]
log_timestamps=SYSTEM

更改了时区设置后,可能需要重新启动MySQL服务才能使更改生效。

代码语言:javascript
复制
service mysqld restart

数据库中时间异常

查询当前时间

代码语言:javascript
复制
select now();

如果获取的时间正确,则无需修改,如果不对的化进行如下修改。

确保MySQL服务器的时区设置正确。

你可以使用以下SQL语句来查看当前时区设置:

代码语言:javascript
复制
SELECT @@global.time_zone, @@session.time_zone;

结果

注意

默认是使用系统的时区,如果系统的时区设置时没有问题的则无需修改。

如果不想修改系统的时区,只修改MYSQL服务的时区,可以使用以下命令来更改它:

代码语言:javascript
复制
SET GLOBAL time_zone = '+08:00';
SET time_zone = '+08:00';

这时再查看

如需要注意的是,以上修改时区的操作只对当前会话有效。

果您需要在全局范围内修改默认时区,需要在MySQL的配置文件my.cnf中添加以下行:

代码语言:javascript
复制
[mysqld]
default_time_zone = "+08:00"

更改了时区设置后,可能需要重新启动MySQL服务才能使更改生效。

代码语言:javascript
复制
service mysqld restart

慢查询配置

查询Mysql版本

代码语言:javascript
复制
select version();

或者

代码语言:javascript
复制
mysql --version

获取现在的配置

代码语言:javascript
复制
show variables like '%slow%';
show variables like 'long_query_time';

开启

代码语言:javascript
复制
set global long_query_time=3;
set global slow_query_log=1;

关闭

代码语言:javascript
复制
set global slow_query_log=0;

创建文件

代码语言:javascript
复制
cd /var/log/
mkdir mysql
cd mysql
vi mysql-slow.log

设置权限

代码语言:javascript
复制
chmod a+w /var/log/mysql/mysql-slow.log

打开配置文件

代码语言:javascript
复制
vi /etc/my.cnf

找到[mysqld]下面加上

代码语言:javascript
复制
slow_query_log = 1 
slow-query-log-file = /var/log/mysql/mysql-slow.log 
long_query_time = 3

其中

long_query_time = 3中的3表示查询超过3秒才记录;

清空日志后慢查询就不会继续写入了,

要想在不重启数据库的前提下能写入,可以重新设置下变量才能继续写入

代码语言:javascript
复制
set global slow_query_log=0;
set global slow_query_log=1;

慢查询分析

代码语言:javascript
复制
mysqldumpslow /var/log/mysql/mysql-slow.log

结果会把出现的次数,总用时、平均用时都显示出来

未使用索引日志

查看是否记录未使用索引的查询

代码语言:javascript
复制
show variables like 'log_queries_not_using_indexes';

配置

代码语言:javascript
复制
SET GLOBAL log_queries_not_using_indexes=1

在完成设置后,请使用命令

代码语言:javascript
复制
FLUSH LOGS;

刷新MySQL日志,以便将更改保存到磁盘上的日志文件中。

注意

未使用索引的日志建议关闭,因为无论查询时间多长的sql,都会记录在日志中。 这个配置和慢查询的配置是并集的关系,即如果两个都开启,所有的慢查询和未使用索引的SQL都将会被记录。

关闭

代码语言:javascript
复制
SET GLOBAL log_queries_not_using_indexes=0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 查看系统时区
  • 日志中时间异常
  • 数据库中时间异常
  • 慢查询配置
  • 未使用索引日志
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档