本記事では、Goアプリケーションのサンプルで、Go-SQL-Driver/MySQLドライバーを使用してOceanBase データベースに接続し、使用する方法について説明します。
前提条件
ローカル環境にGo言語がデプロイされていることを確認してください。
Goアプリケーションの作成
ステップ1:データベース接続文字列の取得
OceanBase データベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。例:
obclient -h100.88.xx.xx -uroot@test -p****** -P2881 -Doceanbase
データベース接続文字列には、データベースへのアクセスに必要なパラメータ情報が含まれています。アプリケーションを作成する前に、データベース接続文字列を用いてデータベースへのログインを検証し、接続文字列のパラメータが正確であるか確認することができます。
パラメータの説明:
- -h:OceanBaseデータベースへの接続IPアドレス。ODP (OceanBase Database Proxy)のアドレスである場合もあります。
- -u:テナントの接続ユーザー名。書式はユーザー@テナント#クラスタ名となります。クラスタのデフォルトテナントは'sys'、テナントのデフォルト管理者ユーザーは'root'です。データベースに直接接続する場合は、クラスタ名の部分は不要ですが、ODP経由で接続する場合は指定する必要があります。
- -p:ユーザーのパスワードです。
- -P:OceanBaseデータベースの接続ポート番号であり、ODPのリスニングポートでもあります。
-
- -D:接続対象のデータベース名です。
ステップ2:Go-SQL-Driver/MySQLのインストール
Go言語のバージョンによって、インストール方法は異なります。
go getによるインストール (Go V1.13 ~ V1.16に適用)
インストールコマンドは以下のとおりです:
go get -u github.com/go-sql-driver/mysql
Go-SQL-Driver/MySQLの詳細については、Githubを参照してください。
go installによるインストール
バージョンまたはネットワークの問題により、go getコマンドを使ってインストールできない場合は、以下の方法でgo-sql-driver/mysqlをインストールすることができます。
go/srcディレクトリに移動し、GitHub上にあるgo-sql-driver/mysqlのリポジトリをクローンします。cd /usr/local/go/src git clone https://github.com/go-sql-driver/mysql.git注意
/usr/local/go/srcの部分は、ご自身の環境でGoが実際にインストールされているディレクトリパスに置き換えて操作してください。go installコマンド使用してインストールします。go install mysql注意
Goのバージョンによっては、
go installがデフォルトでパッケージを探すディレクトリが/srcではない場合があります。その際は、go installの実行時に表示されるエラーメッセージで、実際に参照しているディレクトリを確認する必要があります。例えば、cannot find package "mysql" in: /usr/local/go/src/vendor/mysqlというエラーが表示された場合、mysqlフォルダを/src/vendorディレクトリ配下に配置してから、再度インストールコマンドを実行してください。
ステップ3:アプリケーションの作成
サンプルファイルtest.goを作成します。コードは以下のとおりです:
package main
import (
"database/sql"
"fmt"
"log"
_ "mysql"
//go-sql-driver/mysqlのインストールパスを正確に入力してください。srcディレクトリにインストールした場合、"mysql"と直接記述できます。
)
type Str struct {
Name string
}
func main() {
select_all()
}
func select_all() {
conn := "root:@tcp(127.0.0.1:2881)/test"
db, err := sql.Open("mysql", conn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("success to connect OceanBase with go_mysql driver\n")
//t1を作成
db.Query("create table t1(str varchar(256))")
//データを挿入
db.Query("insert into t1 values ('Hello OceanBase')")
//データを検索
res, err := db.Query("SELECT * FROM t1")
//t1を削除
db.Query("drop table t1")
if err != nil {
log.Fatal(err)
}
defer res.Close()
if err != nil {
log.Fatal(err)
}
for res.Next() {
var str Str
res.Scan(&str.Name)
fmt.Printf("%s\n", str.Name)
}
}
コード内のデータベース接続パラメータ、ご自身の環境に合わせて修正してください。以下の項目を参考に、「ステップ1」で取得したデータベース接続文字列の対応する値を設定します。
//フォーマット
conn := "{username}:{password}@tcp({hostname}:{port})/{dbname}"
//例
conn := "root:@tcp(127.0.0.1:2881)/test"
パラメータの説明:
username:
-uの値を使用します。テナントの接続ユーザー名で、書式はユーザー@テナント#クラスタ名となります。クラスタのデフォルトテナントは'sys'、テナントのデフォルト管理者ユーザーは'root'です。データベースに直接接続する場合は、クラスタ名の部分は不要ですが、ODP経由で接続する場合は指定する必要があります。password:
-pの値を使用します。ユーザーのパスワードです。host:
-hの値を使用します。OceanBaseデータベースへの接続IPアドレス。ODP (OceanBase Database Proxy)のアドレスである場合もあります。port:
-Pの値を使用します。OceanBaseデータベースの接続ポート番号であり、ODPのリスニングポートでもあります。dbname:
-Dの値を使用します。接続対象のデータベース名です。
ステップ4:アプリケーションの実行
コードの編集が完了したら、以下のコマンドで実行が可能になります:
//一時的な環境変数の設定です。Goが実際にインストールされているパスを記述してください。
export PATH=$PATH:/usr/local/go/bin
//go runコマンドでgoファイルを実行する
go run test.go
//または、go buildでバイナリファイルを作成して実行する
go build test.go
./test
実行後、以下の内容が返された場合は、データベースへの接続に成功し、サンプル文が正しく実行されたことを意味します:
success to connect OceanBase with go_mysql driver
Hello OceanBase
詳細情報
OceanBaseデータベースのオープンソースコミュニティには、Go サンプルアプリケーションの完全なサンプルも用意されています。詳細については、Go サンプルアプリケーションを参照してください。