守护数据完整性和性能的利器-MySQL日志 (守护数据完整怎么删除)
MySQL 服务器上生成的日志对于数据库的稳定性、数据完整性和性能优化至关重要。让我们仔细了解一下不同类型的日志及其作用:
错误日志
错误日志记录了 MySQL 服务在运行过程中的核心转储、错误和异常。这些日志对于排查服务器运行过程中的问题非常有用,可以帮助我们及时修复和处理问题。错误日志对于系统管理员和开发人员来说是非常重要的诊断工具,它可以让我们定位和解决潜在的问题,确保数据库的稳定性和可靠性。
查询日志
查询日志记录了 MySQL 服务器接收到的所有增删改查 SQL 语句。这些日志对于调试和排查问题非常有用,可以帮助我们追踪和分析具体的 SQL 操作。由于生产环境中的 SQL 语句通常非常频繁,开启查询日志会导致大量的 IO 操作,降低 MySQL 的性能。因此,一般情况下我们不会开启查询日志,只在需要调试时才会临时开启,以避免对系统性能造成不必要的影响。
二进制日志
二进制日志是记录数据更改操作的重要日志。它包括插入、更新、删除、修改表结构等操作。二进制日志对于数据恢复和主从复制非常关键。主从复制技术依赖于二进制日志,主库的所有更改操作都会记录在二进制日志中,从库通过读取二进制日志来获取主库的操作并进行同步复制。二进制日志的使用可以保障数据的一致性和可靠性,同时也提供了数据恢复的能力。
慢查询日志
慢查询日志记录了执行时间超过指定阈值的 SQL 语句。这些 SQL 语句可能存在性能问题,通过分析慢查询日志可以找出耗时的 SQL 语句,并进行优化和改进。慢查询日志对于开发人员来说是非常有价值的工具,可以帮助我们发现并解决性能瓶颈,提升数据库的响应速度和效率。
总结
MySQL 日志对于数据库的管理和优化是至关重要的。错误日志可以帮助我们追踪和解决问题,查询日志和慢查询日志则有助于优化 SQL 语句和提升性能,而二进制日志则是数据恢复和主从复制的基础。在实际应用中,我们需要根据具体需求和场景来合理配置和管理这些日志,以确保数据库的稳定性、数据完整性和性能优化。只有充分利用和理解这些日志,我们才能更好地管理和维护 MySQL 数据库,提供高效可靠的数据服务。
如何管理 MySQL 的 binlog
* 关于 binlog**************************************--binlog 以一种更有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。 --binlog 包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。 语句以“事件”的形式保存,它描述数据更改。 --binlog 还包含关于每个更新数据库的语句的执行时间信息。 它不包含没有修改任何数据的语句。 如果你想要记录所有语句(例如,为了识别有问题的查询),你应使用一般查询日志。 --binlog 的主要目的是在恢复使能够最大可能地更新数据库,因为 binlog 包含备份后进行的所有更新。 --binlog 还用于在主复制服务器上记录所有将发送给从服务器的语句。 --运行服务器时若启用 binlog 则性能大约慢1%。 但是, binlog 的好处,即用于恢复并允许设置复制超过了这个小小的性能损失。 --当--log-bin[=file_name]选项启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。 如果未给出file_name值, 默认名为-bin后面所跟的主机名。 如果给出了文件名,但没有包含路径,则文件被写入数据目录。 建议指定一个文件名。 如果你在日志名中提供了扩展名(例如,--log-bin=file_),则扩展名被悄悄除掉并忽略。 --mysqld在每个 binlog 名后面添加一个数字扩展名。 每次你启动服务器或刷新日志时该数字则增加。 如果当前的日志大小达到max_binlog_size,还会自动创建新的 binlog 。 如果你正使用大的事务, binlog 还会超过max_binlog_size:事务全写入一个 binlog 中,绝对不要写入不同的 binlog 中。 --为了能够知道还使用了哪个不同的 binlog 文件,mysqld还创建一个 binlog 索引文件,包含所有使用的 binlog 文件的文件名。 默认情况下与 binlog 文件的文件名相同,扩展名为。 你可以用--log-bin-index[=file_name]选项更改 binlog 索引文件的文件名。 当mysqld在运行时,不应手动编辑该文件;如果这样做将会使mysqld变得混乱。 --binlog 格式有一些已知限制,会影响从备份恢复。 --默认情况下,并不是每次写入时都将 binlog 与硬盘同步。 因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能 binlog 中最后的语句丢失了。 要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使 binlog 在每N次 binlog 写入后与硬盘同步。 *************************************************如何管理 MySQL 的 binlog *************************************************1、在 中增加下述参数,指定保存更新到 binlog 的数据库:db_name,未在此指定的数据库将不记录 binlog--binlog-do-db=db_name2、在 中增加下述参数,指定不保存更新到 binlog 的数据库:db_name--binlog-ignore-db=db_name3、如果 binlog 已经产生,可以通过 SQL 命令行清除:/** 要清理日志,需按照以下步骤:* 1 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。 * 2 使用SHOW MASTER LOGS获得主服务器上的一系列日志。 * 3 在所有的从属服务器中判定最早的日志。 这个是目标日志。 如果所有的从属服务器是更新的,这是清单上的最后一个日志。 * 4 制作您将要删除的所有日志的备份。 (这个步骤是自选的,但是建议采用。 )* 5 清理所有的日志,但是不包括目标日志。 **//** 清除 binlog** 为了执行RESET,您必须拥有RELOAD权限。 * 以下命令将删除列于索引文件中的所有 binlog,把 binlog 索引文件重新设置为空,并创建一个新的 binlog。 * (在以前版本的MySQL中,被称为FLUSH MASTER。 )*/RESET MASTER;/** 清除指定的 binlog**/PURGE MASTER LOGS TO mysql-bin.010;/** 清除日期为 2006-06-06 06:06:06 以前的 binlog** BEFORE变量的date自变量可以为YYYY-MM-DD hh:mm:ss格式。 MASTER和BINARY是同义词。 */PURGE MASTER LOGS BEFORE 2006-06-06 06:06:06;/** 清除3天前的 binlog**/PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
mysql 很多慢日志,怎么解决
这是一个慢查询日志的展示工具,能够帮助 DBA 或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看 slow-log。QAN(Query Analytics)
PMM 目前有 2 个版本,但是对于 QAN 来说其大致由三部分组成:
QAN-Agent(client):负责采集 slow-log 的数据并上报到服务端
QAN-API(server):负责存储采集的数据,并对外提供查询接口
QAN-APP:专门用来展示慢查询数据的 grafana 第三方插件
1. 数据流转
slow-log --> QAN-Agent --> QAN-API <--> QAN-APP(grafana)
2. pmm1 架构图
3. pmm2 架构图
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。