首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql二进制日志切割

基础概念

MySQL二进制日志(Binary Log)记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。二进制日志的主要目的是用于数据恢复和主从复制。

二进制日志切割是指将一个较大的二进制日志文件分割成多个较小的文件,以便于管理和归档。

优势

  1. 便于管理:较小的日志文件更容易管理和查找。
  2. 提高性能:较小的日志文件可以减少磁盘I/O操作,提高系统性能。
  3. 便于备份:较小的日志文件更容易进行备份和归档。
  4. 防止日志文件过大:过大的日志文件可能会影响磁盘空间和系统性能。

类型

MySQL二进制日志切割主要有两种方式:

  1. 基于大小的切割:当日志文件达到指定大小时,自动进行切割。
  2. 基于时间的切割:按照指定的时间间隔进行切割。

应用场景

  1. 数据恢复:通过回放二进制日志,可以恢复到某个时间点的数据状态。
  2. 主从复制:在主从复制中,从服务器通过读取主服务器的二进制日志来同步数据。

常见问题及解决方法

问题1:二进制日志文件过大

原因:长时间运行MySQL服务,日志文件不断累积,导致文件过大。

解决方法

  1. 设置日志文件大小:通过max_binlog_size参数设置每个二进制日志文件的最大大小。
  2. 设置日志文件大小:通过max_binlog_size参数设置每个二进制日志文件的最大大小。
  3. 定期清理日志:使用PURGE BINARY LOGS命令清理过期的日志文件。
  4. 定期清理日志:使用PURGE BINARY LOGS命令清理过期的日志文件。

问题2:二进制日志切割不生效

原因:可能是配置文件或命令设置不正确。

解决方法

  1. 检查配置文件:确保my.cnfmy.ini文件中包含以下配置:
  2. 检查配置文件:确保my.cnfmy.ini文件中包含以下配置:
  3. 手动触发切割:使用FLUSH LOGS命令手动触发日志切割。
  4. 手动触发切割:使用FLUSH LOGS命令手动触发日志切割。

示例代码

以下是一个简单的示例,展示如何设置二进制日志文件大小和手动触发切割:

代码语言:txt
复制
-- 设置每个二进制日志文件的最大大小为1GB
SET GLOBAL max_binlog_size = 1073741824;

-- 手动触发日志切割
FLUSH LOGS;

参考链接

通过以上配置和操作,可以有效管理和切割MySQL的二进制日志文件,确保系统的稳定性和性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

日志切割

那么其中的reopen,就是我们今天的主角,我们可以使用reopen来实现日志切割。...原理解析: 发送信号,其实是执行: kill -USR1 `cat /usrlocal/nginx/logs/nginx.pid` 以上两种方式都可以实现日志切割,你可以任意选择。...定期执行: 日志切割时企业中常规动作,我们不会每天去手工执行一遍命令,通常是让脚本自己执行,于是我们可以将这个动作写进任务计划,每天凌晨自动执行。 脚本: #!...-eq 0 ];then echo "$(date +%F) 日志切割成功" fi 写入任务计划: 在/var/spool/cron/root文件中添加如下代码,每天11:59分自动切割日志...: 59 23 * * * /bin/sh nginx_cut_log.sh >>/tmp/nginx_cut.log 2>&1 到这里简单的日志切割工作就完成啦。

59700

日志切割工具-Logrotate实现nginx日志切割

我们不管在生产环境还是开发环境,看日志是必不可少的,日志中往往包含很多有用的信息,有时候被DDOS、上传非法文件等等,我们都需要通过日志分析。...我们只需要配置你所需要切割的参数就可以。 很多程序的会用到logrotate滚动日志,比如nginx。它们安装后,会在/etc/logrotate.d这个目录下增加自己的logrotate的配置文件。.../etc/logrotate.conf include /etc/logrotate.d 常见参数 dateext: 切割日志带上日期 monthly: 日志文件将按月轮循。...定制化nginx日志切割 /var/log/nginx/*.log { daily dateext missingok rotate 14...logrotate /etc/logrotate.conf # 要为某个特定的配置调用logrotate logrotate /etc/logrotate.d/log-file 调试配置 模拟日志切割

2K10
  • Nginx 日志切割

    日志切割 当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大,文件大速度就会慢下来,比如一个文件几百兆,写入日志的时候,就会影响操作速度....手动切割 --进入日志目录 cd /usr/local/nginx/logs/ --重命名日志文件 [root@host1 logs]# mv access{,....,日志目录中自动生成了一个新的'access.log'文件 /usr/local/nginx/sbin/nginx -s reopen 重命名日志文件后,'nginx'日志仍然会写入到"access.2020...重命名后,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中 编写脚本 --编写脚本实现日志切割,可以配合'crontab'计划任务 [root@host1 /]# vim /nginx_logs.sh...,以endscript结尾,命令需要单独成行 endscript 重启nginx日志服务,写入到新的文件中去,否则会依然写入重命名后的文件中 启动 --启动'logrotate'并且指定配置文件切割

    1.3K10

    Nginx 日志切割

    最近还在写图床工具,涉及到日志统计相关的,比如访问统计,流量统计等,看了一下七牛的实现,发现每次创建一个bucket仓库都会自动生成一个域名,该仓库下的资源都会走这个域名。...但是自己要实现这一套逻辑还是满繁琐的,所以初步还是考虑用 Nginx 的一些功能来代替,其中流量统计就考虑使用 Nginx 自带的日志来分析。...考虑到日后日志大小过大,NodeJs读取会花太多时间,所以是要按天来切割日志,刚开始我写了一个简单的脚本。利用 crontab 的定时功能。...先按日期重命名文件,然后新建一个同名的日志文件让 Nginx 来写入,实际测试发现新建的 log 并没有被写入。...但是 Nginx reload 却可以,最终网上找到了 killall -s USR1 nginx 这条命令来通知 Nginx 重新创建新的日志 #!

    89750

    MySQL二进制日志

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement。 总结一下这三种格式日志的优缺点。...= 'b' WHERE owner_member_id = 'a' 执行之后,日志中记录的不是这条 update 语句所对应的事件 (MySQL 以事件的形式来记录 bin-log 日志) ,而是这条语句所更新的每一条记录的变化情况...自然,bin-log 日志的量就会很大。尤其是当执行 alter table 之类的语句的时候,产生的日志量是惊人的。...因为 MySQL 对于 alter table 之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表。那么该表的每一条记录都会被记录到日志中。 2....在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。

    99350

    MySQL二进制日志

    二进制日志相关的服务器变量: sql_log_bin = {ON|OFF}   是否记录二进制日志。...操作完后再启用二进制日志功能即可。 sql_log_off={ON|OFF}    用于控制是否禁止将一般查询日志类信息记录进查询日志文件。默认为OFF,表示不禁止记录功能。...通常为数据所在的目录 binlog_format = {MIXED|row|statement}  二进制日志的记录格式 max_binlog_size = 1073741824   二进制日志文件的单文件上限...当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。...mysql-bin.000008  --start-datetime="xxx" --stop-datetime="xxx" # 仅列出Mobile的相关二进制日志 说明:如果在备份时候报错 “'

    1.4K20

    Nginx 日志切割

    最近还在写图床工具,涉及到日志统计相关的,比如访问统计,流量统计等,看了一下七牛的实现,发现每次创建一个bucket仓库都会自动生成一个域名,该仓库下的资源都会走这个域名。...但是自己要实现这一套逻辑还是满繁琐的,所以初步还是考虑用 Nginx 的一些功能来代替,其中流量统计就考虑使用 Nginx 自带的日志来分析。...考虑到日后日志大小过大,NodeJs读取会花太多时间,所以是要按天来切割日志,刚开始我写了一个简单的脚本。利用 crontab 的定时功能。...先按日期重命名文件,然后新建一个同名的日志文件让 Nginx 来写入,实际测试发现新建的 log 并没有被写入。...但是 Nginx reload 却可以,最终网上找到了 killall -s USR1 nginx 这条命令来通知 Nginx 重新创建新的日志 #!

    48410

    Mongodb日志切割

    Mongodb日志切割 依据客户端查询来设计集合的片键及索引,最近几天突然需要查询历史数据进行分析,我们的有些集合count达到亿条以上,每个文档几百个字段。...遇到问题第一反应是看日志文件,拿到notepad之后由于文件太大无法打开,只能采用重启,然后开始查询mongodb日志管理的文档。Mongodb官网提出可以对日志进行切换。...在admin数据库中,执行命令db.runCommand({logRotate:1})告诉数据库进行日志切换。会生成:log_rout.log.2017-02-22T02-10-09 类似的日志文件。...如果希望定时生成日志文件,而不是人工的每天执行命令。...,以便于查找某一天的日志,先睡眠,因为日志的移动可能需要时间,然后根据当天的日期创建文件夹. sleep 30m CURRENT_MONTH=$(date +%Y-%m) CURRENT_DAY=

    1.7K70

    ②⑩ 【MySQL Log】详解MySQL日志:错误日志二进制日志、查询日志、慢查询日志

    MySQL日志:错误日志二进制日志、查询日志、慢查询日志 1....错误日志 2. 二进制日志 3. 查询日志 4. 慢查询日志 ②⑩ MySQL日志:错误日志二进制日志、查询日志、慢查询日志 1....二进制日志 - 作用: ①灾难时的数据恢复; ②MySQL的主从复制。...在MySQL8版本中,默认二进制日志是开启着的; 查看二进制日志位置、参数: SHOW VARIABLES LIKE '%log_bin%'; 二进制日志 - 格式: MySQL服务器提供了多种格式来记录二进制日志...以下是清理二进制日志的 3种方式(命令行指令): 也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。

    1.1K10

    Nodejs日志管理之日志切割

    下面就说下nodejs在实战中的日志管理 日志管理一般有两种,一种是上传到日志服务器,一种是本地保存。 每个公司实现情况不一样,下面只说下本地保存的方案。...基础pm2的日志切割 使用pm2自带的日志切割插件,pm2-logrotate, 安装 # CLI配置 pm2 set pm2-logrotate: // ~/.pm2/module_conf.json...logrotate - linux自带的切割工具 logrotate是linux(centos)自带的一款日志切割工具,使用范围上更加宽,不只局限于nodejs的。...,更精细的命名可以放在postrotate里 dateformat -%Y%m%d.log missingok # 找不到日志可以忽略 notifempty # 空日志不处理 compress...实现细节是把Log日志copy一份,再把原先的日志内容清空。 好处是不需要重启Pm2,缺点是从copy到清空这一时间段的日志是会丢失的。

    1.7K20

    MySQL 压缩二进制日志

    ,从节点获取日志时可能会有更多的网络流量,等等。通常,二进制日志压缩效果很好,所以人们一直希望有一个功能可以在MySQL使用二进制日志时对其进行压缩。从MySQL8.0.20开始,现在可以了。...这个例子中,MySQL花费了6.21秒来压缩二进制日志,每个事务平均不到400微秒。相比,二进制日志文件执行I/O花费了4.8分钟。...为了进行比较,我还手工压缩系列测试的中未压缩的二进制日志,以查看最佳压缩率(与MySQL使用的每次事务压缩不同)。除了给定测试所需的设置外,测试都是使用默认配置执行的。...当比较MySQL压缩的二进制日志和使用zstd手工压缩的二进制日志时,批量负载的文件大小大致相同,这也反映出对于大事务,按每个事务进行压缩等同于压缩整个文件。...二进制日志大小与压缩级别的关系 可以看出,无论MySQL中使用的压缩级别如何,文件大小基本上没有差异,而对于zstd,随着压缩级别的增加,文件大小如预期一样减小。

    1.5K81

    11.23 访问日志切割

    访问日志切割目录概要 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 把虚拟主机配置文件改成如下: DocumentRoot...img 重新加载配置文件 -t, graceful ls /usr/local/apache2.4/logs 访问日志切割日志一直往一个文件中写入,总会有一天把磁盘写满...,所以就需要把文件每天做一个切割,然后超过一定时间段的这些日志删除或者拷贝走,这样就能保证磁盘永远写不满 打开配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf...如果不指定 -l ,那么就会指定 UTC时间 的格式去切割日志 在中国应该是 CST,在美国是 UTC ,两者时区不同,相差几个小时 定义日志的名称,因为是切割的,所以根据时间日期让它自动变,就需要加一个变量...另外还需要做一个任务计划,超过一个月或两个月的日志删除,如果不删除,那是否切割日志就没有意义了 日志切割总结 做日志切割的目的,是为了防止磁盘写满,另一个目的就是为了更方便的去管理日志

    704100

    Nginx日志定时切割

    nginx的日志文件如果你不处理,将变得越来越大,我们可以写一个nginx日志切割脚本来自动切割日志文件。 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。...nginx主进程接到信号后会从配置文件中读取日志文件名称, 重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。...重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件`。 工作进程立刻打开新的日志文件并关闭重名名的日志文件。 然后你就可以处理旧的日志文件了。...nginx日志按日期自动切割脚本cut_nginx_log.sh如下: #!...,并重新生成今天的新日志文件。

    45440

    Lotgstash日志切割示例

    logstash的功能有一点是把 各种软件生成的各种格式的日志 转换成一个方便检索筛选的格式,本文演示了一个最简单的例子。..., "host" => "server-31", "time" => "09:27:09", "mounth" => "Jan" } 转换后的内容传入elasticsearch中,用户就可以按照时间、日志等级...、主机等对汇总的日志进行筛选检索 二 转换的过程 还是以刚才那条日志为例 =INFO REPORT==== 16-Jan-2017::09:27:09 === Mirrored queue 'reply...在配置文件中配置多行合并 codec => multiline { pattern => "^=" what => "previous" negate => true } 最终日志转换为 =INFO...结合所有的rabbitmq的日志总结规律为 =“日志级别” REPORT====  "日期"::“时间” ===\n“日志内容” 注意不要忘记中间的空格 3、正则匹配 logstash内置了很多常规正则

    63230
    领券