diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index f654fa47342..4a621b39f21 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -325,6 +325,8 @@ type BackupManifest struct { TabletAlias string + Hostname string + Keyspace string Shard string diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index d94ad40893b..274c34aeeb4 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -39,6 +39,7 @@ import ( "vitess.io/vitess/go/ioutil" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/mysql/replication" + "vitess.io/vitess/go/netutil" "vitess.io/vitess/go/protoutil" "vitess.io/vitess/go/vt/concurrency" "vitess.io/vitess/go/vt/log" @@ -685,6 +686,12 @@ func (be *BuiltinBackupEngine) backupFiles( } }() + // Get the hostname + hostname, err := netutil.FullyQualifiedHostname() + if err != nil { + hostname = "" + } + // JSON-encode and write the MANIFEST bm := &builtinBackupManifest{ // Common base fields @@ -698,6 +705,7 @@ func (be *BuiltinBackupEngine) backupFiles( Incremental: !fromPosition.IsZero(), ServerUUID: serverUUID, TabletAlias: params.TabletAlias, + Hostname: hostname, Keyspace: params.Keyspace, Shard: params.Shard, BackupTime: params.BackupTime.UTC().Format(time.RFC3339), diff --git a/go/vt/mysqlctl/mysqlshellbackupengine.go b/go/vt/mysqlctl/mysqlshellbackupengine.go index 3f24115c0a9..6b62f1a42d8 100644 --- a/go/vt/mysqlctl/mysqlshellbackupengine.go +++ b/go/vt/mysqlctl/mysqlshellbackupengine.go @@ -35,6 +35,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/mysql/capabilities" + "vitess.io/vitess/go/netutil" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/mysqlctl/backupstorage" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" @@ -211,6 +212,12 @@ func (be *MySQLShellBackupEngine) ExecuteBackup(ctx context.Context, params Back } defer closeFile(mwc, backupManifestFileName, params.Logger, &finalErr) + // Get the hostname + hostname, err := netutil.FullyQualifiedHostname() + if err != nil { + hostname = "" + } + // JSON-encode and write the MANIFEST bm := &MySQLShellBackupManifest{ // Common base fields @@ -225,6 +232,7 @@ func (be *MySQLShellBackupEngine) ExecuteBackup(ctx context.Context, params Back FinishedTime: FormatRFC3339(time.Now().UTC()), ServerUUID: serverUUID, TabletAlias: params.TabletAlias, + Hostname: hostname, Keyspace: params.Keyspace, Shard: params.Shard, MySQLVersion: mysqlVersion, diff --git a/go/vt/mysqlctl/mysqlshellbackupengine_test.go b/go/vt/mysqlctl/mysqlshellbackupengine_test.go index a0580af2267..662092b4c09 100644 --- a/go/vt/mysqlctl/mysqlshellbackupengine_test.go +++ b/go/vt/mysqlctl/mysqlshellbackupengine_test.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/ioutil" "vitess.io/vitess/go/mysql/fakesqldb" + "vitess.io/vitess/go/netutil" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/logutil" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" @@ -407,6 +408,10 @@ func TestMySQLShellBackupEngine_ExecuteBackup_ReleaseLock(t *testing.T) { require.Equal(t, mysqlShellBackupEngineName, manifest.BackupMethod) + if hostname, err := netutil.FullyQualifiedHostname(); err == nil { + require.Equal(t, hostname, manifest.Hostname) + } + // did we notice the lock was release and did we release it ours as well? require.Contains(t, logger.String(), "global read lock released after", "failed to release the global lock after mysqlsh") diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 47d8f274b0c..83e91fd7231 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -34,6 +34,7 @@ import ( "vitess.io/vitess/go/ioutil" "vitess.io/vitess/go/mysql/replication" + "vitess.io/vitess/go/netutil" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/mysqlctl/backupstorage" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" @@ -241,6 +242,12 @@ func (be *XtrabackupEngine) executeFullBackup(ctx context.Context, params Backup } defer closeFile(mwc, backupManifestFileName, params.Logger, &finalErr) + // Get the hostname + hostname, err := netutil.FullyQualifiedHostname() + if err != nil { + hostname = "" + } + // JSON-encode and write the MANIFEST bm := &xtraBackupManifest{ // Common base fields @@ -251,6 +258,7 @@ func (be *XtrabackupEngine) executeFullBackup(ctx context.Context, params Backup PurgedPosition: replicationPosition, ServerUUID: serverUUID, TabletAlias: params.TabletAlias, + Hostname: hostname, Keyspace: params.Keyspace, Shard: params.Shard, BackupTime: FormatRFC3339(params.BackupTime.UTC()),