【发布时间】:2017-04-24 12:11:53
【问题描述】:
我有一个带有 3 个表(日志数据)的 MySQL 数据库。每个表都有相同的结构。
现在我想编写一个每 6 个月运行一次的事件,并导出 csv 文件中的所有行,这些行超过半年并在第二个删除它们。文件名应包含导出的时间戳。
一开始我尝试用静态名称导出一个表 - 效果很好(这里用更小的时间间隔进行测试):
CREATE EVENT exportLog
ON SCHEDULE
EVERY 1 MINUTE
DO
SELECT *
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/exporttest.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM mytable WHERE timestamp < (NOW() - INTERVAL 5 DAY)
现在我尝试使用包含导出时间戳的动态文件名来处理这个问题。因此,旧文件也永远不会被覆盖。但这不起作用。有人可以帮忙吗?
CREATE EVENT exportLog
ON SCHEDULE
EVERY 1 MINUTE
DO
BEGIN
SET @sql_stmt := concat("SELECT * FROM logtable INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/export_", DATE_FORMAT(now(),'%Y-%m-%d %H%i%s'),".csv'");
PREPARE extrct FROM @sql_stmt;
EXECUTE extrct;
DEALLOCATE PREPARE extrct;
END $$
DELIMITER;
感谢您的帮助!
【问题讨论】:
标签: mysql mysql-event