1. 什么是table_id
MySQL binlog文件按格式分为文件头部和事件信息。文件头部占4字节,内容固定为:"/xfe/x62/x69/x6e",接下来就是各个event了。event有多种类型,比如ROTATE_EVENT对应的记录了binlog切换到下一个binlog文件的信息,XID_EVENT记录了一个事务提交的相关信息。
binlog_format可以设置为statement和row的方式。当设置为statement情况下,DML会记录为原始的SQL,也就是记录在QUERY_EVENT中。而row会记录为TABLE_MAP_EVENT+ROW_LOG_EVENT(包括WRITE_ROWS_EVENT,UPDATE_ROWS_EVENT,DELETE_ROWS_EVENT)。
binlog_format设置为row时,执行一句insert,对应的binlog如下所示:
为什么一个insert在row模式下需要分解成两个event:一个Table_map,一个Write_rows?假如一个insert更新了10000条数据,那么对应的表结构信息是否需要记录10000次列?其实是对同一个表的操作,所以这里binlog只是记录了一个Table_map用于记录表结构相关信息,而后面的Write_rows记录了更新数据的行信息。他们之间是通过table_id来联系的。
table_id用来做hash key,通过set_table(table_id)的方法将某个表的信息hash到cache中;又可以通过get_table()方法来根据table_id获得对应的表信息。
要注意table_id并不是固定的绑定在一个表上,它是表载入table cache时临时分配的,一个不断增长的变量。
2. table_id的增长机制
连续往同一个table中进行多次DML操作,table_id不变。 一般来说,出现DDL操作时,table_id才会变化。
下图中有3个表(t1、t2、t3),执行flush tables,再进行DML操作,每个表的table_id都在增长。
如果表太多,又有频繁的flush tables,会导致table_id增长比较快。
根据MySQL binlog table_id源码分析 ,可以知道:
table id的变化依赖于table cache中是否存储了binlog操作表的表定义。如果table cache中存在,则table id不变;而当table cache中不存在时,该值根据上一次操作的table id自增1。因此,table id与实际操作的数据表没有直接对应关系,而与操作的数据表是否在table cache中有关。此外,table_definition_cache中默认存放400个表定义,如果超出该范围,会将最久未用的表定义置换出table cache。
3. table_id快速增长的风险
binlog中table_id是一个ulong类型(无符号长整形),在slave进行重做binlog events之前,会先将这个ulong的table_id(为了避免混淆,用m_table_id表示)传给一个它内部维护的一个数据结构RPL_TABLE_LIST,这个里面有一个变量table_id用来存储binlog中的m_table_id,问题出现了:数据结构的变量table_id是一个uint(无符号整形),如果m_table_id超过uint的范围会发生截断。而MySQL内部在构造hash,从hash表中取值是这样的做法:set_table(table_id),get_table(m_table_id),在两个阶段用到的key因为发生了数据截断所以必然也就不能取到预期的值。也就是说之前用uint型的table_id构建出来的key-value的hash对,用ulong型的m_table_id是无法查询到的。
具体的源码分析可以参考:淘宝物流MySQL slave数据丢失详细原因
4. 如何避免table_id的风险
第一,增大table cache
第二,定期检查table_id,其值不能超过uint的范围(重启主库)
第三,将RPL_TABLE_LIST这个内部数据结构里面的table_id类型改为ulong(修改MySQL源码)

Microsoft Word文档在保存时包含一些元数据。这些详细信息用于在文档上识别,例如创建时间、作者是谁、修改日期等。它还具有其他信息,例如字符数,字数,段落数等等。如果您可能想要删除作者或上次修改的信息或任何其他信息,以便其他人不知道这些值,那么有一种方法。在本文中,让我们看看如何删除文档的作者和上次修改的信息。删除微软Word文档中的作者和最后修改的信息步骤 1 –转到

在iOS17中,有一个新的AirDrop功能,让你通过触摸两部iPhone来与某人交换联系信息。它被称为NameDrop,这是它的工作原理。NameDrop允许您简单地将iPhone放在他们的iPhone附近以交换联系方式,而不是输入新人的号码来给他们打电话或发短信,以便他们拥有您的号码。将两个设备放在一起将自动弹出联系人共享界面。点击弹出窗口会显示一个人的联系信息及其联系人海报(您可以自定义和编辑自己的照片,也是iOS17的新功能)。该屏幕还包括“仅接收”或共享您自己的联系信息作为响应的选项。

使用系统信息单击“开始”,然后输入“系统信息”。只需单击程序,如下图所示。在这里,您可以找到大多数系统信息,而显卡信息也是您可以找到的一件事。在“系统信息”程序中,展开“组件”,然后单击“显示”。让程序收集所有必要的信息,一旦准备就绪,您就可以在系统上找到特定于显卡的名称和其他信息。即使您有多个显卡,您也可以从这里找到与连接到计算机的专用和集成显卡相关的大多数内容。使用设备管理器Windows11就像大多数其他版本的Windows一样,您也可以从设备管理器中找到计算机上的显卡。单击“开始”,然后

目前图像 3D 重建工作通常采用恒定自然光照条件下从多个视点(multi-view)捕获目标场景的多视图立体重建方法(Multi-view Stereo)。然而,这些方法通常假设朗伯表面,并且难以恢复高频细节。另一种场景重建方法是利用固定视点但不同点光源下捕获的图像。例如光度立体 (Photometric Stereo) 方法就采用这种设置并利用其 shading 信息来重建非朗伯物体的表面细节。然而,现有的单视图方法通常采用法线贴图(normal map)或深度图(depth map)来表征可

微信收到信息延迟的原因可能是网络问题、服务器负载、版本问题、设备问题、消息发送问题或其他因素等。详细介绍:1、网络问题,微信收到信息的延迟可能与网络连接有关,如果网络连接不稳定或信号弱,可能导致信息传输延迟,请确保手机已经连接到稳定的网络,并且网络信号强度良好;2、服务器负载,当微信服务器负载较高时,可能会导致信息传输的延迟,特别是在繁忙的时间段或大量用户同时使用微信时等等。

在iOS17中,有一项新的AirDrop功能,可让您通过同时触摸两部iPhone来与某人交换联系信息。它被称为NameDrop,这是它的实际工作原理。NameDrop无需输入新人的号码来给他们打电话或发短信,以便他们拥有您的号码,您只需将iPhone靠近他们的iPhone即可交换联系方式。将两台设备放在一起会自动弹出联系人共享界面。点击弹出窗口会显示一个人的联系信息和他们的联系人海报(您可以自定义和编辑的您自己的照片,也是iOS17的新功能)。该屏幕还包括“仅接收”或共享您自己的联系信息作为响应

计算机网络中信息的传递是以“字”为单位的;字是数据传送的基本单位。计算机网络有两个主要功能:数据通信和资源共享,而数据通信中传递的信息均以二进制数据形式来表现。数据通信是依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务。

苹果推出了一种非常快速(如果不是最快的)方式,可以通过NameDrop与另一部iPhone共享您的联系信息。以下是您需要了解的所有信息。什么是NameDrop?iOS17引入了NameDrop,这是一项利用联系人海报的革命性功能。这些个性化的卡片可以为您自己和其他联系人创建,每当您拨打电话时都会出现。通过照片、拟我表情、字母组合等多个可自定义选项,您可以使用首选的配色方案和字体定制您的联系人海报以匹配您的个性。当您的iPhone靠近其他用户时,NameDrop会自动共享您的海报,使双方能够毫不费


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.
