Documentation menu

Version 3.0.0

Connection Checks

Checks that run as each connection opens: source and destination identity, session settings, warning capacity and character set.

These run when GoArchive connects, before preflight and before any tracking row is written. Bypassing preflight does not reach them.

SRC_DEST_IDENTITY_CHECK

The source and the destination report the same server identity (server_uuid) and the same schema name, compared without regard to letter case. An archive into itself would verify the table against itself and then delete the only copy.

failed to connect to databases: SRC_DEST_IDENTITY_CHECK: source and destination
are the same database (server_uuid=…; source schema=app at db1:3306, destination
schema=app at db1:3306). GoArchive refuses: it would verify the table against
itself and delete the only copy. …

Fix: point destination at a different server or schema. The same server with a different schema is supported. See Limitations for letter case and cloned servers.

AUTO_INCREMENT_ZERO_MODE_CHECK

Every connection (source, destination and replica, including those a pool opens later) adds NO_AUTO_VALUE_ON_ZERO to its inherited session SQL modes, so an explicit zero in an AUTO_INCREMENT column stays zero while the other modes remain intact. The failure means GoArchive could not prove that the session does this.

Fix: check whether the server or a proxy honours connection initialization. A wrapped query cause in the message comes first.

Session time zone

Every connection, source, destination and replica, proves when it opens that its session runs in UTC (time_zone = '+00:00', Session settings ). A server or proxy that overrides it is refused with session time zone is not UTC. The check has no name, and no flag bypasses it.

MAX_ERROR_COUNT_CHECK

GoArchive reads the warnings of every INSERT and every key-addressed statement, so each session must keep them. Every new source and destination connection, at startup or opened later by its pool, reads its session’s max_error_count and raises a 0 to 1024. The failure means it could not:

failed to connect to databases: failed to connect to destination database: destination: MAX_ERROR_COUNT_CHECK: db2:3306: the session's max_error_count is 0, so MySQL keeps none of a statement's warnings for GoArchive to read, and this account may not raise it (…). Raise the server's global max_error_count (MySQL's default is 1024), or grant SESSION_VARIABLES_ADMIN to this account so GoArchive raises its own sessions to 1024

Fix: have a DBA raise the global (SET PERSIST max_error_count = 1024), or grant SESSION_VARIABLES_ADMIN to the account named for that server (Permissions ).

A connection retired during a run is replaced like any other, so a global lowered to 0 mid-run reaches the next replacement connection. If the account cannot raise it, the run stops there: only the open transaction rolls back, and the next run’s recovery finishes the batch once the setting or the grant is fixed. Replica connections are not checked: they read replica status only.

SESSION_CHARSET_CHECK

GoArchive reads and binds every value through the session’s character set, so every connection is set to utf8mb4 with utf8mb4_general_ci after authentication. Every new source and destination connection then reads its session and requires utf8mb4 for client, connection and results, with utf8mb4_general_ci. A narrowed session would read text it cannot hold as ?, and a key bound back would match a look-alike row. The failure names the values found:

failed to connect to databases: failed to connect to source database: source: SESSION_CHARSET_CHECK: db1:3306: the session is client=latin1 connection=latin1 results=latin1 collation=latin1_swedish_ci, not utf8mb4 with utf8mb4_general_ci, so text would read back changed. GoArchive sets it with SET NAMES at connect; an init_connect or a proxy on this server changes it after

Fix: find what rewrites the session after GoArchive sets it, usually a proxy, and make it keep the client’s character set. A server’s init_connect runs before GoArchive’s setting and needs no change. The check proves the session at connect, per connection; a multiplexing proxy that changes the session between statements is not covered.