JDBC ドライバー、PyMySQL ライブラリ、または MySQL C API を使用して、Java、Python、C アプリケーションから ApsaraDB RDS for MySQL インスタンスに接続します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
実行中の ApsaraDB RDS for MySQL インスタンス
インスタンス上に作成済みのデータベースおよびアカウント
ご利用のアプリケーションホストの IP アドレスがインスタンスの RDS ホワイトリストに登録済みであること
接続情報の取得
接続コードを作成する前に、RDS インスタンスの内部エンドポイントまたはパブリックエンドポイントとポート番号を確認します。
内部エンドポイント:アプリケーションが、RDS インスタンスと同じリージョンおよび同じネットワークタイプで実行されている Elastic Compute Service (ECS) インスタンス上にある場合に使用します。
パブリックエンドポイント:ローカルマシンや、異なるリージョンの ECS インスタンスなど、その他のすべてのシナリオで使用します。
詳細については、「ApsaraDB RDS for MySQL インスタンスの内部およびパブリックエンドポイントとポート番号の表示および変更」をご参照ください。
接続パラメーター
このトピックのすべてのサンプルコードで使用されるパラメーターを以下に示します。
| パラメーター | 説明 |
|---|---|
<Host> | RDS インスタンスの内部エンドポイントまたはパブリックエンドポイント。 |
<Port> | エンドポイントタイプに対応するポート番号:内部接続には内部ポート、インターネット接続にはパブリックポートを使用します。 |
<myDatabase> | データベース名。 |
<myUsername> | インスタンスへの接続に使用するアカウントのユーザー名。 |
<myPassword> | アカウントのパスワード。 |
Java を使用した接続
Java のサンプルでは、JDBC および mysql-connector-java ドライバーを使用して接続を開き、SELECT クエリを courses テーブルに対して実行します。
ドライバーのインストール
Maven プロジェクトの pom.xml ファイルに、次の依存関係を追加します。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>サンプルコード
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DatabaseConnection {
public static void main(String args[]) {
// プレースホルダーを実際の接続情報を置き換えてください
String connectionUrl = "jdbc:mysql://<Host>:<Port>/<myDatabase>";
ResultSet resultSet;
try (Connection connection = DriverManager.getConnection(connectionUrl, "<myUsername>", "<myPassword>");
Statement statement = connection.createStatement()) {
String selectSql = "SELECT * FROM `courses`";
resultSet = statement.executeQuery(selectSql);
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}期待される出力
接続が成功し、courses テーブルにデータが存在する場合、各行の name 列の値がコンソールに出力されます。
クラウドコンピューティング入門
データベースの基礎
高度な Java プログラミング代わりに SQLException のスタックトレースが表示された場合は、「トラブルシューティング」をご参照ください。
Python を使用した接続
Python のサンプルでは、PyMySQL を使用して接続し、SELECT クエリを courses テーブルに対して実行します。
PyMySQL のインストール
お使いの Python バージョンに応じて、適切なコマンドを実行します。
Python 3:
pip3 install PyMySQLPython 2:
pip install pymysql==0.9.3
サンプルコード
import pymysql
connection = pymysql.connect(
host='<Host>',
port=<Port>,
user='<myUsername>',
passwd='<myPassword>',
db='<myDatabase>'
)
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM `courses`"
cursor.execute(sql)
for result in cursor:
print(result)
except pymysql.err.OperationalError as e:
if e.args[0] == 1045:
print("アクセス拒否:ユーザー名およびパスワードを確認してください。")
elif e.args[0] == 1049:
print("不明なデータベース:データベース名を確認してください。")
else:
print(f"接続エラー:{e}")
finally:
connection.close()期待される出力
接続が成功し、courses テーブルにデータが存在する場合、各行がタプルとして出力されます。
('クラウドコンピューティング入門',)
('データベースの基礎',)
('高度な Java プログラミング',)C を使用した接続
C のサンプルでは、MySQL C API を使用して接続し、SELECT クエリを courses テーブルに対して実行します。
MySQL C ライブラリのインストール
CentOS 上で、以下のコマンドを実行します。
sudo yum install mysql-develサンプルコード
#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main(void)
{
MYSQL *t_mysql;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
int rc, i, fields;
int rows;
char select[] = "select * from courses";
t_mysql = mysql_init(NULL);
if (NULL == t_mysql) {
printf("初期化失敗\n");
return 1;
}
/* プレースホルダーを実際の接続情報に置き換えてください */
if (NULL == mysql_real_connect(t_mysql, "<Host>", "<myUsername>", "<myPassword>",
"<myDatabase>", <Port>, NULL, 0)) {
printf("接続失敗: %s\n", mysql_error(t_mysql));
return 1;
}
if (mysql_real_query(t_mysql, select, strlen(select)) != 0) {
printf("SELECT 失敗: %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return 1;
}
res = mysql_store_result(t_mysql);
if (NULL == res) {
printf("mysql_store_result(): %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return 0;
}
fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res))) {
for (i = 0; i < fields; i++) {
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_free_result(res);
mysql_close(t_mysql);
return 0;
}期待される出力
接続が成功した場合、courses テーブルの各行が、タブ区切りの列で出力されます。
クラウドコンピューティング入門
データベースの基礎
高度な Java プログラミングこのサンプルコードでは、例として courses テーブルをクエリしています。実際のデータベーススキーマに合わせて、SQL ステートメントおよびテーブル名を置き換えてください。
トラブルシューティング
接続に失敗した場合は、ドライバーまたはライブラリから返されるエラーメッセージを確認してください。主な原因は以下のとおりです。
エンドポイントまたはポート番号が正しくない — 「接続情報の取得」から値を確認してください
ユーザー名またはパスワードが正しくない — アカウントの認証情報を再確認してください
IP アドレスが RDS ホワイトリストに登録されていない — アプリケーションホストの IP アドレスを RDS インスタンスのホワイトリストに追加してください
パブリックエンドポイントが有効になっていない — VPC 外部から接続する場合は、コンソールでパブリックエンドポイントを有効化してください
包括的なトラブルシューティングガイドについては、「RDS インスタンスへの接続に失敗した場合の対処方法」をご参照ください。
次のステップ
サーバーレス関数から接続する場合は、関数の VPC アクセスを設定し、関数の IP アドレスを RDS ホワイトリストに追加してください。「ApsaraDB RDS for MySQL データベースへのアクセス」(Function Compute ドキュメント)をご参照ください。
その他の Python 接続例については、GitHub の「start-fc-db」リポジトリをご参照ください。