Mysql开启日志并按天进行分割
背景公司近期需要做安全评估,然后要针对数据库进行扫描整改,说需要开启日志功能,并需要留存6个月。然后想的是开启日志的话只需要修改数据库的配置文件就可以了,但是这样的话只会生成一个文件并且处于追加写入。这样的话日志文件前期还好说,内存占用小;但是到了后期日志,文件会占用很多的内存,并且如果需要查看日志文件的话会消耗很多服务器内存、性能等,并且删除超过6个月的文件内容也不是很方便,所以考虑之后选择把日
·
背景
公司近期需要做安全评估,然后要针对数据库进行扫描整改,说需要开启日志功能,并需要留存6个月。然后想的是开启日志的话只需要修改数据库的配置文件就可以了,但是这样的话只会生成一个文件并且处于追加写入。这样的话日志文件前期还好说,内存占用小;但是到了后期日志,文件会占用很多的内存,并且如果需要查看日志文件的话会消耗很多服务器内存、性能等,并且删除超过6个月的文件内容也不是很方便,所以考虑之后选择把日志文件按天分割放入日志文件夹中。
准备工作
- Linux系统的定时任务crond
- 针对mysql进行配置
- 存放日志文件的路径
一、mysql配置工作
需要确定要配置的是哪种日志?
mysql日志文件包含:
- 错误日志:记录启动、运行或停止mysqld时出现的问题。
- 通用日志:记录建立的客户端连接和执行的语句。
- 更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。
- 二进制日志:记录所有更改数据的语句。还用于复制。
- 慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
- Innodb日志:innodb redo log
这里以通用日志来演示操作。
创建日志文件、日志文件夹、定时执行脚本
创建日志文件夹:mkdir /home/runtrend/iptv/fresh/log/mysql/mysql_logs
创建日志文件:touch /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log
创建定时任务脚本:touch /home/runtrend/iptv/fresh/log/mysql/mysqllog.sh
赋予执行权限
赋予日志文件夹权限:chmod 777 /home/runtrend/iptv/fresh/log/mysql/mysql_logs
赋予定时任务脚本权限:chmod 774 /home/runtrend/iptv/fresh/log/mysql/mysqllog.sh
赋予日志文件权限:chmod 660 /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log
开启通用日志
# 查看通用日志状态
MariaDB [softterminal]> show variables like "%general%";
+------------------+---------------------------------------------------------------------+
| Variable_name | Value |
+------------------+---------------------------------------------------------------------+
| general_log | ON |# ON是打开状态,默认是OFF关闭状态
| general_log_file | /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log |# 日志存放文件路径
2 rows in set (0.003 sec)
----------------------------------------------------我是分隔线---------------------------------------------------
# 查看日志写入类型,写入类型有文件或数据表两种格式,由参数logoutput控制。需要需要写入数据表可以修改成table
# 如果设置log_output=table的话,则日志结果会记录到名为gengera_log的表中,这表的默认引擎是CSV
# 也可以设置成我全都要,及设置log_output参数为“table,file”两种;命令:set global log_output=“file,table”;
# 一般情况下用的最多的就是file文件类型,所以我们这里就不进行修改了。
MariaDB [softterminal]> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
1 row in set (0.001 sec)
----------------------------------------------------我是分隔线---------------------------------------------------
#开启通用日志
MariaDB [softterminal]> set global general_log="ON";
MariaDB [softterminal]> set global general_log_file="/home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log";
# 开启通用日志之后就需要退出,进行重启mysql服务
重启mysql服务命令:systemctl reload mysqld.service
# 再次进入mysql数据库,查看通用日志状态
MariaDB [softterminal]> show variables like "%general%";
+------------------+---------------------------------------------------------------------+
| Variable_name | Value |
+------------------+---------------------------------------------------------------------+
| general_log | ON |# ON是打开状态,默认是OFF关闭状态
| general_log_file | /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log |# 日志存放文件路径
2 rows in set (0.003 sec)
#如果你遇到下面类似问题,这个是因为权限问题导致。也就是没有进行上面的赋予执行权限
MariaDB [softterminal]> set global general_log_file="/home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log";
ERROR 1231 (42000): Variable 'general_log_file' can't be set to the value of '/home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log"'
# 关闭通用日志
MariaDB [softterminal]> set global general_log="OFF";
# 关闭之后,退出mysql,重启mysql服务
# 再次进入mysql数据库,查看通用日志状态
MariaDB [softterminal]> show variables like "%general%";
+------------------+---------------------------------------------------------------------+
| Variable_name | Value |
+------------------+---------------------------------------------------------------------+
| general_log | OFF |# ON是打开状态,默认是OFF关闭状态
| general_log_file | /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log |# 日志存放文件路径
2 rows in set (0.003 sec)
二、创建定时执行脚本
执行定时脚本:vim /home/runtrend/iptv/fresh/log/mysql/mysqllog.sh
根据需要修改自己的日志文件路径
#!/bin/bash
time=`date -d yesterday +"%Y-%m-%d"` #确定昨天的日期
#time=`date -d yesterday +"%Y-%m-%d-%H-%M"` # 测试使用
host="127.0.0.1" #你的mysql服务地址
user="xxxx" #mysql账号
passwd="xxxx" #mysql密码
# 创建日志存放目录 /home/runtrend/iptv/fresh/log/mysql/mysql_logs/
#移动脚本并重命名昨天的日期
mv /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log /home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog$time.log
#连接数据库 并使用corntab定时任务每日0点执行,生成新的日志文件
/home/runtrend/iptv/fresh/bin/mysql/bin/mysql -u$user -p$passwd -e "set global general_log_file='/home/runtrend/iptv/fresh/log/mysql/mysql_logs/mysql_generallog.log'"
#删除超过180天的日志文件,留存6个月
find /home/runtrend/iptv/fresh/log/mysql/mysql_logs -mtime +180 -type f -name 'mysql_generallog*.log' -exec rm -f {} \;
#find /home/runtrend/iptv/fresh/log/mysql/mysql_logs -mmin +20 -type f -name 'mysql_generallog*.log' -exec rm -f {} \;
三、创建定时任务
软件包安装
要使用cron服务,先要安装vixie-cron软件包和crontabs软件包,两个软件包作用如下:
vixie-cron软件包是cron的主程序。crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
查看是否安装了cron软件包: rpm -qa|grep vixie-cron
查看是否安装了crontabs软件包:rpm -qa|grep crontabs
如果没有安装,则执行如下命令安装软件包(软件包必须存在)
rpm -ivh vixie-cron-4.1-54.FC5*
rpm -ivh crontabs*
如果本地没有安装包,在能够连网的情况下可以在线安装
yum install vixie-cron
yum install crontabs
查看crond服务是否运行
pgrep crond 或 /sbin/service crond status 或 ps -elf|grep crond|grep -v "grep"
crond服务操作命令
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看是否存在crond服务
[root@gd88 mysql]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-12-21 14:12:37 CST; 1 years 2 months ago
Main PID: 13703 (crond)
Memory: 40.0K
CGroup: /system.slice/crond.service
└─13703 /usr/sbin/crond -n
Dec 24 12:55:01 gd88 crond[13703]: (root) RELOAD (/var/spool/cron/root)
Mar 04 11:01:01 gd88 crond[13703]: (root) RELOAD (/var/spool/cron/root)
Mar 04 11:24:01 gd88 crond[13703]: (root) RELOAD (/var/spool/cron/root)
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
crond执行
执行crond,会进入类似vi编译器的界面:crontab -e
插入脚本内容:0 0 * * * /home/runtrend/iptv/fresh/log/mysql/mysqllog.sh > /dev/null 2>&1
:wq保存退出
查看存在的定时任务:crontab -l
脚本内容:
#每天0点执行脚本
0 0 * * * /home/runtrend/iptv/fresh/log/mysql/mysqllog.sh > /dev/null 2>&1
四、结语
配置都是一样的,如果要使用慢查询日志或者其他日志,只需要修改配置文件内容。后面定时任务,定时脚本都是不需要更改的。
人生如梦,岁月无情!蓦然回首,才发现人活着是一种心情,得也好,失也罢,一切皆是过眼云烟;心情好,一切都好,只要开心就好!
更多推荐
已为社区贡献1条内容
所有评论(0)