gh-ost
supports hooks: external processes which gh-ost
executes at particular points of interest.
Use cases include:
gh-ost
postpones cut-over (at your demand), thus ready to complete (at your leisure)--test-on-replica
, but who cannot have gh-ost
issue a STOP SLAVE
, would use a hook to command RDS to stop replicationgh-ost
defines certain points of interest (event types), and executes hooks at those points.
Notes:
gh-ost
will invoke relevant hooks sequentially and synchronously
gh-ost
. Thus, you are able to force gh-ost
to fail migration on your conditions.
All hooks are expected to reside in a single directory. This directory is indicated by --hooks-path
. When not provided, no hooks are executed.
gh-ost
will dynamically search for hooks in said directory. You may add and remove hooks to/from this directory as gh-ost
makes progress (though likely you don't want to). Hook files are expected to be executable processes.
In an effort to simplify code and to standardize usage, gh-ost
expects hooks in explicit naming conventions. As an example, the onStartup
hook expects processes named gh-ost-on-startup*
. It will match and accept files named:
gh-ost-on-startup
gh-ost-on-startup--send-notification-mail
gh-ost-on-startup12345
The full list of supported hooks is best found in code: hooks.go. Documentation will always be a bit behind. At this time, though, the following are recognized:
gh-ost-on-startup
gh-ost-on-validated
gh-ost-on-rowcount-complete
gh-ost-on-before-row-copy
gh-ost-on-status
gh-ost-on-interactive-command
gh-ost-on-row-copy-complete
gh-ost-on-stop-replication
gh-ost-on-start-replication
gh-ost-on-begin-postponed
gh-ost-on-before-cut-over
gh-ost-on-success
gh-ost-on-failure
gh-ost
will set environment variables per hook invocation. Hooks are then able to read those variables, indicating schema name, table name, alter
statement, migrated host name etc. Some variables are available on all hooks, and some are available on relevant hooks.
The following variables are available on all hooks:
GH_OST_DATABASE_NAME
GH_OST_TABLE_NAME
GH_OST_GHOST_TABLE_NAME
GH_OST_OLD_TABLE_NAME
- the name the original table will be renamed to at the end of operationGH_OST_DDL
GH_OST_ELAPSED_SECONDS
- total runtimeGH_OST_ELAPSED_COPY_SECONDS
- row-copy time (excluding startup, row-count and postpone time)GH_OST_ESTIMATED_ROWS
- estimated total rows in tableGH_OST_COPIED_ROWS
- number of rows copied by gh-ost
GH_OST_INSPECTED_LAG
- lag in seconds (floating point) of inspected serverGH_OST_HEARTBEAT_LAG
- lag in seconds (floating point) of heartbeatGH_OST_PROGRESS
- progress pct ([0..100], floating point) of migrationGH_OST_ETA_SECONDS
- estimated duration until migration finishes in secondsGH_OST_MIGRATED_HOST
GH_OST_INSPECTED_HOST
GH_OST_EXECUTING_HOST
GH_OST_HOOKS_HINT
- copy of --hooks-hint
valueGH_OST_HOOKS_HINT_OWNER
- copy of --hooks-hint-owner
valueGH_OST_HOOKS_HINT_TOKEN
- copy of --hooks-hint-token
valueGH_OST_DRY_RUN
- whether or not the gh-ost
run is a dry runThe following variable are available on particular hooks:
GH_OST_COMMAND
is only available in gh-ost-on-interactive-command
GH_OST_STATUS
is only available in gh-ost-on-status
See sample hooks, as bash
implementation samples.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。