MySQL: クイックスタート
MySQLの利用開始方法
👋 Stackheroのドキュメントへようこそ!
Stackheroは、数多くの利点を提供するMySQLクラウドソリューションを提供しています。主な利点は以下の通りです:
- 無制限の接続と転送。
- phpMyAdminウェブUIが含まれています。
- ワンクリックで簡単にアップデート。
- プライベートで専用のVMによる最適なパフォーマンスと強固なセキュリティ。
時間を節約し、生活を簡素化:StackheroのMySQLクラウドホスティングソリューションを試すのに5分しかかかりません!
MySQLのURL
MySQLサービスへ素早く接続したい場合、ドライバが対応していればMySQLのURL形式を利用できます:
mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Rubyを利用する場合は、URL形式が少し異なります:
mysql2://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?reconnect=true&useSSL=true&requireSSL=true
PHPでMySQLを利用する
MySQLi(オブジェクト指向スタイル)
PHPのMySQLi拡張をオブジェクト指向スタイルで使ってMySQLに接続する例です:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // この例では「root」データベースを使用していますが、phpMyAdminでアプリケーション専用のデータベースとユーザーを作成することを推奨します。
$mysqli = mysqli_init();
$mysqliConnected = $mysqli->real_connect($hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die("Connection Error: " . $mysqli->connect_error);
}
echo 'Connection successful... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
MySQLi(手続き型スタイル)
手続き型コードを好む場合、MySQLiを使った接続例は以下の通りです:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // セキュリティ向上のため、「root」ではなくphpMyAdminで専用のデータベースとユーザーを作成してください。
$mysqli = mysqli_init();
$mysqliConnected = mysqli_real_connect($mysqli, $hostname, $user, $password, $database, $port, NULL, MYSQLI_CLIENT_SSL);
if (!$mysqliConnected) {
die("Connection error: " . mysqli_connect_error($mysqli));
}
echo 'Success: ' . mysqli_get_host_info($mysqli) . "\n";
mysqli_close($mysqli);
?>
PDO
PDOを使ってデータベースへアクセスしたい場合の接続例です:
<?php
$hostname = '<XXXXXX>.stackhero-network.com';
$port = '<PORT>';
$user = 'root';
$password = '<ROOT_PASSWORD>';
$database = 'root'; // アプリケーション専用のデータベースとユーザーを作成するのがベストプラクティスです。
$dsn = "mysql:host=$hostname;port=$port;dbname=$database";
$options = array(
// 接続時にSSL関連のエラーが発生する場合は、システムに正しいCA証明書がインストールされているか確認してください(下記参照)。
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
);
$pdo = new PDO($dsn, $user, $password, $options);
$stm = $pdo->query("SELECT VERSION()");
$version = $stm->fetch();
echo "You are connected to a database running version " . $version[0] . "\n";
?>
トラブルシューティング:SSL operation failed with code 1
以下のようなエラーが表示される場合:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
これは、システムの/etc/ssl/certs/にCA証明書が存在しないことが原因です。
PHPコードが動作しているシステムにアクセスできる場合、以下のコマンドで証明書を追加できます:
- Ubuntu/Debianの場合:
sudo apt-get install ca-certificates - Alpine Linuxの場合:
apk add ca-certificates
直接アクセスできない場合は、証明書を手動で追加できます:
- 証明書をダウンロード:https://letsencrypt.org/certs/isrgrootx1.pem
isrgrootx1.pemファイルをPHPプロジェクトに配置PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/'の行をコメントアウトPDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem'の行をアンコメント
トラブルシューティング:PDOで未定義定数エラー
以下のようなエラーが表示される場合:
Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_SSL_CAPATH
または類似のメッセージが出る場合、PDOがMySQLサポートなしでインストールされています。
- Ubuntu/Debianの場合
以下のコマンドで必要な拡張を追加できます:
sudo apt-get install php-mysql
- Dockerの場合
Dockerを利用している場合は、ビルド時にMySQLサポートが含まれていることを確認してください。Dockerfileに以下を追加します:
RUN docker-php-ext-install pdo pdo_mysql
### SymfonyとDoctrineでMySQLを利用する
SymfonyとDoctrineを利用している場合、以下のように接続設定が可能です:
1. `.env`ファイルを編集し、`DATABASE_URL`変数を設定します:
DATABASE_URL="mysql://<USER>:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/<DATABASE>"
1. 次に、`config/packages/doctrine.yaml`でドライバとオプションを設定します:
```yaml
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
options:
# PDO::MYSQL_ATTR_SSL_CAPATH
1010: '/etc/ssl/certs'
# PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
1014: true
トラブルシューティング:SSL operation failed with code 1
以下のようなエラーが発生した場合:
Uncaught PDOException: PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed
これは/etc/ssl/certs/ディレクトリにCA証明書がないことが原因です。
システムにアクセスできる場合、以下でインストールできます:
- Ubuntu/Debian:
sudo apt-get install ca-certificates - Alpine Linux:
apk add ca-certificates
直接アクセスできない場合は、証明書を手動で追加できます:
- ダウンロード:https://letsencrypt.org/certs/isrgrootx1.pem
isrgrootx1.pemをSymfonyプロジェクトに配置config/packages/doctrine.yamlを更新:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
options:
# PDO::MYSQL_ATTR_SSL_CA
1009: 'isrgrootx1.pem'
# PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
1014: true
LaravelでMySQLを利用する
LaravelでMySQLを設定するには、config/database.phpを開き、MySQLセクションを以下のように編集します:
'mysql' => [
'driver' => 'mysql',
'host' => env('STACKHERO_MYSQL_HOST'),
'port' => env('STACKHERO_MYSQL_PORT'),
'username' => env('STACKHERO_MYSQL_USER'),
'password' => env('STACKHERO_MYSQL_PASSWORD'),
'database' => env('STACKHERO_MYSQL_USER'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'sslmode' => 'require',
'options' => extension_loaded('pdo_mysql')
? array_filter([
// SSLエラーについては上記トラブルシューティングを参照してください。
PDO::MYSQL_ATTR_SSL_CAPATH => '/etc/ssl/certs/',
// PDO::MYSQL_ATTR_SSL_CA => 'isrgrootx1.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
])
: [],
],
PHP CodeIgniterでMySQLを利用する
database.php設定ファイルに以下を追加できます:
$db['default'] = array(
'hostname' => getenv('STACKHERO_MYSQL_HOST'),
'port' => getenv('STACKHERO_MYSQL_PORT'),
'username' => getenv('STACKHERO_MYSQL_USER'),
'password' => getenv('STACKHERO_MYSQL_PASSWORD'),
'database' => getenv('STACKHERO_MYSQL_USER'), // 慣例として、データベース名はユーザー名と同じです。
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => true,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'encrypt' => array() // 重要:TLS暗号化を有効にしてください
);
PHPで環境変数を使って接続する
データベース認証情報をコード内に保存するのは避け、環境変数を利用するのがより安全です。取得方法の例:
$hostname = getenv('STACKHERO_MYSQL_HOST');
$port = getenv('STACKHERO_MYSQL_PORT');
$user = getenv('STACKHERO_MYSQL_USER');
$password = getenv('STACKHERO_MYSQL_PASSWORD');
$database = getenv('STACKHERO_MYSQL_USER'); // 慣例として、データベース名はユーザー名と同じです。
WordPressでMySQLを利用する
WordPressをStackhero for MySQLに接続するのは簡単です。wp-config.phpファイルを以下のように編集してください:
define('DB_HOST', '<XXXXXX>.stackhero-network.com');
define('DB_PORT', '<PORT>');
define('DB_NAME', 'root');
define('DB_USER', 'root');
define('DB_PASSWORD', '<yourPassword>');
// TLS暗号化(SSLとも呼ばれます)を有効化
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
ここで重要なのはTLS(SSL)暗号化を有効にすることです。これを設定しないと、接続は期待通りに動作しません。
Node.jsでMySQLを利用する
MySQL Xプロトコル(xdevapiパッケージ)
MySQL Xプロトコルを利用するには、公式のxdevapiパッケージをインストールします:
npm install @mysql/xdevapi
サンプルスクリプト:
const mysqlx = require('@mysql/xdevapi');
(async () => {
// MySQL X Protocolで接続
const session = await mysqlx.getSession({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// スキーマ(データベース)がなければ作成
const schemaExists = await session.getSchema('stackherotest').existsInDatabase();
if (!schemaExists) {
await session.createSchema('stackherotest');
}
// テーブル「users」がなければ作成
const tableExists = await session
.getSchema('stackherotest')
.getTable('users')
.existsInDatabase();
if (!tableExists) {
await session
.sql('CREATE TABLE `stackherotest`.`users` '
+ '('
+ '`userId` INT UNSIGNED NOT NULL,'
+ '`name` VARCHAR(128) NOT NULL,'
+ '`address` TEXT NOT NULL,'
+ '`email` VARCHAR(265) NOT NULL'
+ ') '
+ 'ENGINE = InnoDB;')
.execute();
}
// サンプルユーザーを挿入
await session
.getSchema('stackherotest')
.getTable('users')
.insert('userId', 'name', 'address', 'email')
.values(
Math.round(Math.random() * 100000),
'User name',
'User address',
'[email protected]'
)
.execute();
// ユーザー数をカウント
const usersCount = await session
.getSchema('stackherotest')
.getTable('users')
.count();
console.log(`There are now ${usersCount} entries in the table "users"`);
// 接続をクローズ
await session.close();
})().catch(error => {
console.error('');
console.error('An error occurred!');
console.error(error);
process.exit(1);
});
MySQLプロトコル(mysql2パッケージ)
従来のプロトコルを利用したい場合は、Promise対応のmysql2パッケージを利用できます。インストール:
npm install mysql2
使用例:
const mysql = require('mysql2/promise');
(async () => {
const db = await mysql.createConnection({
host: '<XXXXXX>.stackhero-network.com',
port: '<PORT>',
user: 'root',
password: '<ROOT_PASSWORD>'
});
// 必要に応じてデータベース作成
await db.query('CREATE DATABASE IF NOT EXISTS stackherotest');
// 必要に応じてテーブル作成
await db.query('CREATE TABLE IF NOT EXISTS `stackherotest`.`users` '
+ '('
+ '`userId` INT UNSIGNED NOT NULL,'
+ '`name` VARCHAR(128) NOT NULL,'
+ '`address` TEXT NOT NULL,'
+ '`email` VARCHAR(265) NOT NULL'
+ ') '
+ 'ENGINE = InnoDB;');
// サンプルユーザーを挿入
await db.query(
'INSERT INTO `stackherotest`.`users` (`userId`, `name`, `address`, `email`) VALUES ?',
[
[
Math.round(Math.random() * 100000),
'User name',
'User address',
'[email protected]'
]
]
);
// ユーザー数をカウント
const [ usersCount ] = await db.query('SELECT COUNT(*) AS `cpt` FROM `stackherotest`.`users`');
console.log(`There are now ${usersCount[0].cpt} entries in the table "users"`);
// 接続をクローズ
await db.end();
})().catch(error => {
console.error('');
console.error('An error occurred!');
console.error(error);
process.exit(1);
});
Node.js、NestJS、TypeORMでMySQLを利用する
Node.js、NestJS、TypeORMから接続する場合、以下のようにsslオプションを追加してください:
TypeOrmModule.forRoot({
type: 'mysql',
host: '<XXXXXX>.stackhero-network.com',
port: <PORT>,
username: 'root',
password: '<ROOT_PASSWORD>',
database: 'root',
entities: [],
synchronize: true,
ssl: {}
});
PrismaでMySQLを利用する
Prismaを利用する場合、sslaccept=strictオプションを追加することで暗号化接続を強制できます。設定例:
datasource db {
provider = "mysql"
url = "mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?sslaccept=strict"
}
DjangoでMySQLを利用する
まだmysqlclientモジュールをインストールしていない場合は、以下でインストールできます:
pip install mysqlclient
インストール時に
Exception: Can not find valid pkg-config nameエラーが出る場合は、libmysqlclientパッケージの追加が必要です。 Ubuntu/Debianの場合:apt-get update && apt-get install --no-install-recommends -y libmysqlclient-dev
まずはsettings.pyにパスワードを直接記載して接続テストを行い、動作確認後は環境変数を使う方法(下記参照)に切り替えるのが安全です。
settings.pyの例:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<XXXXXX>.stackhero-network.com',
'PORT': '<PORT>',
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': '<ROOT_PASSWORD>'
}
}
注意:この例はテスト用です。本番環境では推奨されません!
接続が確認できたら、django-environを使って環境変数で管理する方法に切り替えましょう。
まずパッケージをインストール:
pip install django-environ
次にsettings.pyを更新:
import environ
env = environ.Env()
environ.Env.read_env()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': env('STACKHERO_MYSQL_HOST'),
'PORT': env('STACKHERO_MYSQL_PORT'),
'OPTIONS': {
'ssl_mode': 'REQUIRED',
},
'NAME': 'root',
'USER': 'root',
'PASSWORD': env('STACKHERO_MYSQL_ROOT_PASSWORD')
}
}
settings.pyと同じディレクトリに.envファイルを作成または編集し、以下を追加します:
STACKHERO_MYSQL_HOST=<XXXXXX>.stackhero-network.com
STACKHERO_MYSQL_PORT=<PORT>
STACKHERO_MYSQL_ROOT_PASSWORD=<ROOT_PASSWORD>
最後に、認証情報を安全に保つため.envを.gitignoreに追加してください:
echo ".env" >> .gitignore
Java/SpringでMySQLに接続する
Springアプリケーションから接続する場合、SPRING_DATASOURCE_URL環境変数にデータベースURLを設定します。必ずjdbc:で始めてください:
SPRING_DATASOURCE_URL=jdbc:mysql://root:<ROOT_PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT>/root?useSSL=true&requireSSL=true
Groovy/GrailsでMySQLに接続する
GrailsアプリケーションでMySQLに接続する設定例:
dataSource {
pooled = true
driverClassName = "com.mysql.cj.jdbc.Driver"
dialect = org.hibernate.dialect.MySQL8Dialect
// SSL関連プロパティ
properties {
useSSL = true
requireSSL = true
verifyServerCertificate = true
sslMode = "REQUIRED"
}
}
environments {
production {
dataSource {
dbCreate = "none"
url = "jdbc:mysql://" + System.env.STACKHERO_MYSQL_HOST + ":" + System.env.STACKHERO_MYSQL_PORT + "/root?useSSL=true&requireSSL=true&verifyServerCertificate=true&sslMode=required" // 必要に応じて「/root」を任意のデータベース名に変更可能です。
username = "root" // アプリケーション専用のユーザー作成を推奨します。
password = System.env.STACKHERO_MYSQL_ROOT_PASSWORD
properties {
maxActive = 50
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 3
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
validationQuery = "SELECT 1"
}
}
}
}
phpMyAdminでMySQLユーザーを作成する
セキュリティ向上のため、「root」ユーザーではなくアプリケーション専用のユーザーを作成することを推奨します。phpMyAdminで簡単に作成できます:
-
phpMyAdminで上部メニューから「User accounts」を選択します。

-
「Add user account」をクリックします。

-
ユーザー作成フォームを入力します:
- アカウント名(通常はアプリケーション名)を入力
- 「Generate password」をクリックして安全なパスワードを生成し、クリップボードにコピー
- 「Create database with same name and grant all privileges」を選択

フォームを送信すると、ユーザー名と同じ名前の専用データベースと新しいユーザーが作成されます。