【MHA】MySQL高可用MHA介绍3-命令详解

目录

masterha_manager:运行 MHA Manager 的命令

通用参数

监控特定参数

故障转移特定参数

masterha_master_switch

手动故障转移

非交互式故障转移

计划(在线)主切换

masterha_check_status

masterha_check_repl

masterha_stop

masterha_conf_host

通用参数


masterha_manager:运行 MHA Manager 的命令

可以通过执行 masterha_manager 命令来启动 MHA Manager。

masterha_manager --conf=/etc/conf/masterha/app1.cnf

masterha_manager 接受以下参数。

通用参数

  • --conf=(配置文件路径):应用和本地范围的配置文件路径。此参数是必需的。
  • --global_conf=(全局配置文件路径):全局范围的配置文件路径。默认为 /etc/masterha_default.cnf。
  • --manager_workdir, --workdir:与 manager_workdir 参数相同。
  • --manager_log, --log_output:与 manager_log 参数相同。

监控特定参数

  • --wait_on_monitor_error=(秒):如果在监视过程中发生错误,masterha_manager 将等待 wait_on_monitor_error 秒然后退出。默认为 0 秒(不等待)。此功能主要用于在守护程序脚本中执行自动化主监视和故障转移。在重新启动监视之前等待一段时间以处理错误是合理的。

  • --ignore_fail_on_start:默认情况下,如果一个或多个从服务器宕机,那么主监视(而不是故障转移)过程将停止,而不管 ignore_fail 参数设置如何。通过设置 --ignore_fail_on_start,如果标记为 ignore_fail 的从服务器宕机,则主监视不会停止。

故障转移特定参数

  • --last_failover_minute=(分钟):如果上一次故障转移发生得太近(默认为 8 小时),则 MHA Manager 不会执行故障转移,因为仅通过执行故障转移可能无法解决问题。此参数的目的是避免 ping-pong 故障转移问题。您可以通过更改此参数来更改时间标准。默认值为 480(8 小时)。

    如果设置了 --ignore_last_failover,则忽略此步骤。

  • --ignore_last_failover:如果上一次故障转移失败,则 MHA 不会开始故障转移,因为问题可能再次发生。启动故障转移的正常步骤是手动删除(manager_workdir)/(app_name).failover.error 下创建的故障转移错误文件。

    通过设置 --ignore_last_failover,MHA 会忽略上次故障转移的状态并继续进行故障转移。

  • --wait_on_failover_error=(秒):如果在故障转移过程中发生错误,MHA Manager 将等待 wait_on_failover_error 秒然后退出。默认为 0 秒(不等待)。此功能主要用于在守护程序脚本中执行自动化主监视和故障转移。在重新启动监视之前等待一段时间以处理错误是合理的。

  • --remove_dead_master_conf:当设置此选项时,如果故障转移成功完成,MHA Manager 将自动从配置文件中删除故障的主服务器部分。例如,如果死亡的主服务器的主机名为 host1,它属于 server1 部分,那么 server1 的整个部分将从配置文件中删除。默认情况下,配置文件不会被修改。在 MHA 完成故障转移后,死亡主服务器的部分仍然存在。如果立即启动 masterha_manager(这包括任何守护程序程序的自动重新启动),masterha_manager 将以 "存在死掉的从服务器"(先前的死掉的主服务器)错误停止。您可能希望更改此行为,特别是如果要连续自动监视和故障转移 MySQL 主服务器的话。在这种情况下,--remove_dead_master_conf 参数很有帮助。

masterha_master_switch

masterha_manager 是一个同时监视并进行主故障转移的程序。另一方面,masterha_master_switch 程序不监视主服务器。masterha_master_switch 可用于主故障转移,也可用于在线主切换。

手动故障转移

有时您可能想要手动执行故障转移。可以使用 masterha_master_switch 命令来执行手动故障转移。以下是一个示例。

$ masterha_master_switch --master_state=dead --conf=/etc/app1.cnf --dead_master_host=host1

虽然 masterha_manager 命令会自动监视主服务器并执行故障转移,但 masterha_master_switch 旨在用于手动故障转移。masterha_master_switch 接受以下参数。

--master_state=dead

这是一个必需的参数。--master_state 接受 "dead" 或 "alive"。如果设置为 "alive",masterha_master_switch 将开始在线主切换操作。在这种情况下,原始主服务器必须存活。

--dead_master_host=(主机名)

死掉的主服务器的主机名。这也是一个必需的参数。--dead_master_ip 和 --dead_master_port 也可以选择设置。如果未设置这些参数,则 --dead_master_ip 将是 gethostbyname(dead_master_host) 的结果,--dead_master_port 将是 3306。

--new_master_host=(主机名)

新主服务器的主机名。此参数是可选的。当您希望显式设置新主机时(这意味着您不希望让 MHA 自动确定新主机)时,此参数很有用。如果未设置 new_master_host,则 MHA 根据与自动故障转移相同的规则确定新主机(检查 candidate_master 参数等)。如果设置了 new_master_host,则 MHA 将确定主机为新主机。如果主机不能成为新主机(例如,未启用日志二进制),则 MHA 会中止。

--new_master_port=(端口号)

新主服务器上 mysql 实例的监听端口。此参数是可选的。与 --new_master_host 选项一起使用,如果目标主服务器端口不是默认的 3306。

--interactive=(0|1)

如果要执行下面描述的非交互式故障转移,请设置 --interactive=0。默认值为 1(交互式)。

--ssh_reachable=(0|1|2)

指定主服务器是否可通过 SSH 访问。如果不可访问,请设置为 0;如果可访问,请设置为 1;如果未知,请设置为 2。默认值为 2。如果设置为 2,则命令内部会检查主服务器是否可通过 SSH 访问,并将内部 SSH 状态更新为 0 或 1。如果主服务器可通过 SSH 访问,并且设置了 master_ip_failover_script 或 shutdown_script,则命令会传递 "--command=stopssh"。如果未设置,则 masterha_master_switch 传递 "--command=stop"。此外,如果崩溃的主服务器可通过 SSH 访问,则故障转移脚本会尝试从崩溃的主服务器复制未发送的二进制日志。

--skip_change_master

在故障转移时设置此参数,MHA 在应用差异中终止后退出,并跳过 CHANGE MASTER 和 START SLAVE。因此,从服务器不会指向新主服务器。如果您想要手动双重检查从服务器恢复是否成功,这可能有所帮助。

--skip_disable_read_only

通过传递此参数,MHA 跳过在新主服务器上执行 SET GLOBAL read_only=0。当您想要手动禁用。

--last_failover_minute=(分钟)

与 masterha_manager 相同。

--ignore_last_failover

与 masterha_manager 相同。

--wait_on_failover_error=(秒)

与 masterha_manager 相同。

请注意,此参数仅适用于自动/非交互式故障转移,不适用于交互式故障转移。也就是说,如果未设置 --interactive=0,则 wait_on_failover_error 简单地被忽略,并且在出现错误时不会休眠。

--remove_dead_master_conf

与 masterha_manager 相同。

masterha_master_switch 默认运行交互式故障转移过程。您需要从键盘键入 "yes",如下所示。

... Starting master switch from host1(192.168.0.1:3306) to host2(192.168.0.2:3306)? (yes/NO): yes ...

如果未设置 --new_master_host,则新主服务器由与自动故障转移相同的规则确定。当您运行手动故障转移时,您可以选择显式设置新主服务器。以下是一个示例。

Starting master switch from host1(192.168.0.1:3306) to host2(192.168.0.2:3306)? (yes/NO): no Continue? (yes/NO): yes Enter new master host name: host5 Master switch to gd1305(10.17.1.238:3306). OK? (yes/NO): yes ...

在这种情况下,host5 将成为新主服务器,只要启用了二进制日志记录并且主版本不高于其他从服务器。以下命令与上述命令具有相同的效果。

$ masterha_master_switch --master_state=dead --conf=/etc/app1.cnf --dead_master_host=host1 --new_master_host=host5

--wait_until_gtid_in_sync(0|1)

此选项自 0.56 版本开始提供。

在执行基于 GTID 的故障转移时,如果设置 wait_until_gtid_in_sync=1,则 MHA 将等待从服务器追赶新主服务器的 GTID。如果设置为 0,则 MHA 不会等待从服务器追赶。默认为 1。

--skip_change_master

此选项自 0.56 版本开始提供。

如果设置了此选项,则 MHA 跳过执行 CHANGE MASTER。

--skip_disable_read_only

此选项自 0.56 版本开始提供。

如果设置了此选项,则 MHA 跳过在新主服务器上执行 SET GLOBAL read_only=0。

--ignore_binlog_server_error

此选项自 0.56 版本开始提供。

如果设置了此选项,则 MHA 在故障转移期间忽略来自 binlog 服务器的任何错误。

非交互式故障转移

如果在 masterha_master_switch 中设置 "--interactive=0",它会自动执行故障转移(非交互式)。

$ masterha_master_switch --master_state=dead --conf=/etc/conf/masterha/app1.cnf --dead_master_host=host1 --new_master_host=host2 --interactive=0

这实际上与 masterha_manager 内部运行的相同。如果已经验证了主服务器已死,但希望尽快执行故障转移,则非交互式故障转移很有用。如果您使用其他现有的主监视软件,并希望从该软件中调用非交互式故障转移命令,则非交互式故障转移也很有用。典型的例子是从 Pacemaker 等群集软件调用 masterha_master_switch。

计划(在线)主切换

有时您可能希望进行计划的主切换,即使当前主服务器正在运行。典型的例子是更换部分损坏的硬件或升级主服务器。您无法更换 RAID 控制器或增加内存而不停止服务器。在这种情况下,您需要分配计划维护时间,并且必须将主服务器迁移到不同的服务器。

masterha_master_switch 命令可用于运行计划的主切换。

$ masterha_master_switch --master_state=alive --conf=/etc/app1.cnf --new_master_host=host2

必须设置 --master_state=alive。计划主切换的程序流与主故障转移略有不同。例如,您无需关闭主服务器,但需要确保不会在主服务器上执行写查询。通过设置 master_ip_online_change_script,您可以控制如何在执行 FLUSH TABLES WITH READ LOCK 之前禁止当前主服务器上的写流量(例如,删除可写用户,设置 read_only=1 等),以及如何在新主服务器上允许写流量。

仅当满足以下所有条件时,在线主切换才会启动。

  • 所有从服务器上的 IO 线程正在运行
  • 所有从服务器上的 SQL 线程正在运行
  • 所有从服务器上的 Seconds_Behind_Master 小于或等于 --running_updates_limit 秒
  • 在主服务器上,没有更新查询花费的时间超过 --running_updates_limit 秒在 show processlist 输出中 这些限制的原因是出于安全考虑,以及尽快切换到新主服务器。在切换主服务器时,masterha_master_switch 在切换主服务器时采用以下参数。

--new_master_host=(主机名)

新主服务器的主机名。

--orig_master_is_new_slave

主切换完成后,先前的主服务器将作为新主服务器的从服务器运行。默认情况下,此选项已禁用(先前的主服务器不会加入新的复制环境)。如果使用此选项,则需要在配置文件中设置 repl_password 参数,因为当前主服务器不知道新主服务器的复制密码。

--running_updates_limit=(秒)

如果当前主服务器执行的写查询花费的时间超过此参数,或任何 MySQL 从服务器落后于主服务器超过此参数,则主切换将中止。默认为 1(1 秒)。

--remove_orig_master_conf

当设置此选项时,如果主切换成功完成,MHA Manager 将自动从配置文件中删除死掉的主服务器的部分。默认情况下,配置文件不会被修改。

--skip_lock_all_tables

在进行主切换时,MHA 在 orig 主服务器上运行 FLUSH TABLES WITH READ LOCK,以确保更新确实已停止。但是 FLUSH TABLES WITH READ LOCK 的成本很高,如果您可以确保 orig 主服务器上没有更新(通过在 master_ip_online_change_script 中杀死所有客户端等),则可以通过使用此参数避免锁定表。

masterha_check_status

检查管理器状态使用 masterha_check_status 命令,以确定管理器是否正确监控 MySQL 主服务器。以下是一个示例。

$ masterha_check_status --conf=/path/to/app1.cnf
app1 (pid:8368) is running(0:PING_OK), master:host1
$ echo $?
0

当 MHA 管理器成功监控 MySQL 主服务器时,应像上面一样返回状态码(退出码)0。

以下是所有状态码和描述:

Status Code (Exit code)Status StringDescription
0PING_OKMaster is running and MHA Manager is monitoring. Master state is alive.
1---Unexpected error happened. For example, config file does not exist. If this error happens, check arguments are valid or not.
2NOT_RUNNINGMHA Manager is not running. Master state is unknown.
3PARTIALLY_RUNNINGMHA Manager main process is not running, but child processes are running. This should not happen and should be investigated. Master state is unknown.
10INITIALIZING_MONITORMHA Manager is just after startup and initializing. Wait for a while and see how the status changes. Master state is unknown.
20PING_FAILINGMHA Manager detects ping to master is failing. Master state is maybe down.
21PING_FAILEDMHA Manager detects either a) ping to master failed three times, b) preparing for starting master failover. Master state is maybe down.
30RETRYING_MONITORMHA Manager internal health check program detected that master was not reachable from manager, but after double check MHA Manager verified the master is alive, and currently waiting for retry. Master state is very likely alive.
31CONFIG_ERRORThere are some configuration problems and MHA Manager can't monitor the target master. Check a logfile for detail. Master state is unknown.
32TIMESTAMP_OLDMHA Manager detects that ping to master is ok but status file is not updated for a long time. Check whether MHA Manager itself hangs or not. Master state is unknown.
50FAILOVER_RUNNINGMHA Manager confirms that master is down and running failover. Master state is dead.
51FAILOVER_ERRORMHA Manager confirms that master is down and running failover, but failed during failover. Master state is dead.

masterha_check_repl

通过 masterha_check_repl 检查 MySQL 复制健康状态 以下是一个示例。

manager_host$ masterha_check_repl --conf=/etc/app1.cnf
...
MySQL Replication Health is OK.

masterha_check_repl 连接配置文件中定义的所有 MySQL 服务器,然后检查复制是否正常工作。该命令与 masterha_manager 不冲突。您可以在 masterha_manager 工作时(监视当前主服务器)运行此命令。如果您想定期检查复制设置,这个命令非常有用。在 masterha_manager 监视 MySQL 主服务器后,它只检查主服务器的可用性。通过定期运行 masterha_check_repl 并在出现错误时发送警报(例如 SQL 线程停止),您将能够快速解决复制问题。

当检测到任何复制失败时,masterha_check_repl 返回错误。复制失败包括以下内容:

  • 所有 MHA 无法监视/故障转移的复制失败(复制过滤规则不同,SQL 线程以错误停止,如果您有两个或更多主服务器等)
  • IO 线程已停止
  • SQL 线程正常停止
  • 复制延迟超过 N 秒

除了 --conf 之外,masterha_check_repl 还接受以下参数。

--seconds_behind_master=(seconds)

masterha_check_repl 检查所有从服务器的 Seconds_Behind_Master,并且如果超过阈值则返回错误。默认值为 30(秒)。

--skip_check_ssh

默认情况下,masterha_check_repl 执行与 masterha_check_ssh 相同的检查脚本。如果您确定不需要 SSH 连接检查,请使用此选项。

masterha_stop

停止管理器 masterha_stop 您可以通过 masterha_stop 命令停止 MHA 管理器。

manager_host$ masterha_stop --conf=/etc/app1.cnf
Stopped app1 successfully.

masterha_stop 不会停止 MySQL 服务器,只会停止对MySQL的监控。

如果无法停止(例如挂起),请添加 "--abort" 参数。然后将 SIGKILL(-9) 发送到该进程及其所有子进程。

当当前管理器状态为 FAILOVER_RUNNING(正在运行故障转移操作)时,脚本会在不停止管理器进程的情况下退出(--abort 也会被忽略)。这是出于安全考虑。在中途停止故障转移将导致不一致的复制设置,应尽量避免。

如果您手动终止管理器进程(从 shell 发送 kill),进程会停止,但请确保它不处于故障转移阶段。

masterha_conf_host

masterha_conf_host 是一个辅助脚本,用于从配置文件中自动添加/删除主机条目。在某些情况下,您可能希望自动从配置文件中添加/删除主机条目。例如,当您设置新的从服务器时,您可以像下面这样简单地添加新的主机条目。

# masterha_conf_host --command=add --conf=/etc/conf/masterha/app1.cnf --hostname=db101

然后,以下行将被添加到配置文件中。

[server_db101] hostname=db101

请注意,新配置文件中的所有注释、空白等都将被修剪。

您可以通过传递以分号(;)分隔的 --param 参数,在配置文件中添加多个参数。

# masterha_conf_host --command=add --conf=/etc/conf/masterha/app1.cnf --hostname=db101 --block=server100 --params="no_master=1;ignore_fail=1"

以下行将被添加到配置文件中。

[server100] hostname=db101 no_master=1 ignore_fail=1

您还可以删除指定的块。以下命令将删除整个块 server100

# masterha_conf_host --command=delete --conf=/etc/conf/masterha/app1.cnf --block=server100

masterha_conf_host接受以下参数。

通用参数

--command=(add|delete)

要添加(--command=add)或删除(--command=delete)一个块到/从配置文件中。此参数是必需的。

--conf=(配置文件路径)

应用程序和本地范围配置文件。此参数是必需的。

--hostname=(主机名)

将要添加的块的目标主机名。当设置 --command=add 时,此参数是必需的。

--block=(块名称)

配置文件的块名称。在添加块时,块名称不能与配置文件中现有的块名称相同。在删除块时,块名称必须存在于配置文件中。如果未设置 --block,则块名称将为 "server_$hostname"。_

--params=(key1=value1;key2=value2;...)

参数列表,以分号分隔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud学习笔记(Feign):配置类(未完成)

这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、给Feign配置的方式1.1、通过Bean配置1.2、application.yaml配置 2、配置日志2.1、日志级别1.2、指定日志级别1.2.1、通过Bean配置1.2.2、application.yaml配置 3、Inteceptor配置 1、给Feign配置的方式 我们有…

牛客NC99 多叉树的直径【较难 深度优先 Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/a77b4f3d84bf4a7891519ffee9376df3 思路 核心就是树的最大直径(globalMax)一定是以某一个node为root最长的两个path-to-leaf. 就是普通dfs的同时算路径长度。时间: O(n), DFS一次 空间: O(n)参考答案Java impo…

stm32的GPIO基本结构

1.带FT标号的引脚能容忍5V 2.GPIO系统架构 stm32的所有GPIO都是挂载在APB2总线上的 3.GPIO的基本结构 在上图中,左边就是寄存器,右边就是驱动器了 保护二极管的作用:VDD表示3.3V,如果输入的电压的值大于3.3V,那么这个…

企业级OV SSL证书,主要应用在哪些场景

我们来看看OV SSL证书的一个典型应用,即电子商务网站。随着电子商务的发展,网上购物已经成为人们日常生活的一部分。然而,这同时也带来了一个问题,就是用户在进行网上交易时,如何保证其个人信息、银行卡信息等敏感数据…

就业班 第三阶段(nginx) 2401--4.26 day5 nginx5 nginx https部署实战

三、HTTPS 基本原理 1、https 介绍 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。 近些年&…

免费实用在线小工具

免费在线工具 https://orcc.online/ pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/ha…

Python 使用相对路径读取文件失败

python open一个问及那时使用绝对路径可以,但是使用相对路径时报错,找不到指定文件 解决步骤如下: 添加Python配置 在新增的配置Json文件添加下图红框这一行

知网怎么查重 知网查重的详细步骤

知网查重八个步骤:1. 访问官网,注册账号。2. 上传待查文档。3. 选择查重规则。4. 选择相似来源库。5. 提交查重任务。6. 等待查重结果。7. 获取查重报告。8. 下载查重报告。 知网查重的详细步骤 第一步:进入知网查重系统 打开浏览器&#x…

27.统一网关Gateway-路由断言工厂

在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件。 例如:Path /user/** 是按照路劲匹配,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRouteP…

目标检测——3D玩具数据集

在数字化时代,计算机视觉技术取得了长足的进展,其中基于形状的3D物体识别技术更是引起了广泛关注。该技术不仅有助于提升计算机对现实世界物体的感知能力,还在多个领域展现出了广阔的应用前景。本文将探讨基于形状的3D物体识别实验的重要性意…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式,该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

从阿里云迁移Redis到AWS的规划和前期准备

在将Redis实例从阿里云迁移到AWS之前,需要进行全面的规划和前期准备。以下九河云提供一些重要的步骤和注意事项: 1. 评估Redis使用情况 首先,您需要评估当前Redis实例的使用情况,包括实例规格、内存使用量、吞吐量、访问模式等。这将有助于选择合适的AWS Redis产品和实例类型…

一键设置jdk环境脚本

自动化脚本 一、使用方法 创建一个txt文本,放在和jdk存放的同一目录下,复制粘贴进我的代码,利用全局替换,将jdk1.8,改成你自己的jdk包名字,再重新把这个文件保存为.vbs文件。然后运行就行了 MsgBox "Runing s…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 1.翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令) 2.执行环境,它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…

Windows系统中下Oracle 19C数据库超级详细安装、设置教程(自己电脑上安装Oracle学习,保姆级教学,亲测有效)

Oracle 官方提供了一个基于 Java 技术的图形界面安装工具:Oracle Universal Installer(Oracle 通用安装器)简称 OUI,利用它可以完成在不同操作系统平台上(Windows、Linux、UNIX)的、不同类型的、不同版本的…

历时三年,花了200万,小米换的新标值这个价吗?

原创 航通社 航通社 收录于话题#小米1#小米新logo1#营销1 以及为什么要搞一套“设计哲学” 航通社首发原创文章,未经授权禁止转载 微博:航通社 | 微信搜一搜:2021年 第12期 文 / 书航 2021.3.31 小米集团宣布了 10 年来的首次标识&#x…

uni-app canvas 签名

调用方法 import Signature from "/components/signature.vue" const base64Img ref() //监听getSignImg uni.$on(getSignImg, ({ base64, path }) > {base64Img.value base64//console.log(签名base64, path >, base64, path) //拿到的图片数据// 之后取消…

Levenberg-Marquardt (LM) 算法进行非线性拟合

目录 1. LM算法2. 调包实现3. LM算法实现4. 源码地址 1. LM算法 LM算法是一种非线性最小二乘优化算法,用于求解非线性最小化问题。LM主要用于解决具有误差函数的非线性最小二乘问题,其中误差函数是参数的非线性函数,需要通过调整参数使误差函…

Vue Canvas图片水印的绘制 图片加水印

效果 定义画布 <canvas width"800" height"800" ref"cn" ></canvas>绘制水印 draw(){const img new Image()img.srchttps://img1.baidu.com/it/u3035183739,1826404114&fm253&fmtauto&app138&fJPEGimg.onload(()…

pyqt 动态更换表头和数据

目录 pyqt 动态更换表头和数据代码 效果图&#xff1a; pyqt 动态更换表头和数据代码 from PyQt5.QtGui import QColor, QBrush from PyQt5.QtWidgets import QApplication, QTableWidget, QVBoxLayout, QWidget, QPushButton, QTableWidgetItemclass Example(QWidget):def _…