从一个表仅备份昨天的数据

凯特

我试图对此进行研究,但找不到任何东西,因此我要回问集体。

在一个非常繁忙的MySQL数据库中,我有一个access_log表,每天可获取约1000万条记录。目的是获取昨天的记录并将其移至其他服务器上的其他数据库。有没有办法仅从该表中热备份昨天的数据?

谢谢您的投入,凯特

琼斯

假设您只有一个access_log表,那么选择这些记录就很简单。您必须将它们拉入客户端程序,然后将它们推入另一个表。

SELECT * 
  FROM access_log
 WHERE logtime >= CURRENT_DATE() - INTERVAL 1 DAY
   AND logtime < CURRENT_DATE();

然后

DELETE
  FROM access_log
 WHERE logtime >= CURRENT_DATE() - INTERVAL 1 DAY
   AND logtime < CURRENT_DATE();

(避免使用BETWEEN选择时间/日期范围;在您选择的范围的末尾会做错事。)

但这有点像性能猪。一方面,该表应该使用MyISAM存储引擎,而不是InnoDB,因此您不必为事务开销感到烦恼。

如果它是InnoDB,并且您无法更改它,则可能需要编写程序以读取然后删除较小的数据块。例如,这些块之一可能是:

SELECT * 
  FROM access_log
 WHERE logtime >= CURRENT_DATE() - INTERVAL 1 DAY + INTERVAL 1 HOUR
   AND logtime < CURRENT_DATE() - INTERVAL 1 DAY + INTERVAL 2 HOUR

或者,如果您可以承受午夜一两秒的停机时间,则可以将access_log表重命名为昨天_access_log,并为今天创建一个新表。然后,您可以保存昨天的表格而不会影响生产性能。

您可以使用以下语句执行该午夜日志交换操作:

CREATE TABLE `access_log_new` (
  /* whatever columns you have in your access_log table, I made this stuff up */
  `log_id` INT(11) NOT NULL AUTO_INCREMENT,
  `item` VARCHAR(255) NOT NULL,
  `logtime` TIMESTAMP NOT NULL ,
  PRIMARY KEY (`log_id`)
) ENGINE=MYISAM;
DROP TABLE access_log_old;  
RENAME TABLE access_log TO access_log_old;
RENAME TABLE access_log_new TO access_log;

这里的最后两个语句RENAME TABLE非常快。没有access_log表的时间很少,但是远远少于一秒钟。这样做的想法是很好地设置所有内容,然后快速翻转日志文件。

那可能是一个非常好的策略。它将使您可以为实时access_log表使用廉价写入和昂贵搜索的ARCHIVE存储引擎。

如果您可以选择重组access_log表,则可以选择按天对它进行分区,因此只需换出每日分区表即可。但这是一个更长的话题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL帮助从一个表中提取数据并基于备份表,然后插入该数据

来自分类Dev

SQL帮助从一个表中提取数据并基于备份表,然后插入该数据

来自分类Dev

仅使用一个表中的ID从一个表中选择数据(联接?)

来自分类Dev

从一个表基于两列获取数据

来自分类Dev

将数据从一个表复制到另一个表

来自分类Dev

将数据从一个表输入到另一个表

来自分类Dev

将数据从一个表连接到另一个表

来自分类Dev

将数据从一个表追加到另一个表

来自分类Dev

在SQL中将数据从一个表插入到下一个表

来自分类Dev

将数据从一个表拉到另一个表

来自分类Dev

仅将新条目从一个数据库表复制到另一数据库表。Access,C#

来自分类Dev

添加一个mysql子查询以从昨天选择数据

来自分类Dev

Excel宏,用于从一个工作表中的特定字段复制数据,仅保留该值并将其添加到另一工作表中

来自分类Dev

从一个工作表或另一个工作表中的数据透视表复制数据

来自分类Dev

从一个数据库表插入到另一个

来自分类Dev

将数据从一个hbase表复制到另一个

来自分类Dev

将数据从一个MySQL表移动到另一个

来自分类Dev

从一个或另一个表中选择数据的最佳方法

来自分类Dev

将数据从一个hbase表复制到另一个

来自分类Dev

将数据从一个mysql表移动到另一个

来自分类Dev

将数据从一个MySQL表移动到另一个

来自分类Dev

从一个数据库表插入到另一个

来自分类Dev

如何仅将数据从一个数据库表中的数据复制到sql server中的另一个数据库现有表

来自分类Dev

MySQL-如何从一个表的一行中仅选择两列

来自分类Dev

比较2个表并从一个表中选择数据

来自分类Dev

Oracle数据库,将数据从一个表更新到另一个表

来自分类Dev

使用联接将数据从一个表获取到另一表

来自分类Dev

将数据从一个表插入到另一表

来自分类Dev

如何将数据从一个表复制到另一表?

Related 相关文章

  1. 1

    SQL帮助从一个表中提取数据并基于备份表,然后插入该数据

  2. 2

    SQL帮助从一个表中提取数据并基于备份表,然后插入该数据

  3. 3

    仅使用一个表中的ID从一个表中选择数据(联接?)

  4. 4

    从一个表基于两列获取数据

  5. 5

    将数据从一个表复制到另一个表

  6. 6

    将数据从一个表输入到另一个表

  7. 7

    将数据从一个表连接到另一个表

  8. 8

    将数据从一个表追加到另一个表

  9. 9

    在SQL中将数据从一个表插入到下一个表

  10. 10

    将数据从一个表拉到另一个表

  11. 11

    仅将新条目从一个数据库表复制到另一数据库表。Access,C#

  12. 12

    添加一个mysql子查询以从昨天选择数据

  13. 13

    Excel宏,用于从一个工作表中的特定字段复制数据,仅保留该值并将其添加到另一工作表中

  14. 14

    从一个工作表或另一个工作表中的数据透视表复制数据

  15. 15

    从一个数据库表插入到另一个

  16. 16

    将数据从一个hbase表复制到另一个

  17. 17

    将数据从一个MySQL表移动到另一个

  18. 18

    从一个或另一个表中选择数据的最佳方法

  19. 19

    将数据从一个hbase表复制到另一个

  20. 20

    将数据从一个mysql表移动到另一个

  21. 21

    将数据从一个MySQL表移动到另一个

  22. 22

    从一个数据库表插入到另一个

  23. 23

    如何仅将数据从一个数据库表中的数据复制到sql server中的另一个数据库现有表

  24. 24

    MySQL-如何从一个表的一行中仅选择两列

  25. 25

    比较2个表并从一个表中选择数据

  26. 26

    Oracle数据库,将数据从一个表更新到另一个表

  27. 27

    使用联接将数据从一个表获取到另一表

  28. 28

    将数据从一个表插入到另一表

  29. 29

    如何将数据从一个表复制到另一表?

热门标签

归档