返回顶部
首页 > 资讯 > 数据库 >mysql expire_logs_days是怎么生效和计算出来的
  • 630
分享到

mysql expire_logs_days是怎么生效和计算出来的

2024-04-02 19:04:59 630人浏览 独家记忆
摘要

Mysql主备复制是通过binlog完成的。在开启binlog的情况下,expire_logs_days参数可以让mysql自动清理若干天前的binlog。 那么expire_logs_days是在什

Mysql主备复制是通过binlog完成的。在开启binlog的情况下,expire_logs_days参数可以让mysql自动清理若干天前的binlog。

那么expire_logs_days是在什么时候生效的呢?初步猜想实在每次产生一个新的binlog的时候去判断一次。查了一下具体的实现,确实是这样的:

源码(5.1.58, log.cc)



int MYsql_BIN_LOG::rotate_and_purge(uint flags)  

{  

...  

  if (!error && check_purge && expire_logs_days)  

  {  

    time_t purge_time= my_time(0) - expire_logs_days*24*60*60;  

    if (purge_time >= 0)  

      purge_logs_before_date(purge_time);  

  }  

...  

}  


如果设置了expire_logs_days,每次binlog rotate的时候都去计算一下purge_time(当前时间-expire_logs_days;

这个计算似乎是可以省去的: expire_logs_days是以天为单位,范围是0~99, 0表示不会清理,自然不会进入if块内:),

以99来计算,my_time(0) - 99*24*60*60>=0也是恒真的了),调用purge_logs_before_date(purge_time), 

purge_logs_before_date会从log index文件中的第一个binlog文件开始循环: 比较文件的最后修改时间,如果小于purge_time,

就放入数组to_log中。然后调用purge_logs,清理所有满足条件的binlog。


int MYSQL_BIN_LOG::purge_logs_before_date(time_t purge_time)  

{  

...  

  MY_STAT stat_area;  

...  

  pthread_mutex_lock(&LOCK_index);  

  to_log[0]= 0;  

  if ((error=find_log_pos(&log_info, NullS, 0 )))  

    Goto err;  

  

  while (strcmp(log_file_name, log_info.log_file_name) &&  

     !is_active(log_info.log_file_name) &&  

         !log_in_use(log_info.log_file_name))  

  {  

...  

      if (stat_area.st_mtime < purge_time)   

        strmake(to_log,   

                log_info.log_file_name,   

                sizeof(log_info.log_file_name) - 1);  

      else  

        break;  

...  

   }  

   

下面看一下purge_logs的实现:

int MYSQL_BIN_LOG::purge_logs(const char *to_log,   

                          bool included,  

                          bool need_mutex,   

                          bool need_update_threads,   

                          ulonglong *decrease_log_space)  

{  

...  

  while ((strcmp(to_log,log_info.log_file_name) || (exit_loop=included)) &&  

         !is_active(log_info.log_file_name) &&  

         !log_in_use(log_info.log_file_name))  

  {  

    if ((error= reGISter_purge_index_entry(log_info.log_file_name)))  

...  

  }  

...  

   

  if ((error=update_log_index(&log_info, need_update_threads)))  

...  

   

  if (is_inited_purge_index_file() &&  

      (error= purge_index_entry(thd, decrease_log_space, FALSE)))  

...  

 


        purge_logs会将需要清理的binlog文件名放入purge_index_file(io_CACHE)中,然后更新index文件,最后再调用purge_index_entry删除binlog文件:


int MYSQL_BIN_LOG::purge_index_entry(THD *thd, ulonglong *decrease_log_space,  

                                     bool need_mutex)  

{  

...  

  for (;;)  

  {  

...  

        if (!my_delete(log_info.log_file_name, MYF(0)))  

        {  

          if (decrease_log_space)  

            *decrease_log_space-= s.st_size;  

        }  

...  

}  

       my_delete调用unlink()删除binlog文件。至此,完成了自动清理binlog的过程。另外当mysql启动的时候,mysql也会执行purge_logs_before_date(purge_time)的过程(其它的操作,如果会引起binlog rotate,自然也会触发这个过程,如flush logs)。


       梳理一下整个过程,不难发现,在压力比较大的mysql上或生产环境,我们不应该启动这个参数(my.cnf中不显式设置该参数或设置expire_logs_days=0):mysql每天产生十几个或更多的binlog文件,启用这个参数后,一次清理这么多文件,必定会导致磁盘io被占满,mysql出现抖动或hang住。因此建议自己编写脚本,每次purge完一个binlog后,sleep几秒。


注意:

expire_logs_days设置之后不会立即清除,触发条件是:

binlog大小超过max_binlog_size

手动执行flush logs

重新启动时


您可能感兴趣的文档:

--结束END--

本文标题: mysql expire_logs_days是怎么生效和计算出来的

本文链接: https://lsjlt.com/news/45242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql expire_logs_days是怎么生效和计算出来的
    mysql主备复制是通过binlog完成的。在开启binlog的情况下,expire_logs_days参数可以让mysql自动清理若干天前的binlog。 那么expire_logs_days是在什...
    99+
    2024-04-02
  • win10的计算器怎么调出来
    这篇“win10的计算器怎么调出来”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10的计算器怎么调出来”文章吧。win...
    99+
    2023-06-30
  • 腾讯云服务器价格计算方法是什么呢怎么算出来的
    腾讯云是中国最大的云计算服务提供商之一,提供了高性能的云计算平台和丰富的云计算解决方案,为企业和个人用户提供可靠的云计算服务。在腾讯云上,您可以轻松部署自己的应用程序,实现云端数据存储、数据迁移和应用程序运行等功能。 腾讯云的价格计算方法...
    99+
    2023-10-28
    腾讯 什么呢 计算方法
  • 未来车企的生存核心是什么?计算力=竞争力
    随着工业4.0的到来,各大汽车厂商也面临着前所未有的挑战。面对业绩增长、成本、行业新进入者挑战的压力,各汽车制造厂商们纷纷借助CAE仿真技术提升核心竞争力,CAE仿真技术已成为汽车被动安全性研究的有利工具。这项技术不仅可以实现设计过程早期反...
    99+
    2023-06-04
  • Windows 10优秀壁纸是怎么设计出来的?
    每代Windows版本都带来了全新的默认桌面壁纸,意味着和数百万用户朝夕相对。微软素来注重图片的卓越品质,尤其是系统壁纸。纸背后的创新拍摄故事,此外还展示了拍摄过程中诸多候选版本。尽管最终的成品非常震撼,自然作为消费者依...
    99+
    2023-06-16
    windows壁纸 windows10壁纸 windows桌面壁纸 壁纸
  • One Order行项目里Item Category是如何计算出来的
    这篇文章主要讲解了“One Order行项目里Item Category是如何计算出来的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“One Order行项...
    99+
    2024-04-02
  • 云计算:云计算是怎么分类的?
    云计算:云计算是怎么分类的什么是云计算?云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。...
    99+
    2023-06-04
  • 计算机中摄氏度怎么在键盘上打出来
    这篇文章给大家分享的是有关计算机中摄氏度怎么在键盘上打出来的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。摄氏度在键盘上打出来的方法:首先在电脑上新建一个word文档或者文本文档;然后进入编辑文档的页面;接着调用输...
    99+
    2023-06-14
  • 怎么计算出正确的checksum值?
    1)创建一个测试表 SQL> create table test (id int, name varchar2(10));   Table created. ...
    99+
    2024-04-02
  • MySQL根据出生日期计算年龄的五种方法比较
    方法一 SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age 缺陷,当日期为未来日期时结果为0,而不是负数; 这里用了5个函数和...
    99+
    2023-08-31
    mysql 数据库
  • 未来计算机的发展趋势是什么
    未来计算机的发展趋势是人工智能、量子计算、云计算、生物计算、人机接口和增强现实技术等方向。详细介绍:1、人工智能将成为未来计算机发展的核心驱动力,随着机器学习和深度学习的快速发展,计算机将能够更好地理解和解释数据,并从中提取有价值的信息;2...
    99+
    2023-08-15
  • MySQL中怎么计算同比和环比
    这篇文章主要介绍“MySQL中怎么计算同比和环比”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中怎么计算同比和环比”文章能帮助大家解决问题。我们先来看看什么是同比,什么是环比:同比:通常是...
    99+
    2023-07-02
  • golang怎么根据生日计算星座和属相
    今天小编给大家分享一下golang怎么根据生日计算星座和属相的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。根据生日计算星座f...
    99+
    2023-07-02
  • 云服务器利润怎么算出来的
    云服务器的利润计算通常有几种不同的方式,以下是其中一种: 租用虚拟主机:虚拟主机是一种提供基础设施即服务的在线计算资源,如服务器托管、数据存储、虚拟主机等。租用虚拟主机可以使云服务器的使用者按需使用计算资源,无需购买云服务器,因此降低了...
    99+
    2023-10-26
    算出来 利润 服务器
  • 云服务器比价怎么算出来的
    比较计算机的处理能力 云服务器比价算法基于用户提供的计算机性能和价格之间的对比,来确定最适合用户的云服务器。这种算法考虑了许多因素,包括计算机的处理能力、存储容量、可扩展性和安全性等。用户可以使用该算法来比较不同云服务器提供商的计算机...
    99+
    2023-10-28
    比价 算出来 服务器
  • 云服务器容量怎么算出来的
    云服务器的容量计算通常需要使用PoC(Profiling of Content)技术来计算。以下是一个简单的示例,可以说明如何使用PoC来计算云服务器中的虚拟机所需容量: 假设虚拟机需要运行的数据量为 1G,那么它需要 1G/(1G + ...
    99+
    2023-10-26
    算出来 容量 服务器
  • 云服务器税率是多少啊怎么算出来
    云服务器的税率取决于所在国家或地区的税法规定。一般来说,不同国家或地区的税率是不同的,而且税率也会根据不同的服务类型和用途而有所不同。在美国,云服务器的税率通常是根据所在州的销售税率来计算的。在欧洲,云服务器的税率则可能会受到增值税(VAT...
    99+
    2023-10-26
    税率 算出来 服务器
  • 云服务器税率是多少啊怎么算出来的呢
    云服务器税率是指一个服务商收取的云服务器费用与其实际支付费用之间的比率。具体情况因不同的国家和地区而异,但是一般来说,税率在3.5%到15%之间。 计算税率需要考虑许多因素,例如服务商的规模、收入水平、纳税义务人的税务身份、服务合同的性质...
    99+
    2023-10-26
    税率 算出来 服务器
  • CDN成本是怎么计算的
    CDN成本通常是根据流量消耗和存储空间来计算的。具体计算方法会根据CDN提供商的定价策略而有所不同。一般来说,CDN成本会根据以下几...
    99+
    2024-04-24
    CDN
  • 计算机中输入和输出设备是用来存储程序及数据的装置吗
    这篇文章主要介绍计算机中输入和输出设备是用来存储程序及数据的装置吗,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!输入和输出设备不是用来存储程序及数据的装置,存储设备才是。输入设备是向计算机输入数据和信息的设备;输出设...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作