diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index d8ce0484c2f..216f32c8718 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -327,6 +327,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 83eea0d8b4a..6be5721a1b4 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/os2" "vitess.io/vitess/go/protoutil" "vitess.io/vitess/go/vt/log" @@ -1001,6 +1002,12 @@ func (be *BuiltinBackupEngine) backupManifest( } }() + // Get the hostname + hostname, err := netutil.FullyQualifiedHostname() + if err != nil { + hostname = "" + } + // JSON-encode and write the MANIFEST bm := &builtinBackupManifest{ // Common base fields @@ -1014,6 +1021,7 @@ func (be *BuiltinBackupEngine) backupManifest( 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 c9fbac9fb0d..3fdda2f8e0d 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" @@ -204,6 +205,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 @@ -218,6 +225,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 59202d78c2e..7436b30e544 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" @@ -406,6 +407,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 23e8440d575..22d28d48858 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" @@ -245,6 +246,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 @@ -255,6 +262,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()),