以下的文章主要讲述的是对自动清理MySQL binlog日志与手动删除的实际解决方案的设置, 我们大家都知道MySQL数据库从复制(replication)采用了RBR 模式之后,binlog 的格式为ROW,其主要作用是解决很多原先出现的主键重复问题。 在一个繁忙的master db server
以下的文章主要讲述的是对自动清理MySQL binlog日志与手动删除的实际解决方案的设置, 我们大家都知道MySQL数据库从复制(replication)采用了RBR 模式之后,binlog 的格式为"ROW",其主要作用是解决很多原先出现的主键重复问题。
在一个繁忙的master db server上,MySQL binlog日志文件增长速度很快,如果不定时清除,硬盘空间很快就会被充满。
设置自动清理MySQL binlog日志,配置my.cnf:
expire_logs_days = 10
在运行时修改:
<ol class="dp-xml"> <li class="alt"><span><span>show binary logs; </span></span></li> <li><span>show variables like '%log%'; </span></li> <li class="alt"> <span>set global </span><span class="attribute">expire_logs_days</span><span> = </span><span class="attribute-value">10</span><span>; </span> </li> </ol>
清除之前可以采用相应的备份策略。
手动删除10天前的MySQL binlog日志:
<ol class="dp-xml"> <li class="alt"><span><span>PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); </span></span></li> <li><span>show master logs; </span></li> </ol>
MASTER和BINARY是同义词。
一般情况下,推荐使用MIXED binlog的复制。http://dev.MySQL.com/doc/refman/5.1/en/open-bugs-general.html中的说明:Replication uses query-level logging: The master writes the executed queries to the binary logThis is a very fast, compact, and efficient logging method that works perfectly in most cases
附:关于MySQL复制的几种模式
从 MySQL 5.1.12 开始,可以用以下三种模式来实现:
基于SQL语句的复制(statement-based replication, SBR),
基于行的复制(row-based replication, RBR),
混合模式复制(mixed-based replication, MBR)。
相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。
在运行时可以动态改动 binlog的格式,除了以下几种情况:
存储流程或者触发器中间
启用了NDB
当前会话试用 RBR 模式,并且已打开了临时表
如果binlog采用了 MIXED 模式,那么在以下几种情况下会自动将MySQL binlog的模式由 SBR 模式改成 RBR 模式。
当DML语句更新一个NDB表时
当函数中包含 UUID() 时
2个及以上包含 AUTO_INCREMENT 字段的表被更新时
行任何 INSERT DELAYED 语句时
用 UDF 时
视图中必须要求运用 RBR 时,例如建立视图是运用了 UUID() 函数
设定主从复制模式:
<ol class="dp-xml"> <li class="alt"> <span><span class="attribute">log-bin</span><span>=</span></span>MySQL<span><span>-bin </span></span> </li> <li> <span>#</span><span class="attribute">binlog_format</span><span>=</span><span class="attribute-value">"STATEMENT"</span><span> </span> </li> <li class="alt"> <span>#</span><span class="attribute">binlog_format</span><span>=</span><span class="attribute-value">"ROW"</span><span> </span> </li> <li> <span class="attribute">binlog_format</span><span>=</span><span class="attribute-value">"MIXED"</span><span> </span> </li> </ol>
也可以在运行时动态修改binlog的格式。例如
<ol class="dp-xml"> <li class="alt">MySQL<span><span class="tag">></span><span> SET SESSION </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'STATEMENT'</span><span>; </span></span> </li> <li>MySQL<span class="tag">></span><span> SET SESSION </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'ROW'</span><span>; </span> </li> <li class="alt">MySQL<span class="tag">></span><span> SET SESSION </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'MIXED'</span><span>; </span> </li> <li>MySQL<span class="tag">></span><span> SET GLOBAL </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'STATEMENT'</span><span>; </span> </li> <li class="alt">MySQL<span class="tag">></span><span> SET GLOBAL </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'ROW'</span><span>; </span> </li> <li>MySQL<span class="tag">></span><span> SET GLOBAL </span><span class="attribute">binlog_format</span><span> = </span><span class="attribute-value">'MIXED'</span><span>; </span> </li> </ol>
两种模式各自的优缺点:
SBR 的优点:
历史悠久,技能成熟
binlog文件较小
binlog中包含了所有数据库修改信息,可以据此来审核数据库的安全等情况
MySQL binlog可以用于实时的还原,而不仅仅用于复制
主从版本可以不一样,从服务器版本可以比主服务器版本高
SBR 的缺点:
不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候。
调用具有不确定因素的 UDF 时复制也可能出疑问
运用以下函数的语句也不能被复制:
LOAD_FILE()
UUID()
USER()
FOUND_ROWS()
SYSDATE() (除非启动时启用了 –sysdate-is-now 选项)
INSERT … SELECT 会产生比 RBR 更多的行级锁
复制须要执行 全表扫描(WHERE 语句中没有运用到索引)的 UPDATE 时,须要比 RBR 请求更多的行级锁
对于有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句
对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录产生影响
存储函数(不是存储流程 )在被调用的同时也会执行一次 NOW() 函数,这个可以说是坏事也可能是好事
确定了的 UDF 也须要在从服务器上执行
数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错
执行复杂语句如果出错的话,会消耗更多资源
RBR 的优点:
任何情况都可以被复制,这对复制来说是最安全可靠的
和其他大多数数据库系统的复制技能一样
多数情况下,从服务器上的表如果有主键的话,复制就会快了很多
复制以下几种语句时的行锁更少:
INSERT … SELECT
包含 AUTO_INCREMENT 字段的 INSERT
没有附带条件或者并没有修改很多记录的 UPDATE 或 DELETE 语句
执行 INSERT,UPDATE,DELETE 语句时锁更少
从服务器上采用多线程来执行复制成为可能
RBR 的缺点:
binlog 大了很多
复杂的回滚时 binlog 中会包含大量的数据
主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会导致频繁发生 binlog 的并发写疑问
UDF 产生的大 BLOB 值会导致复制变慢
不能从 binlog 中看到都复制了写什么语句(加密过的)
当在非事务表上执行一段堆积的SQL语句时,最好采用 SBR 模式,否则很容易导致主从服务器的数据不一致情况发生
另外,针对系统库 MySQL 里面的表发生变化时的处理准则如下:
如果是采用 INSERT,UPDATE,DELETE 直接操作表的情况,则日志格式根据 MySQL binlog_format 的设定而记录
如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何 都采用 SBR 模式记录。
注:采用 RBR 模式后,能处理很多原先出现的主键重复问题。实例:
对于insert into db_allot_ids select from db_allot_ids 这个语句:
在BINLOG_FORMAT=STATEMENT 模式下:
BINLOG日志信息为:
<ol class="dp-xml"> <li class="alt"><span><span>BEGIN </span></span></li> <li><span>/*!*/; </span></li> <li class="alt"><span># at 173 </span></li> <li> <span>#090612 16:05:42 server id 1 end_log_pos 288 Query </span><span class="attribute">thread_id</span><span>=</span><span class="attribute-value">4</span><span> </span><span class="attribute">exec_time</span><span>=</span><span class="attribute-value">0</span><span> </span><span class="attribute">error_code</span><span>=</span><span class="attribute-value">0</span><span> </span> </li> <li class="alt"> <span>SET </span><span class="attribute">TIMESTAMP</span><span>=</span><span class="attribute-value">1244793942</span><span>/*!*/; </span> </li> <li><span>insert into db_allot_ids select * from db_allot_ids </span></li> <li class="alt"><span>/*!*/; </span></li> </ol>
在BINLOG_FORMAT=ROW 模式下:
BINLOG日志信息为:
<ol class="dp-xml"> <li class="alt"><span><span>BINLOG ' </span></span></li> <li><span>hA0yShMBAAAAMwAAAOAAAAAAAA8AAAAAAAAAA1NOUwAMZGJfYWxsb3RfaWRzAAIBAwAA </span></li> <li class="alt"> <span>hA0yShcBAAAANQAAABUBAAAQAA8AAAAAAAEAAv/</span><span class="attribute">8AQEAAAD8AQEAAAD8AQEAAAD8AQEAAAA</span><span>= </span> </li> <li><span>'/*!*/; </span></li> </ol>
以上的相关内容就是对设置自动清理MySQL binlog日志和手动删除的方法的介绍,望你能有所收获。

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具