日志滚动解决日志文件过大问题,比如我开启了general_log,这个日志呢是记录mysql服务器上面所运行的所有sql语句;比如我开启了mysql的慢查询。
1,查看一开log情况
- mysql> show global variables like '%log%';
- +---------------------------------+---------------------------------+
- | Variable_name | Value |
- +---------------------------------+---------------------------------+
- | back_log | 50 |
- | binlog_cache_size | 32768 |
- | binlog_format | MIXED |
- | expire_logs_days | 0 |
- | general_log | ON |
- | general_log_file | /usr/local/mysql/mysql.log |
- | log | ON |
- | log_bin | ON |
- | log_bin_trust_function_creators | OFF |
- | log_bin_trust_routine_creators | OFF |
- | log_error | /var/log/mysqld.log |
- | log_output | FILE |
- | log_queries_not_using_indexes | OFF |
- | log_slave_updates | OFF |
- | log_slow_queries | ON |
- | log_warnings | 1 |
- | max_binlog_cache_size | 4294963200 |
- | max_binlog_size | 1073741824 |
- | max_relay_log_size | 0 |
- | relay_log | |
- | relay_log_index | |
- | relay_log_info_file | relay-log.info |
- | relay_log_purge | ON |
- | relay_log_space_limit | 0 |
- | slow_query_log | ON |
- | slow_query_log_file | /usr/local/mysql/mysql-slow.log |
- | sql_log_bin | ON |
- | sql_log_off | OFF |
- | sql_log_update | ON |
- | sync_binlog | 0 |
- +---------------------------------+---------------------------------+
- 30 rows in set (0.00 sec)
上面主要有三个日志文件,mysql.log,mysqd.log,mysql-slow.log,除了mysqld.log不能通过mysqladmin flush-logs来刷新日志外,其他的都可以,mysqld.log是服务器启动程序mysqld产生的。
2,生成日志刷新用户
- mysql> GRANT RELOAD ON *.* TO 'log'@'localhost' IDENTIFIED BY 'log';
- Query OK, 0 rows affected (0.07 sec)
- mysql> flush privileges;
- Query OK, 0 rows affected (0.03 sec)
用root账户登录进去,添加一个log的用户。分开清楚一点。
3,日志滚动脚本,只保留一个星期的日志
- [root@linux ~]# vim log.sh //添加以下内容
- #!/bin/sh
- # log refresh
- if [ -f $1 ];
- then
- echo "refresh ok" 1>&2
- else
- echo "log file do not exist;"
- exit 1
- fi
- LOG=$1
- DB_USER="log"
- DB_PASS="log"
- # Others vars
- DATE=`date +%w`
- BIN_DIR="/usr/local/mysql/bin"
- mv ${LOG} ${LOG}_${DATE}
- ${BIN_DIR}/mysqladmin -ulog -plog flush-logs
添加可执行权限chmod +x log.sh
脚本很简单,不过有一点要解释一下,就是mv ${LOG} ${LOG}_${DATE},第一周会产生7个文件,第二周会覆盖上周的,星期一覆盖星期一,星期二覆盖星期二,以此内推。
4,日志滚动
- [root@linux ~]# ./log.sh /usr/local/mysql/mysql.log
- refresh ok
- [root@linux ~]# ls /usr/local/mysql/ |grep mysql
- mysql.log
- mysql.log_1
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/mysql/1419.html