开发人员必须会的mysql日志查看

作为一名开发人员,基本都会和mysql打打交道。(有人说我用sqlserver,好吧,你可以飘过了)

会用日志,有利于我们找出自己开发代码里,不良的sql语句调用。

第一弹:mysql日志查看第一弹

1.首先确认你日志是否启用了
mysql>show variables like ‘log_bin’;
2.如果启用了,即ON
那日志文件就在mysql的安装目录的data目录下
3.怎样知道当前的日志
mysql> show master status;

4.看二进制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail

show variables like 'log_bin';

+—————+——-+
| Variable_name | Value |
+—————+——-+
| log_bin | ON |
+—————+——-+
1 row in set (0.00 sec)

mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
在mysql的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了。
例如:#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=#Enter a name for the query log file. Otherwise a default name will be used.
#log=#Enter a name for the error log file. Otherwise a default name will be used.
log-error=#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉
查看命令:①show variables like ‘log_%’;查看所有的log命令
②show variables like ‘log_bin’;查看具体的log命令

mysql> show variables like 'log_%';

+———————————+—————-+
| Variable_name | Value |
+———————————+—————-+
| log_bin | ON |
| log_bin_trust_function_creators | OFF |
| log_bin_trust_routine_creators | OFF |
| log_error | /log/error.log |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_queries | ON |
| log_warnings | 1 |
+———————————+—————-+
9 rows in set (0.00 sec)

mysql> show variables like ‘log_error’;
+—————+—————-+
| Variable_name | Value |
+—————+—————-+
| log_error | /log/error.log |
+—————+—————-+
1 row in set (0.01 sec)

第二弹:更方便的日志记录

将日志写在log文件里
my.cnf
在[mysqld] 中輸入 #log

log-bin=mysql-bin
log-error=/log/error.log
#log=/log/mysql.log  
 
slow_query_log=true  
slow_query_log_file = "/var/lib/mysql/rh64-slow.log"  
long_query_time=1  
log-queries-not-using-indexes=true

140219 12:14:57 [ERROR] Could not use /log/mysql.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.

经过一番搜索,最后的结论是权限问题

用系统root用户,把log这个目录修改成777

chmod -R 777 /log/

重启动,就好了。(根本不需要在log目录下单独创建mysql.log这样的文件,系统会自动生成的)

查看下mysql.log

3 Query select @@version_comment limit 1
140219 12:30:06 3 Query show variables like ‘log_%’
140219 12:30:35 3 Query show variables like ‘log_bin’
140219 12:30:40 3 Query show variables like ‘log_error’
140219 12:32:50 4 Connect root@localhost on
4 Query SET CHARACTER SET ‘utf8’
4 Query SET collation_connection = ‘utf8_general_ci’
4 Query SHOW PLUGINS
4 Init DB ad
4 Query SELECT * FROM `area`
LIMIT 0, 30

所有的mysql底层执行,都会被执行。

这样太有利于我们优化自己的sql语句了。

没有找到如何让日志按天切割。

简单的处理办法是写个脚本,每天夜里12点执行
mv mysql.log a.log //移动日志
/opt/lampp/bin/mysqladmin -u admin -p flush-logs 刷新日志

不过基本上都是调试的时候,监测服务器可能有占mysql资源的语句的时候,才用。不需要天天记录,那样mysql速度会变慢。所以这个需求基本不需要了。

手工flush-logs 即可。这样比来回重启mysql要省事一点儿。


This entry was posted in PHP, 数据库 and tagged , , , , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/mysql-log-set/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.
2020.03.24 评论已经全局关闭,有事加QQ聊天