何时、如何开启 MySql 日志?

假如你是一名 web 开发人员,如果你想调试你的应用或提升其性能的话,那你需要去参考各种日志文件。日志是开始故障排除最好的选择。就著名的 MySql 数据库服务器而言,你需要参考以下日志文件:本文未涉及到二进制日志。二进制日志要求非常高的服务器硬件配置,,而且只是在特定场景下(比如,主从复制,主从安装,某些数据的恢复操作)有用。否则的话,它就是一名实实在在的 "性能杀手"。

关于 MySql 日志的官方文档参考 。

通过 MySql 配置启用日志日志相关参数位于 [mysqld] 部分。编辑 MySql 配置文件:nano /etc/mysql/my.cnf以上是 Debian 下的默认安装目录,其他 Linux 发布版可能不太一样,这个文件中 MySql 服务器的参数如下:# * Logging and Replication## Both location gets rotated by the cronjob.# Be aware that this log type is a performance killer.# As of 5.1 you can enable the log at runtime!#general_log_file = /var/log/mysql/mysql.log#general_log = 1## Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.## Here you can see queries with especially long duration#log_slow_queries = /var/log/mysql/mysql-slow.log#long_query_time = 2#log-queries-not-using-indexes## The following can be used as easy to replay backup logs or for replication.# note: if you are setting up a replication slave, see README.Debian about# other settings you may need to change.#server-id = 1#log_bin = /var/log/mysql/mysql-bin.logexpire_logs_days = 10max_binlog_size = 100M#binlog_do_db = include_database_name#binlog_ignore_db = include_database_nameMySql 安装默认是不启用所有日志文件的(Windows 平台下的 error 日志除外)。Debian 安装 MySql 默认是将 error 日志发送给 syslog。error 日志根据 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 配置,error 日志推送给 syslog:[mysqld_safe]syslog这是推荐的做法。如果你由于某种原因,不想讲 error 日志推给 syslog,将 /etc/mysql/conf.d/mysqld_safe_syslog.cnf 文件中的上述行注掉,或者直接删除掉这个文件,然后在 /etc/mysql/my.cnf 中添加以下行:[mysqld_safe]log_error=/var/log/mysql/mysql_error.log[mysqld]log_error=/var/log/mysql/mysql_error.log一般查询日志要启用一般查询日志,将相关行取消注释(或者添加)即可:general_log_file = /var/log/mysql/mysql.loggeneral_log = 1慢查询日志要启用慢查询日志,将相关行取消注释(或者添加)即可:log_slow_queries = /var/log/mysql/mysql-slow.loglong_query_time = 2log-queries-not-using-indexes配置修改后重启 MySql 服务器以上方法要求服务重启才能生效:service mysql restart或者使用 systemd:

systemctl restart mysql.service

运行时启用日志MySql 5.1 之后我们可以在运行时启用或者禁用日志。运行时启用日志,登录 MySql 客户端(mysql -u root -p)然后执行:SET GLOBAL general_log = ‘ON’;SET GLOBAL slow_query_log = ‘ON’;运行时禁用日志,登录 Mysql 客户端(mysql -u root -p)后执行:SET GLOBAL general_log = ‘OFF’;SET GLOBAL slow_query_log = ‘OFF’;

这种方式适用于所有平台并且不需要重启服务。

显示日志结果error 日志按以上办法设置以后,你可以通过以下命令显示 error 日志:tail -f /var/log/syslog备注:如果你没有配置 error 日志文件,MySql 将把 error 日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}.err 的文件中。普通查询日志按以上办法设置以后,你可以通过使用以下命令来显示普通日志:tail -f /var/log/mysql/mysql.log备注:如果你没有配置普通日志文件,MySql 将把普通日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}.log 的文件中。慢查询日志按以上办法设置以后,你可以通过使用以下命令来显示慢查询日志:tail -f /var/log/mysql/mysql-slow.log

备注:如果你没有配置慢查询日志文件,MySql 将把普通日志保存在数据目录(通常是 /var/lib/mysql)下的一个名为 {host_name}-slow.log 的文件中。

循环日志别忘了滚动日志,否则的话日志文件可能会变得很庞大。在 Debian(以及 Debian 派生系列诸如 Ubuntu 等)系统,MySql 初始安装之后,循环日志就已经使用了 logrotate:nano /etc/logrotate.d/mysql-server对于其他 Linux 发行版,可能需要做一些改动:# – I put everything in one block and added sharedscripts, so that mysql gets# flush-logs’d only once.# Else the binary logs would automatically increase by n times every day.# – The error log is obsolete, messages go to syslog now./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log {dailyrotate 7missingokcreate 640 mysql admcompresssharedscriptspostrotatetest -x /usr/bin/mysqladmin || exit 0# If this fails, check debian.conf!MYADMIN="/usr/bin/mysqladmin –defaults-file=/etc/mysql/debian.cnf"if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then# Really no mysqld or rather a missing debian-sys-maint user?# If this occurs and is not a error please report a bug.#if ps cax | grep -q mysqld; thenif killall -q -s0 -umysql mysqld; thenexit 1fielse$MYADMIN flush-logsfiendscript}天才是百分之一的灵感加上百分之久十久的努力

何时、如何开启 MySql 日志?

相关文章:

你感兴趣的文章:

标签云: