このトピックでは、Goを使用してクラスターに接続する方法について説明します。
前提条件
- Gitがインストールされ、そのパスがpath環境変数に追加されます。
- Goがダウンロードされ、インストールされます。 詳細については、「ダウンロードとインストール」をご参照ください。
- Go MySQL Driverがインストールされています。
- Go-sql-Driver /MySQLからgo mysql driverをダウンロードします。
- シェルスクリプトのgoツールを使用して、パッケージを
$GOPATH
にインストールします。go ge t github.com/go-sql-driver/mysql
クラスターへの接続
パッケージメイン
import (import (import)
"database/sql"
"fmt"
_"github.com/go-sql-driver/mysql"
)
const (
// user: クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。
user = "adb_test"
// password: クラスターへの接続に使用されるアカウントのパスワード。
password = "xxx"
// host: クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。
host = "127.0.xx.xx"
// 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。
port = 3306
// database: クラスター内のデータベースの名前。
データベース="database_name"
// connectTimeout: データベース接続のタイムアウト期間。
connectTimeout = "10s"
)
func main() {
// データベース接続を有効にします。
url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
db, err := sql. オープン ("mysql", url)
if err! =nil {
パニック (err.Error())
}
// 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。
db.SetMaxOpenConns (2)
// アイドル接続の最大数を設定します。
db.SetMaxIdleConns (1)
// 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。
// この設定では、接続プール内の接続が1時間持続することは保証できません。
// この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、初めて作成されてから1時間後に期限切れになります。
// 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。
db.SetConnMaxLifetime(time.Hour)
// メイン関数が終了した後までクローズを延期する
// executing
defer db.Close()
rows, err := db.Query("show tables")
if err! =nil {
パニック (err.Error())
}
行の場合。Next() {
var tableName文字列
err := rows.Scan(&tableName)
if err! =nil {
パニック (err.Error())
}
fmt.Println(tableName)
}
}
サーバーの準備されたステートメントを有効にする
パッケージメイン
import (import (import)
"database/sql"
"fmt"
_"github.com/go-sql-driver/mysql"
「時間」
)
const (
// user: クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。
user = "adb_test"
// password: クラスターへの接続に使用されるアカウントのパスワード。
password = "xxx"
// host: クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。
host = "127.0.xx.xx"
// 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。
port = 3306
// database: クラスター内のデータベースの名前。
データベース="database_name"
// connectTimeout: データベース接続のタイムアウト期間。
connectTimeout = "10s"
)
func main() {
// データベース接続を開く
url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
db, err := sql. オープン ("mysql", url)
if err! =nil {
パニック (err.Error())
}
// 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。
db.SetMaxOpenConns (2)
// アイドル接続の最大数を設定します。
db.SetMaxIdleConns (1)
// 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。
// この設定では、接続プール内の接続が1時間持続することは保証できません。 接続が利用できなくなり、何らかの理由により自動的に閉じられることがある。
// この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、1時間アイドルになった後に有効期限が切れませんが、初めて作成されてから1時間後に有効期限が切れます。
// 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。
db.SetConnMaxLifetime(time.Hour)
defer db.Close()
stmt, err := db.Prepare("select * from student where id = ?")
if err! =nil {
パニック (err.Error())
}
defer stmt. 閉じる ()
rows, err := stmt.Query (9)
if err! =nil {
パニック (err.Error())
}
defer rows.Close()
行の場合。Next() {
var id文字列
var名文字列
varユニット文字列
err := rows.Scan(&id、&name、&unit)
if err! =nil {
パニック (err.Error())
}
fmt.Println(fmt.Sprintf("% s, % s, % s", id, name, unit))
}
}
クライアントの準備ステートメントを有効にする
Go MySQL Driverの準備ステートメントを有効にするには、クライアントで
interpolateParams
をtrueに設定する必要があります。
重要
db.Prepare
とstmt.Query
は、interpolateParams
がtrueに設定されているかどうかを識別できません。 クライアントの準備ステートメントを有効にするには、db.Query
を使用する必要があります。
パッケージメイン
import (import (import)
"database/sql"
"fmt"
_"github.com/go-sql-driver/mysql"
「時間」
)
const (
// user: クラスターへの接続に使用されるアカウント。 AnalyticDB for MySQLは、特権アカウントと標準アカウントのタイプを提供します。
user = "adb_test"
// password: クラスターへの接続に使用されるアカウントのパスワード。
password = "xxx"
// host: クラスターのIPアドレス。 IPアドレスは、AnalyticDB for MySQLコンソールの [クラスター情報] ページで取得できます。
host = "127.0.xx.xx"
// 3306: AnalyticDB for MySQLクラスターへの接続に使用されるポート。
port = 3306
// database: クラスター内のデータベースの名前。
データベース="database_name"
// connectTimeout: データベース接続のタイムアウト期間。
connectTimeout = "10s"
)
func main() {
// データベース接続を有効にします。
url := fmt.Sprintf("% s:% s @ tcp(% s:% d)/% s?timeout=% s&interpolateParams=true" 、ユーザー、パスワード、ホスト、ポート、データベース、connectTimeout)
db, err := sql. オープン ("mysql", url)
if err! =nil {
パニック (err.Error())
}
// 有効な接続の最大数を設定します。 デフォルト値は0で、有効な接続の最大数に制限が適用されないことを示します。
db.SetMaxOpenConns (2)
// アイドル接続の最大数を設定します。
db.SetMaxIdleConns (1)
// 接続の最大期間を設定します。 デフォルトでは、接続の期間に制限は適用されず、接続は常に存続します。
// この設定では、接続プール内の接続が1時間持続することは保証できません。 接続が利用できなくなり、何らかの理由により自動的に閉じられることがある。
// この設定は、アイドル接続のタイムアウト期間に関するものではありません。 接続は、1時間アイドルになった後に有効期限が切れませんが、初めて作成されてから1時間後に有効期限が切れます。
// 理論的には、接続の最大持続時間が短いほど、最初から接続を作成する頻度が高くなります。
db.SetConnMaxLifetime(time.Hour)
defer db.Close()
rows, err := db.Query("select * from student where id = ?", 9)
if err! =nil {
パニック (err.Error())
}
defer rows.Close()
行の場合。Next() {
var id文字列
var名文字列
varユニット文字列
err := rows.Scan(&id、&name、&unit)
if err! =nil {
パニック (err.Error())
}
fmt.Println(fmt.Sprintf("% s, % s, % s", id, name, unit))
}
}