作为一名开发人员,基本都会和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-error=#Enter a name for the update log file. Otherwise a default name will be used.
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉
查看命令:①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
2023.10.23发现centos7.9 上,slow_query_log=1 才会开启慢日志
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------+
| Variable_name | Value |
+---------------------+------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/rh64-slow.log |
+---------------------+------------------------------+
2 rows in set (0.00 sec)
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要省事一点儿。
You must be logged in to post a comment.
挺不错的哟,过来学习了