MySQL日志维护策略汇总「建议收藏」

MySQL日志维护策略汇总

大家好,又见面了,我是全栈君。

点击上方“码农编程进阶笔记”,选择“置顶或者星标

优质文章第一时间送达!

这几天要折腾mysql服务器,所以在网上搜罗了一些维护策略,然后自己总结实验,下面是我的总结经验和别人的一些建议。

日志类型:

MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:

 日志文件:记入文件中的信息类型
 错误日志:记录启动、运行或停止时出现的问题
 查询日志:记录建立的客户端连接和执行的语句
二进制日志:记录所有更改数据的语句。主要用于复制和即时点恢复
慢日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
事务日志:记录InnoDB等支持事务的存储引擎执行事务时产生的日志

1.启动慢查询日志:

MySQL 如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time(默认10s)的查询(初使表锁定的时间不算作 执行 时间)。日志记录文件为slow_query_log_file[=file_name],如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

【这个可以在调试mysql性能的时候启用,可以找出是哪个sql指令最浪费时间。生产环境中建议关闭】

2.生产环境中关闭通用查询日志:

由 于打开通用查询日志是记录用户的所有操作,在生产环境中这个日志的量是非常大的,所以一般情况下都是不打开的,myslq默认的该日志功能也是关闭的,在 特殊情况下才进行打开【一般只有在开发测试环境中,为了定位某些功能具体使用了哪些SQL语句的时候,才会在短时间段内打开该日志来做相应的分析。】

mysql> set global general_log = 1; #1:启动通用查询日志,0:关闭通用查询日志
mysql> show global variables like '%general_log%';
+------------------+----------------------------+ 
| Variable_name | Value | 
+------------------+----------------------------+ 
| general_log | ON | #是否启用了通用查询日志 
| general_log_file | /var/run/mysqld/mysqld.log | #日志路径 
+------------------+----------------------------+

3.定期备份二进制日志和sql数据:【本地一份,远程日志主机一份,存储主机一份】

在 my.cnf中log-bin = [filename]是启用二进制日志,默认以[filename].000001往上记录的,从启用log-bin之后【此时最好用mysqldump 保存当前的mysql某个库的数据,因为二进制日志只是记录了从现在起到最近一次mysql当机重启中的所有sql语句】,mysql就会开始记录每一个 sql语句,一旦mysql因各种原因需要重启,则会产生新的二进制日志,000001的后缀名会不断往上自加。若是在mysql当机期间mysql的数 据遭到了破坏(如磁盘损坏),之前的数据全部都被破坏了,这时候这个备份策略就可以帮你挽回损失。你可以从二进制日志中恢复从开始到最近一次mysql重 启这段时间的数据。【二进制日志中记录的是每一个sql语句,可以用mysqlbinlog [filename]查看日志内容】

4.sync_binlog全局变量的取值一定要合适:

默 认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。对非 事务表的更新执行完毕后立即保存到二进制日志中。

下面解释下sync_binlog:

“sync_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在 MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系 统Crash,在binlog_cache中的所有binlog信息都会被丢失。而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为 1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于 高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

5.如果数据库有很多的事务型操作,则建议把二进制日志的回滚上限设置大一些:

对于事务表,例如BDB或InnoDB表,所有更改表的更新(UPDATE、DELETE或INSERT)被缓存起来,直到服务器接收到 COMMIT语句。在该点,执行完COMMIT之前,mysqld将整个事务写入二进制日志。当处理事务的线程启动时,它为 缓冲查询分配binlog_cache_size大小的内存。如果语句大于该值,线程则打开临时文件来保存事务【所以如果 bunlog_cache_size足够大,就避免了过多的磁盘的I/O操作,可以把数据全部缓存在内存中】。线程结束后临时文件被删除。【“max_binlog_cache_size”:和”binlog_cache_size”相对应,但是所代表的是binlog能够使用的最大 cache内存大小。当我们执行多语句事务的时候,max_binlog_cache_size如果不够大的话,系统可能会报出“Multi- statementtransactionrequiredmorethan’max_binlog_cache_size’bytesofstorage” 的错误。所以最好也把max_binlog_cache_size也调大些(具体多大看你的服务器了)】

6.尽量把max_binlog_size设置大些

Binlog日志最大值,一般来说设置为512M或者1G,但不能超过1G。该大小并不能非常严格控制Binlog大小,尤其是当到达Binlog 比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进入当前日志,直到该事务 结束。

7.下面是mysql环境的情况:

mysql> show variables like '%binlog%';
 
+--------------------------------+------------+ | Variable_name | Value | +--------------------------------+------------+ 
  
| binlog_cache_size | 1048576 | 
  
| innodb_locks_unsafe_for_binlog | OFF | 
  
| max_binlog_cache_size| 4294967295 | 
  
| max_binlog_size| 1073741824 | 
  
| sync_binlog| 0| 
  
+--------------------------------+------------+

以上就是汇总的MySQL日志维护策略,希望对大家维护MySQL日志有所帮助。

MySQL日志维护策略汇总「建议收藏」

MySQL日志维护策略汇总「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112017.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue基础知识总结 11:前端路由vue-router

    Vue基础知识总结 11:前端路由vue-router一、前端路由vue-router1、维基百科路由就是通过互联的网络把信息从源地址传输到目的地址的活动。2、路由的机制路由包括路由和转发。路由器->公网IP->映射表->内网IP映射表:[内网ip1:电脑标识1,内网ip2:电脑标识2]3、后端渲染JSP:javaserverpage后端渲染==html+css+javajava代码的作用是从数据库中读取数据,然后将他们动态的放在页面中。后端渲染的意思就是,前端请求后端,

    2022年7月11日
    28
  • python global关键字_python中global是什么意思

    python global关键字_python中global是什么意思第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了

    2025年9月22日
    6
  • js三目运算符多条表达式_递归算法js

    js三目运算符多条表达式_递归算法js表达式Q?A:B在Q求值为TRUE时的值为A,在Q求值为FALSE时的值为B。例如下面判断奇数偶数的例子: varnumbuer=5; if(numbuer%2!=0){ document.write(“该数为奇数”); } else{ document.write(“该数为偶数”); }改写为三元表达式时…

    2025年7月5日
    4
  • linux提示未找到命令unzip和zip解决方法[通俗易懂]

    linux提示未找到命令unzip和zip解决方法[通俗易懂]linux中使用unzip和zip命令时,提示未找到命令解决方案:安装zip和unzip命令:yumlist|grepzip/unzipyuminstallzipyuminstallunzip

    2022年5月22日
    78
  • html表单代码有哪些,HTML常用代码有哪些「建议收藏」

    html表单代码有哪些,HTML常用代码有哪些「建议收藏」HTML常用代码有哪些?网页的描述,关键字,作者及其他元素:metaname=””content=””客户端脚本:window.alert(”);文档的样式信息:引进图片:imgsrc换行:br超级链接:aherf新的页面打开:target=”_blank”无序列表:有序列表:表格的页眉:thead表格的主题:tbody定义表格的页脚:tfood定义表格:table边框:border单元…

    2022年8月11日
    10
  • Unix常用命令

    Unix常用命令moreless:less的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less允许使用者往回卷动以浏览已经看过的部份,同时因为less并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如vi)来的快速。unix种类[图]>>Linux‖BSD‖Solaris‖SCO‖HP-UX‖AIX‖AS4

    2022年5月31日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号