MySQL定期自动删除表_MySQL教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:MySQL中的CONCAT函数使用教程
这篇文章主要介绍了MySQL中的CONCAT函数使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 使用MySQL CONCAT()函数将两个字符串连接起来,形成一个单一的字符串。试试下面的例子: ? 了解CONCAT函数更详细,考虑EMPLOYEE_TBL表具有以下记录: ? 可以用以下

   单位8亿多条的日志表,经过自动分表之后,需要自动删除30天前创建的日志表。

  但是只是在Master下线这些日志表,而Slave还需要保持在线,以备查询。

  由于Master-Slave结构,在Drop表之前,设置@@session.sql_log_bin=0,那么Drop的行为就没有记录到binlog,所以Slave的日志表就会被保留。

  模拟环境如下,

  mysql> show tables;

  +---------------------------------+

  | Tables_in_edmond |

  +---------------------------------+

  | sod_song_log_2014_1_22_13_18_20 |

  | sod_song_log_2014_2_22_13_18_20 |

  | sod_song_log_2014_3_22_13_18_20 |

  | sod_song_log_2014_4_22_13_18_20 |

  +---------------------------------+

  4 rows in set (0.00 sec)

  过程如下:

  delimiter $$

  CREATE procedure drop_table()

  BEGIN

  declare t_name varchar(64);

  declare isFinished int default false;

  declare log_table_list cursor for (select table_name from information_schema.tables where table_schema = 'EDMOND' and table_name like 'sod_song_log_%');

  declare continue handler for not found set isFinished=true;

  open log_table_list;

  repeat

  fetch log_table_list into t_name;

  if isFinished = false then

  if datediff(now(),replace(t_name,'sod_song_log_',''))>30 then

  set @@session.sql_log_bin=0;

  set @sqltext=concat('drop table ',t_name,';');

  PREPARE c_tab_stat from @sqltext;

  execute c_tab_stat;

  set @@session.sql_log_bin=1;

  end if;

  end if;

  until isFinished

  end repeat;

  close log_table_list;

  END $$

  delimiter ;

  执行过程,结果如下

  mysql> call drop_table();

  Query OK, 0 rows affected (0.28 sec)

  mysql> show tables;

  +---------------------------------+

  | Tables_in_edmond |

  +---------------------------------+

  | sod_song_log_2014_4_22_13_18_20 |

  +---------------------------------+

  1 row in set (0.00 sec)

  mysql> select now() from dual;

  +---------------------+

  | now() |

  +---------------------+

  | 2014-04-22 17:58:24 |

  +---------------------+

  1 row in set (0.00 sec)

  并且binlog中没有记录这个Drop的行为。

  配合Linux crontab即可实现定期自动删除表的功能。

  一定不要把sql_log_bin设置为global级别,不能犯迷糊

分享:MySQL中的RAND()函数使用详解
这篇文章主要介绍了MySQL中的RAND()函数使用详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 MySQL RAND()函数调用可以在0和1之间产生一个随机数: ? 当调用一个整数参数时,RAND()使用该随机数发生器种子值。每次在给定值种子生成,RAND()会产生一个可重复的

来源:模板无忧//所属分类:MySQL教程/更新时间:2015-05-28
相关MySQL教程