submit怎么做网站网站生成app
功能
pt-heartbeat - 监控 MySQL 复制延迟。
用法
pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
pt-heartbeat 用于测量 MySQL 或 PostgreSQL 服务器上的复制延迟。您可以使用它来更新主服务器或监控从服务器。如果可能,MySQL 连接选项将从您的 .my.cnf 文件中读取。
启动守护进程以在主服务器上更新 test.heartbeat 表:
pt-heartbeat -D test --update -h master-server --daemonize
在从服务器上监控复制延迟:
pt-heartbeat -D test --monitor -h slave-serverpt-heartbeat -D test --monitor -h slave-server --dbi-driver Pg
检查从服务器延迟一次并退出(使用可选的 DSN 指定从服务器主机):
pt-heartbeat -D test --check h=slave-server
风险
Percona Toolkit 是成熟的、在真实世界中经过验证的,并且经过了充分测试,但所有数据库工具都可能对系统和数据库服务器造成风险。在使用此工具之前,请:
- 阅读工具的文档
- 查看工具已知的“BUG”
- 在非生产服务器上测试该工具
- 备份您的生产服务器并验证备份
描述
pt-heartbeat 是一个两部分的 MySQL 和 PostgreSQL 复制延迟监控系统,通过查看实际复制的数据来测量延迟。这避免了对复制机制本身(例如 MySQL 的 SHOW SLAVE STATUS)的依赖,因为它是不可靠的。
SHOW SLAVE STATUS 为什么不可靠?
第一部分是 pt-heartbeat 的 --update 实例,连接到主服务器并每 --interval 秒更新一个时间戳(“心跳记录”)。由于心跳表可能包含来自多个主服务器的记录(参见“多从层次结构”),服务器的 ID(@@server_id)用于标识记录。
第二部分是 pt-heartbeat 的 --monitor 或 --check 实例,连接到从服务器,检查来自其直接主服务器或指定的 --master-server-id 的复制的心跳记录,并计算与当前系统时间的差异。如果从服务器和主服务器之间的复制延迟或中断,则计算的差异将大于零,并且如果指定了 --monitor,可能会增加。
您必须手动在主服务器上创建心跳表,或者使用 --create-table。请参阅 --create-table 以获取正确的心跳表结构。建议使用 MEMORY 存储引擎,但对于 MySQL 当然不是必需的。
心跳表必须包含一个心跳行。默认情况下,如果不存在心跳行,则会插入一个心跳行。如果数据库用户没有 INSERT 权限,则可以使用 --[no]insert-heartbeat-row 选项禁用此功能。
pt-heartbeat 仅依赖于复制到从服务器的心跳记录,因此无论复制机制如何(内置复制、Continuent Tungsten 等系统),都可以工作。它在复制层次结构中的任何深度都可以工作;例如,它将可靠地报告从服务器落后于其主服务器的主服务器的主服务器。如果复制停止,它将继续工作并报告(准确地!)从服务器与主服务器之间的延迟越来越大。
pt-heartbeat 的最大分辨率为 0.01 秒。主服务器和从服务器的时钟必须通过 NTP 进行紧密同步。默认情况下,--update 检查在秒的边缘发生(例如 00:01),--monitor 检查发生在秒的中间(例如 00:01.5)。只要服务器的时钟保持紧密同步,复制事件在半秒内传播,pt-heartbeat 就会报告零秒延迟。
如果连接出现错误,pt-heartbeat 将尝试重新连接,但如果在首次启动时无法获得连接,则不会重试。
--dbi-driver 选项允许您使用 pt-heartbeat 监视 PostgreSQL。据报道,它与 Slony-1 复制很好地配合使用。
级联复制结构
如果复制层次结构中有多个从服务器,这些从服务器又是其他从服务器的主服务器,例如“主服务器 -> 从服务器1 -> 从服务器2”,则可以在从服务器以及主服务器上运行 --update 实例。默认的心跳表(参见 --create-table)是根据 server_id 列进行索引的,因此每个服务器都将更新 server_id=@@server_id 的行。
对于 --monitor 和 --check,如果未指定 --master-server-id,则工具尝试发现并使用从服务器的直接主服务器。如果此失败,或者如果您想要监视来自另一个主服务器的延迟,则可以指定 --master-server-id 来使用。
例如,如果复制层次结构是“主服务器 -> 从服务器1 -> 从服务器2”,对应的服务器 ID 分别是 1、2 和 3,您可以:
pt-heartbeat --daemonize -D test --update -h master
pt-heartbeat --daemonize -D test --update -h slave1
从服务器1 然后检查(或监视)从主服务器到从服务器2的复制延迟:
pt-heartbeat -D test --master-server-id 1 --check slave2
从服务器2 或者检查从从服务器1到从服务器2的复制延迟:
pt-heartbeat -D test --master-server-id 2 --check slave2
从服务器2 停止在从服务器1上的 --update 实例不会影响主服务器上的实例。
主服务器和从服务器状态
默认的心跳表(参见 --create-table)具有保存 SHOW MASTER STATUS 和 SHOW SLAVE STATUS 信息的列。这些列是可选的。如果存在任何列,它们对应的信息将被保存。
参数详解
至少指定 --stop、--update、--monitor 或 --check 中的一个。
--update、--monitor 和 --check 三者互斥。
--daemonize 和 --check 互斥。
此工具接受额外的命令行参数。有关详细信息,请参阅“SYNOPSIS”和使用信息。
--ask-pass
连接到 MySQL 时提示输入密码。
--charset
缺省:-A;类型:字符串
默认字符集。如果值为 utf8,则设置 Perl 的 STDOUT 的 binmode 为 utf8,将 mysql_enable_utf8 选项传递给 DBD::mysql,并在连接到 MySQL 后运行 SET NAMES UTF8。任何其他值都会在连接到 MySQL 后设置 STDOUT 的 binmode,但不使用 utf8 层,并在连接到 MySQL 后运行 SET NAMES。
--check
检查一次从服务器的延迟并退出。如果还指定了 --recurse,则工具将尝试发现给定从服务器的从服务器,并检查并打印它们的延迟。在打印延迟之前,会打印每个从服务器的主机名或 IP 和端口。--recurse 仅适用于 MySQL。
--check-read-only
检查服务器是否启用了 read_only;如果启用了,工具将跳过执行任何插入操作。另请参阅 --read-only-interval。
--config
类型:数组
读取此逗号分隔的配置文件列表;如果指定了此选项,则必须将其作为命令行上的第一个选项。
--create-table
如果不存在,创建心跳 --table。
此选项会导致使用以下 MAGIC_create_heartbeat 表定义创建由 --database 和 --table 指定的表:
CREATE TABLE heartbeat (ts varchar(26) NOT NULL,server_id int unsigned NOT NULL PRIMARY KEY,file varchar(255) DEFAULT NULL, -- SHOW MASTER STATUSposition bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUSrelay_master_log_file varchar(255) DEFAULT NULL, -- SHOW SLAVE STATUSexec_master_log_pos bigint unsigned DEFAULT NULL -- SHOW SLAVE STATUS
);
心跳表至少需要一行记录。如果您手动创建了心跳表,则必须执行以下操作来插入一行记录:
INSERT INTO heartbeat (ts, server_id) VALUES (NOW(), N);
如果使用 --utc 参数,则执行以下操作:
INSERT INTO heartbeat (ts, server_id) VALUES (UTC_TIMESTAMP(), N);
其中 N 是服务器的 ID;不要使用 @@server_id,因为它会被复制,从服务器将插入自己的服务器 ID 而不是主服务器的服务器 ID。
这将由 --create-table 参数自动完成。
仍然支持一种传统版本的心跳表:
CREATE TABLE heartbeat (id int NOT NULL PRIMARY KEY,ts datetime NOT NULL
);
传统表不支持在多个从服务器层次结构(例如“主服务器 -> 从服务器1 -> 从服务器2”)的每个从服务器上进行 --update 实例。要手动向传统表中插入所需的一行记录,请执行以下操作:
INSERT INTO heartbeat (id, ts) VALUES (1, NOW());
如果使用 --utc 参数,则执行以下操作:
INSERT INTO heartbeat (id, ts) VALUES (1, UTC_TIMESTAMP());
--create-table-engine
指定用于心跳表的存储引擎。默认的存储引擎是 InnoDB,适用于 MySQL 5.5.5 及以上版本。
--daemonize
在后台进行分叉并与 shell 分离。仅适用于 POSIX 操作系统。
--database
short form: -D; type: string
用于连接的数据库。
--dbi-driver
默认值:mysql;类型:字符串
指定连接的驱动程序;支持 mysql 和 Pg。
--defaults-file
short form: -F; type: string
仅从给定文件中读取 mysql 选项。您必须提供绝对路径名。
--file
类型:字符串
将最新的 --monitor 输出打印到此文件。
当使用 --monitor 时,将输出打印到指定的文件中,而不是 STDOUT。该文件在每次间隔时打开、截断并关闭,因此它只包含最新的统计信息。在使用 --daemonize 时很有用。
--frames
类型:字符串;默认值:1m,5m,15m
平均值的时间段。
在给定 --monitor 时指定计算移动平均值的时间段。以逗号分隔的数字列表形式指定。后缀可以是 s 表示秒,m 表示分钟,h 表示小时,或 d 表示天。最大帧的大小确定了最大内存使用量,因为在内存中保留了指定数量的每秒样本以计算平均值。您可以指定任意数量的时间段。
--help
显示帮助并退出。
--host
short form: -h; type: string
连接到主机。
--[no]insert-heartbeat-row
默认值:yes
如果 --table 中不存在心跳行,则插入一行心跳行。
心跳 --table 需要一个心跳行,否则没有东西可以 --update、--monitor 或 --check!默认情况下,如果尚未存在心跳行,则工具将插入一个心跳行。如果数据库用户没有 INSERT 权限,可以通过指定 --no-insert-heartbeat-row 来禁用此功能。
--interval
类型:浮点数;默认值:1.0
更新或检查心跳 --table 的频率。更新和检查从第一个整秒开始,然后每隔 --interval 秒进行一次 --update,每隔 --interval 加上 --skew 秒进行一次 --monitor。
例如,如果在 00:00.4 开始一个 --update 实例,间隔为 0.5 秒,则第一个更新将在 00:01.0 发生,下一个将在 00:01.5 发生,依此类推。如果在 00:10.7 开始一个 --monitor 实例,间隔为 0.05 秒,并且默认的 0.5 秒 --skew,则第一次检查将在 00:11.5(00:11.0 + 0.5)进行,这将是距离最后一次更新 --update 工作间隔的 --skew 秒,因为实例是以同步间隔进行检查的,它发生在 00:11.0。
工具在更新或检查之前等待并从第一个整秒开始,以简化间隔计算。因此,工具可能在更新或检查之前等待最多 1 秒。
最小(最快)间隔为 0.01,最大精度为两位小数,因此 0.015 将四舍五入为 0.02。
如果使用传统的心跳表(见 --create-table),则最大精度为 1s,因为 ts 列的类型是 datetime。
--log
类型:字符串
将所有输出打印到此文件中。
当进行守护化时,将输出打印到指定的文件中。
--master-server-id
类型:字符串
计算 --monitor 或 --check 的延迟从此主服务器 ID。如果未给出,则 pt-heartbeat 尝试连接到服务器的主服务器并确定其服务器 ID。
--monitor
持续监视从服务器延迟。
指定 pt-heartbeat 应该每秒检查一次从服务器的延迟,并报告到 STDOUT(或如果给出了 --file,则报告到文件)。输出是当前延迟,然后是给定的 --frames 中时间段的移动平均值。例如,
5s [ 0.25s, 0.05s, 0.02s ]
--fail-successive-errors
类型:整数
如果指定,则 pt-heartbeat 将在给定数量的连续 DBI 错误后失败(无法连接到服务器或发出查询)。
--password
short form: -p; type: string
连接时使用的密码。如果密码包含逗号,则必须用反斜杠转义:“exam,ple”
--pid
类型:字符串
创建给定的 PID 文件。如果 PID 文件已存在并且其中包含的 PID 与当前 PID 不同,则工具不会启动。但是,如果 PID 文件存在并且其中包含的 PID 不再运行,则工具将用当前 PID 覆盖 PID 文件。工具退出时,PID 文件会自动删除。
--port
short form: -P; type: int
用于连接的端口号。
--print-master-server-id
打印自动检测或给定的 --master-server-id。如果指定了 --check 或 --monitor,则指定此选项将在每行的末尾打印自动检测到或给定的 --master-server-id。
--read-only-interval
类型:整数
当指定了 --check-read-only 时,发现服务器为只读时的间隔。如果未指定,则使用 --interval。
--recurse
类型:整数
在 --check 模式下递归检查从服务器的深度。
尝试递归地发现从服务器,直到指定的深度。在发现服务器之后,对每个服务器运行检查,并打印主机名(如果可能),然后是从服务器延迟。
目前,此功能仅适用于 MySQL。请参阅 --recursion-method。
--recursion-method
类型:数组;默认值:processlist,hosts
用于查找从服务器的首选递归方法。
可能的方法包括:
METHOD USES
=========== ==================
processlist SHOW PROCESSLIST
hosts SHOW SLAVE HOSTS
none Do not find slaves
不查找从服务器 processlist 方法优先,因为 SHOW SLAVE HOSTS 不可靠。但是,如果服务器使用非标准端口(不是 3306),则需要使用 hosts 方法。通常情况下,pt-heartbeat 会找到从服务器,但是您可以给出首选方法,它将首先使用。如果找不到任何从服务器,则会尝试其他方法。
--replace
在 --update 中使用 REPLACE 而不是 UPDATE。
在 --update 模式下运行时,使用 REPLACE 而不是 UPDATE 来设置心跳表的时间戳。REPLACE 语句是 MySQL 对 SQL 的扩展。当您不知道表是否包含任何行时,此选项非常有用。它必须与 --update 一起使用。
--run-time
类型:时间
运行的时间,然后退出。
--sentinel
类型:字符串;默认值:/tmp/pt-heartbeat-sentinel
如果此文件存在,则退出。
--slave-user
类型:字符串
设置要用于连接到从服务器的用户。此参数允许您在从服务器上使用一个具有较少权限的不同用户,但该用户必须存在于所有从服务器上。
--slave-password
类型:字符串
设置要用于连接到从服务器的密码。可以与 --slave-user 一起使用,用户的密码必须在所有从服务器上相同。
--set-vars
类型:数组
设置此逗号分隔的变量=值对的 MySQL 变量。
默认情况下,工具设置:
wait_timeout=10000
命令行中指定的变量将覆盖这些默认值。例如,指定 --set-vars wait_timeout=500 将覆盖 10000 的默认值。
如果无法设置变量,则工具会打印警告并继续执行。
--skew
类型:浮点数;默认值:0.5
延迟检查的时间。
默认情况下,将延迟检查半秒钟。由于更新尽快在主服务器的第二秒开始后发生,这允许一秒钟的复制延迟,然后报告从服务器比主服务器落后一秒钟。如果您的时钟不完全准确或有其他原因需要延迟从服务器更长或更短时间,可以调整此值。尝试将 PTDEBUG 环境变量设置为查看此选项的影响。
--stop
通过创建 sentinel 文件来停止运行的实例。
这应该有助于优雅地停止必要的 cron 作业,或者替换一个正在运行的实例。例如,如果您想每小时停止并重新启动 pt-heartbeat(只是为了确保每小时重新启动一次,在服务器崩溃或其他问题时),您可以使用类似以下的 cron 行:
0 * * * * :program:`pt-heartbeat` --update -D test --stop \--sentinel /tmp/pt-heartbeat-hourly
非默认的 --sentinel 将确保每小时 cron 作业仅停止以前使用相同选项(即从相同的 cron 作业)启动的实例。
另请参阅 --sentinel。
--table
类型:字符串;默认值:heartbeat
用于心跳的表。
不要指定 database.table;使用 --database 指定数据库。
请参阅 --create-table。
--update
更新主服务器的心跳。
--utc¶ 忽略系统时区,仅使用 UTC。默认情况下,pt-heartbeat 不会检查或调整不同系统或 MySQL 时区,这可能导致工具计算延迟不正确。指定此选项是一个好主意,因为它确保工具无论时区如何都能正确工作。
如果使用,此选项必须用于所有 pt-heartbeat 实例:--update、--monitor、--check 等。您可能应该在 --config 文件中设置此选项。将此选项与未使用此选项的 pt-heartbeat 实例混合使用将导致由于不同的时区(除非所有系统都设置为使用 UTC,否则不需要此选项)而产生错误的延迟读数。
--version
显示版本并退出。
--[no]version-check
默认值:yes
检查 Percona Toolkit、MySQL 和其他程序的最新版本。
这是一个标准的“自动检查更新”的功能,具有两个附加功能。首先,工具检查自身的版本,以及以下软件的版本:操作系统、Percona 监控和管理(PMM)、MySQL、Perl、MySQL Perl 驱动程序(DBD::mysql)和 Percona Toolkit。其次,它检查并警告已知存在问题的版本。例如,MySQL 5.5.25 存在严重的错误,并作为 5.5.25a 重新发布。
通过安全连接到 Percona 的版本检查数据库服务器执行这些检查。每个请求都由服务器记录,包括软件版本号和所检查系统的唯一 ID。ID 是由 Percona Toolkit 安装脚本生成的,或者当首次调用版本检查数据库时生成。
任何更新或已知问题都会在工具的正常输出之前打印到 STDOUT。此功能不应干扰工具的正常操作。
有关更多信息,请访问 https://www.percona.com/doc/percona-toolkit/LATEST/version-check.html。
版本
pt-heartbeat 3.5.7