Skip to content

Commit b0c78bf

Browse files
Add support for MariaDB connection in configuration and URI generation
1 parent 4502796 commit b0c78bf

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

go/cmd/gh-ost/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func main() {
5252
flag.StringVar(&migrationContext.AssumeMasterHostname, "assume-master-host", "", "(optional) explicitly tell gh-ost the identity of the master. Format: some.host.com[:port] This is useful in master-master setups where you wish to pick an explicit master, or in a tungsten-replicator where gh-ost is unable to determine the master")
5353
flag.IntVar(&migrationContext.InspectorConnectionConfig.Key.Port, "port", 3306, "MySQL port (preferably a replica, not the master)")
5454
flag.Float64Var(&migrationContext.InspectorConnectionConfig.Timeout, "mysql-timeout", 0.0, "Connect, read and write timeout for MySQL")
55+
flag.BoolVar(&migrationContext.InspectorConnectionConfig.IsMariaDB, "mariadb", false, "Set to 'true' if connecting to MariaDB instance")
5556
flag.StringVar(&migrationContext.CliUser, "user", "", "MySQL user")
5657
flag.StringVar(&migrationContext.CliPassword, "password", "", "MySQL password")
5758
flag.StringVar(&migrationContext.CliMasterUser, "master-user", "", "MySQL user on master, if different from that on replica. Requires --assume-master-host")

go/mysql/connection.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type ConnectionConfig struct {
3131
Timeout float64
3232
TransactionIsolation string
3333
Charset string
34+
IsMariaDB bool
3435
}
3536

3637
func NewConnectionConfig() *ConnectionConfig {
@@ -51,6 +52,7 @@ func (this *ConnectionConfig) DuplicateCredentials(key InstanceKey) *ConnectionC
5152
Timeout: this.Timeout,
5253
TransactionIsolation: this.TransactionIsolation,
5354
Charset: this.Charset,
55+
IsMariaDB: this.IsMariaDB,
5456
}
5557

5658
if this.tlsConfig != nil {
@@ -152,12 +154,19 @@ func (this *ConnectionConfig) GetDBUri(databaseName string) string {
152154
this.Charset = "utf8mb4,utf8,latin1"
153155
}
154156

157+
var isolationParam string
158+
if this.IsMariaDB {
159+
isolationParam = fmt.Sprintf("tx_isolation=%q", this.TransactionIsolation)
160+
} else {
161+
isolationParam = fmt.Sprintf("transaction_isolation=%q", this.TransactionIsolation)
162+
}
163+
155164
connectionParams := []string{
156165
"autocommit=true",
157166
"interpolateParams=true",
158167
fmt.Sprintf("charset=%s", this.Charset),
159168
fmt.Sprintf("tls=%s", tlsOption),
160-
fmt.Sprintf("transaction_isolation=%q", this.TransactionIsolation),
169+
isolationParam,
161170
fmt.Sprintf("timeout=%fs", this.Timeout),
162171
fmt.Sprintf("readTimeout=%fs", this.Timeout),
163172
fmt.Sprintf("writeTimeout=%fs", this.Timeout),

go/mysql/connection_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,17 @@ func TestGetDBTLSConfigKey(t *testing.T) {
113113
configKey := GetDBTLSConfigKey("myhost")
114114
require.Equal(t, "ghost-myhost", configKey)
115115
}
116+
117+
func TestGetDBUriMariaDB(t *testing.T) {
118+
c := NewConnectionConfig()
119+
c.Key = InstanceKey{Hostname: "mariadb-host", Port: 3307}
120+
c.User = "maria"
121+
c.Password = "dba"
122+
c.Timeout = 2.0
123+
c.TransactionIsolation = transactionIsolation
124+
c.Charset = "utf8mb4"
125+
c.IsMariaDB = true
126+
127+
uri := c.GetDBUri("analytics")
128+
require.Equal(t, `maria:dba@tcp(mariadb-host:3307)/analytics?autocommit=true&interpolateParams=true&charset=utf8mb4&tls=false&tx_isolation="REPEATABLE-READ"&timeout=2.000000s&readTimeout=2.000000s&writeTimeout=2.000000s`, uri)
129+
}

0 commit comments

Comments
 (0)