时间异常
日期差8个小时有两种情况
- 日志中比实际早8个小时
- 数据库中日期比实际早8个小时
查看系统时区
首先先保证系统的时区是正确的。
在Linux系统中,你可以使用以下命令来查看当前系统时区:
1 | timedatectl |
确保时区正确
如果需要更改系统时区,你可以使用以下命令:
1 | sudo timedatectl set-timezone Asia/Shanghai |
日志中时间异常
在MySQL中设置了慢查询日志,但是日志中的时间都慢了8小时,怀疑是时区的问题。
慢查询日志差8个小时
1 | show variables like '%log_time%'; |
需要在MySQL的配置文件my.cnf
中添加以下行:
1 | [mysqld] |
更改了时区设置后,可能需要重新启动MySQL服务才能使更改生效。
1 | service mysqld restart |
数据库中时间异常
查询当前时间
1 | select now(); |
如果获取的时间正确,则无需修改,如果不对的化进行如下修改。
确保MySQL服务器的时区设置正确。
你可以使用以下SQL语句来查看当前时区设置:
1 | SELECT @@global.time_zone, @@session.time_zone; |
结果
注意
默认是使用系统的时区,如果系统的时区设置时没有问题的则无需修改。
如果不想修改系统的时区,只修改MYSQL服务的时区,可以使用以下命令来更改它:
1 | SET GLOBAL time_zone = '+08:00'; |
这时再查看
如需要注意的是,以上修改时区的操作只对当前会话有效。
果您需要在全局范围内修改默认时区,需要在MySQL的配置文件my.cnf中添加以下行:
1 | [mysqld] |
更改了时区设置后,可能需要重新启动MySQL服务才能使更改生效。
1 | service mysqld restart |
慢查询配置
查询Mysql版本
1 | select version(); |
或者
1 | mysql --version |
获取现在的配置
1 | show variables like '%slow%'; |
开启
1 | set global long_query_time=3; |
关闭
1 | set global slow_query_log=0; |
创建文件
1 | cd /var/log/ |
设置权限
1 | chmod a+w /var/log/mysql/mysql-slow.log |
打开配置文件
1 | vi /etc/my.cnf |
找到[mysqld]
下面加上
1 | slow_query_log = 1 |
其中
long_query_time = 3
中的3表示查询超过3秒才记录;
清空日志后慢查询就不会继续写入了,
要想在不重启数据库的前提下能写入,可以重新设置下变量才能继续写入
1 | set global slow_query_log=0; |
慢查询分析
1 | mysqldumpslow /var/log/mysql/mysql-slow.log |
结果会把出现的次数,总用时、平均用时都显示出来
未使用索引日志
查看是否记录未使用索引的查询
1 | show variables like 'log_queries_not_using_indexes'; |
配置
1 | SET GLOBAL log_queries_not_using_indexes=1 |
在完成设置后,请使用命令
1 | FLUSH LOGS; |
刷新MySQL日志,以便将更改保存到磁盘上的日志文件中。
注意
未使用索引的日志建议关闭,因为无论查询时间多长的sql,都会记录在日志中。
这个配置和慢查询的配置是并集的关系,即如果两个都开启,所有的慢查询和未使用索引的SQL都将会被记录。
关闭
1 | SET GLOBAL log_queries_not_using_indexes=0 |