0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

コアサーバーのDB環境をローカルに再現

Last updated at Posted at 2021-11-27

#はじめに
 サーバーにサイトをあげる際には、まずローカルのテスト環境で同じものを作って、動作を確認してからサーバーにあげますよね。
 私はレンタルサーバーのコアサーバーでデータベースを使っていますが、テスト環境でも同じ仕様のデータベースを作ろうとしました。ただ、コアサーバーでは独自のコントロールパネルを使って、データベースを作るので、ローカルで同じ状況を再現するのには少々苦労しました。
 ここに、コアサーバーと同一のmysql環境を構築するまでの道のりを記録として残します。コアサーバー使っている少数の初心者の参考にできればと思います。

##環境
サーバー側
コアサーバー :プラン CORE-MINI
DB:mySQL

ローカル側
ubuntu 20.04
DB:mySQL

##①Mysqlへログイン
###ローカル側

 mysql -u root
#若しくは
  sudo mysql

###コアサーバー側
写真1「データベースの設定画面」
※個人設定のある枠はぼかしています
Screenshot from 2021-11-27 17-05-41.png

 コアサーバーのコントロールパネルにログインして「データベース」をクリックするだけなので、何ら難しくない。
 ちなみにsshを使ってCUI(黒い画面)からログインもできるが、自身の権限ではデータベースを作成することが出来ない。DBを作るにはコントロールパネルを使うしかないらしい。(もしできるようなら教えて下さいm(_ _)m)

##②DBを作りたい
###ローカル側

CREATE DATABASE データベース名;

###コアサーバー側
「写真2」DBの作成画面
coreDBmake.png

 「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を触れて、データベースをガリガリ組んでいた人には関係ないだろうが、先にコントロールパネルでデータベースを作っていた人の参考になれば良いと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?