你可能想要使用binlog压缩与MySQL /raybetapp ,但它可以带来一些缺点。本文讨论了使用binlog压缩的必要性,对其可能造成的潜在问题。
Binlog压缩技术用于减少二进制日志文件的大小,可随着时间的推移变得很大。这可以在磁盘空间有限的情况下尤其重要。然而,重要的是要注意,使用binlog压缩也会导致复制问题。
考虑以下场景:你有恢复备份,来自一个副本节点使用rayben雷竞技 。一旦修复完成,你想设置复制使用来自xtrabackup_slave_info文件的信息。
|
1
2
3
4
5
6
7
|
美元
猫
xtrabackup_slave
_信息
# GTID复制:
集
全球
gtid_purged
=
00022031
- - - - - -
1111年
- - - - - -
1111年
- - - - - -
1111年
- - - - - -
111111111111
:
1
- - - - - -
31781年
;
改变
主
来
MASTER_AUTO_POSITION
=
1
;
#一般与Binlog复制文件和位置:
改变
主
来
MASTER_LOG_FILE
=
“mysql-bin.000053”
,
MASTER_LOG_POS
=
274年
;
|
你为小学和更新命令细节开始复制。
|
1
2
3
4
5
6
7
8
|
# GTID复制
集
全球
gtid_purged
=
00022031
- - - - - -
1111年
- - - - - -
1111年
- - - - - -
1111年
- - - - - -
111111111111
:
1
- - - - - -
31781年
;
改变
主
来
MASTER_HOST
=
“10.0.0.2”
,
MASTER_USER
=
“复制”
,
MASTER_PASSWORD
=
“美元somestrongpas”
,
MASTER_AUTO_POSITION
=
1
;
开始
奴隶
;
#一般与Binlog复制文件和位置:
改变
主
来
MASTER_HOST
=
“10.0.0.2”
,
MASTER_USER
=
“复制”
,
MASTER_PASSWORD
=
“美元somestrongpas”
,
MASTER_LOG_FILE
=
“mysql-bin.000053”
,
MASTER_LOG_POS
=
274年
;
开始
奴隶
;
|
但你有一个错误:
|
1
2
3
4
5
|
# GTID复制
Last_IO_Error
:
得到了
致命的
错误
1236年
从
主
当
阅读
数据
从
二进制
日志
:
”主人无法复制,因为清洗所需的二进制日志。从其他地方复制失踪的事务,或提供一个新的奴隶从备份。考虑增加主人的
年代
二进制
日志
过期
期
。
的
GTID
集
发送
通过
的
奴隶
是
“00022031 - 1111 - 1111 - 1111 - 111111111111:1 - 31781”
,
和
的
失踪
交易
是
“00022031 - 1111 - 1111 - 1111 - 111111111111:1 - 31781””
#一般与Binlog复制文件和位置:
Last_IO_Error
:
得到了
致命的
错误
1236年
从
主
当
阅读
数据
从
二进制
日志
:
“不能打开日志文件”
|
第一步是解压binlog文件并开始复制。如果您使用的是通用与binlog文件复制和位置,你复制应该工作得很好,不需要进行任何更改。
然而,如果你想使用GTID-based复制,故事还没结束。我们需要解决一个复制错误。
|
1
|
Last_IO_Error
:
得到了
致命的
错误
1236年
从
主
当
阅读
数据
从
二进制
日志
:
奴隶是连接使用修改主MASTER_AUTO_POSITION = 1,但主清除包含GTIDs奴隶需要二进制日志。从其他地方复制失踪的事务,或提供一个新的奴隶从备份。考虑增加主人的
年代
二进制
日志
过期
期
。
的
GTID
集
和
的
失踪
清除
交易
是
太
长
来
打印
在
这
消息
。
为
更多的
信息
,
请
看到
的
主
的错误日志或手动GTID_SUBTRACT。”
|
那么,我们能做什么来解决这个问题?
- 最简单的方法来修复这个错误是重新启动主MySQL服务器更新gtid_purged变量。要做到这一点,确保binlog_gtid_simple_recovery =对启用。
后重新启动MySQL,它将检查所有binlogs和更新gtid_purged。开始复制副本节点上,只需执行开始的奴隶;
当然,这种方法并不适合所有人,作为一个主要重启是不推荐的方法,因为它会导致停机时间整个数据库集群。
- 实现这一目标的另一种方法是通过重新配置复制使用二进制日志文件和位置。
确保Master_Log_File和Exec_Master_Log_Pos存在的输出显示STATUSG奴隶。
|
1
2
3
|
停止
奴隶
;
改变
主
来
MASTER_AUTO_POSITION
=
0
;
开始
奴隶
;
|
但是如果你没有它,不要绝望。你可以找到binlogfile /位置未压缩binlog并使用以下命令文件。
注意!——如的输出xtrabackup_slave_info,我们有gtid_purged = 1111 - 1111 - 1111 - 00022031 - 111111111111:1 - 31781,所以我们需要找到下一个GTID,00022031 - 1111 - 1111 - 1111 - 111111111111:31782。
在主节点去binlog目录:
|
1
|
美元
cd
美元
(
mysql
- - - - - -
BNe
“选择@@log_bin_basename”
|
减少
- - - - - -
d
' / '
- - - - - -
f1
- - - - - -
美元
(
mysql
- - - - - -
BNe
“选择@@log_bin_basename”
|
grep
/
- - - - - -
o
|
wc
- - - - - -
l
)
)
|
找到包含这个位置的文件,运行以下命令:
注意:加速这个过程,请提供一个好的binlog文件的范围,如mysql-bin.0 *。
|
1
2
3
4
5
6
|
美元
为
文件
在
美元
(
ls
mysql
- - - - - -
本
。
0
*
)
;
做
回声
美元的文件
;
mysqlbinlog
- - -
base64
- - - - - -
输出
=
解码
- - - - - -
行
- - - - - -
vv
美元的文件
|
grep
“00022031 - 1111 - 1111 - 1111 - 111111111111:31782”
- - - - - -
A15
;
完成
|
grep
“00022031 - 1111 - 1111 - 1111 - 111111111111:31782”
- - - - - -
B1
- - - - - -
A15
mysql
- - - - - -
本
。
000053年
集
@
@
会话
.GTID_NEXT
=
00022031 - 1111 - 1111 - 1111 - 111111111111:31782”
/
*
!
*
/
;
# 274
# 230224 18:20:48服务器id 22031 end_log_pos 386 CRC32 0 x0280d048查询thread_id = 14 exec_time = 0 error_code = 0 Xid = 85设置时间戳= 1677244848 / * ! * /;设置@@session.pseudo_thread_id = 14 / * ! * /;设置@@session。为eign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1168113696/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!C utf8mb4 *//*!*/; SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; /*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/; /*!80016 SET @@session.default_table_encryption=0*//*!*/; create database test2 /*!*/;
|
上面的脚本的输出,我们将binlog文件名和位置。
确定的东西!为了解决这种情况,让我们使用该文件mysql-bin.000053和位置274年。
|
1
2
3
|
停止
奴隶
;
改变
主
来
MASTER_HOST
=
“10.0.0.2”
,
MASTER_USER
=
“复制”
,
MASTER_PASSWORD
=
“美元somestrongpas”
,
MASTER_LOG_FILE
=
“mysql-bin.000053”
,
MASTER_LOG_POS
=
274年
,
MASTER_AUTO_POSITION
=
0
;
开始
奴隶
;
|
我们应该等到复制完全陷入之前切换回GTID-based复制。
|
1
|
停止
奴隶
;
改变
主
来
MASTER_AUTO_POSITION
=
1
;
开始
奴隶
;
|
雷竞技下载官网Percona MySQL是最完整,分布稳定、可伸缩的、安全的MySQL开源解决方案,提供企业级的数据库环境最关键业务应用程序…和它的免费使用!







binlog压缩是谈论什么呢?这是关于手动使用gzip压缩binlog文件吗?那是正常的事情并不能像预期的那样运行。
使用binlog事务压缩,那么这些问题不会发生(https://dev.mysql.com/doc/refman/8.0/en/binary-log-transaction-compression.html)。这是3年前发布。
你好肯尼,
谢谢你的检查的博客。
Binlog压缩,当您使用脚本为您binlary日志基于压缩时间的政策。
这可能是一个简单的cron任务包找到+ gzip或您可以创建相同的脚本:
例子:
# # Binlog压缩文件大于天
15日,45 * * * *根找到/道路/ / binlog maxdepth 1 - type f -mtime + 1 - name”mysql-binlog。? ? ? ? ? ?“- exec gzip {} \;
感谢分享关于内置binlog事务压缩。这是首先需要检查。我很好奇如果启用binlog trx压缩将导致CPU压倒性的副本。
问候,
丹尼斯Subbota。
管理服务,Percona。雷竞技下载官网