本記事では、GoアプリケーションのサンプルがGo-SQL-Driver/MySQLドライバを使用してOceanBaseデータベースに接続し、操作する方法について説明します。
前提条件
ローカル環境にGo言語がインストールされていることを確認してください。
Goアプリケーションの作成
ステップ1:データベース接続文字列の取得
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。例:
obclient -h100.88.xx.xx -uroot@test -p****** -P2881 -Doceanbase
データベース接続文字列には、データベースへのアクセスに必要なパラメータ情報が含まれています。アプリケーションを作成する前に、データベース接続文字列を使用してデータベースへのログインを検証し、接続文字列のパラメータ情報が正しいことを確認できます。
パラメータ説明:
- -h:OceanBaseデータベースの接続IPアドレス。場合によってはODPのアドレスです。
- -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 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パラメータから取得します。ユーザーのパスワードです。hostname:
-hパラメータから取得します。OceanBaseデータベースの接続アドレスで、場合によってはODPのアドレスです。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
詳細を見る
Goサンプルアプリケーションの作成については、OceanBaseデータベースのオープンソースコミュニティにも関連する完全なサンプルがあります。詳細については、Goサンプルアプリケーションを参照してください。