#はじめに
サーバーにサイトをあげる際には、まずローカルのテスト環境で同じものを作って、動作を確認してからサーバーにあげますよね。
私はレンタルサーバーのコアサーバーでデータベースを使っていますが、テスト環境でも同じ仕様のデータベースを作ろうとしました。ただ、コアサーバーでは独自のコントロールパネルを使って、データベースを作るので、ローカルで同じ状況を再現するのには少々苦労しました。
ここに、コアサーバーと同一のmysql環境を構築するまでの道のりを記録として残します。コアサーバー使っている少数の初心者の参考にできればと思います。
##環境
サーバー側
コアサーバー :プラン CORE-MINI
DB:mySQL
ローカル側
ubuntu 20.04
DB:mySQL
##①Mysqlへログイン
###ローカル側
mysql -u root
#若しくは
sudo mysql
###コアサーバー側
写真1「データベースの設定画面」
※個人設定のある枠はぼかしています
コアサーバーのコントロールパネルにログインして「データベース」をクリックするだけなので、何ら難しくない。
ちなみにsshを使ってCUI(黒い画面)からログインもできるが、自身の権限ではデータベースを作成することが出来ない。DBを作るにはコントロールパネルを使うしかないらしい。(もしできるようなら教えて下さいm(_ _)m)
##②DBを作りたい
###ローカル側
CREATE DATABASE データベース名;
「DB名」は ローカルsql側で入力した 「CREATE DATABASE ~~」の構文と一致する。パスワードは 次のステップで作るユーザーのパスワードを作ることになる。
※ちなみにsqlでは、データベースにパスワードはつけないらしい。代わりにユーザーにパスワードを付けている。各ユーザーにアクセスできるデータベースの制限を加えることで、間接的にデータベースを保護しているようだ。
なおコアサーバーでの手続きはこれで完了♫。次の作業であるユーザー作成と権限付与は自動でやってくれる。
##③sqlのユーザーを作る
###ローカル側
CREATE USER user IDENTIFIED BY 'password'
-- user=ユーザー名 'password'=ユーザーのログインパス
これがコアサーバーで言うところ、「写真2」のDB名と、パスワードに一致する。
ちょっとまて、これはユーザー名だろ。データベースはさっき作っただろう?。確かにデータベースはさっき作った。しかし、コアサーバーではデータベース名と、それを使うユーザー名が同一のもので自動生成されるのだ。
逆に言うと、ローカル環境でコアサーバーのデータベースを再現するなら、ユーザー名とデータベース名は同一のものにする必要がある
###余談 パスワードの水準チェック
mysqlのデフォルトでは、パスワードの水準は「medium」=「特殊文字使用かつ8文字以上の文字列にする」 になっているはずだ。
別にそれに従えば良い話だが、コアサーバーではパスワードが15文字以下かつ特殊文字は使えない設定になっている(写真2参照)。
つまり、デフォルトの水準に従ったパスワードは、コアサーバーでは受け付けないのだ。私はローカル環境で組んだコードを一切イジらず、そのままコアサーバーに転送できるようにしたい。転送するたびにパスワードを書き換えるのは面倒くさい。。ならば、ローカル環境のsqlさんに簡単なパスワードを許可してもらわねばならない
--ローカルのsqlにこの一文
set global validate_password.policy=LOW;
これだけでパスワードの要件が最低に設定されるので、無事ローカル環境でも、コアサーバーと同じパスワードを設定することができる。
##④権限の付与
###ローカル側
今作ったユーザーが、今作ったDBにアクセスできるように設定します。多分以下の設定がコアサーバーで与えられる権限と同じのハズ
GRANT ALL PRIVILEGES on DBname.* to "usename"@"localhost"
-- 'DBname'=データベース名 username=ユーザー名 を代入
##php PDOの場合こんな感じでアクセスできます
$dsn = 'mysql:dbname=データベース名;host=localhost';
$user = 'ユーザー名';
//user とdbnameは同じでok;
$password = 'パスワードを入れる';
$pdo = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
上手く行けばローカル環境でも本番のサーバー環境でも同じ内容でログインできるようになる。開発者のポリシー的に良いのかはわからないが、本番サーバーに転送する際に、ログイン情報を修正をしなくてよいのは楽だ。
###所感
コアサーバーのコントロールパネルは、最小の入力でデータベースが作れるように工夫されている。それ故に、CUIを使って自力でデータベースを作ろうと思った際には少し誤解してしまうところがあった。元よりsqlを触れて、データベースをガリガリ組んでいた人には関係ないだろうが、先にコントロールパネルでデータベースを作っていた人の参考になれば良いと思う。