Vagrant – phpMyAdminのインストール – CentOS7

phpMyAdminのインストール

PHPをRemiリポジトリーからインストールしているので、phpMyAdminもRemiリポジトリーからインストールする。

ポートの設定

Vagrrant環境の場合、VagrantfileでApacheで使うポートを設定しておく必要がある。

Apacheの起動確認

Apacheの起動状態を確認。

停止していればApacheを起動。

403エラー

ここまでの状態でlocalhost:8080/phpMyAdminにアクセスすると、403エラーになった。

phpMyAdmin.confの修正

/etc/httpd/conf.d/phpMyAdmin.confを以下のように修正する。

修正後はApacheを再起動。

起動成功

localhost:8080/phpMyAdminでログイン画面が表示される。

 

Laravel – データベース – 準備

概要

Laravelのプロジェクト開始時の、データベースの準備・設定についてまとめる。

データベースの準備

CREATE DATABASEなどによってプロジェクトで使うデータベースを作成する。以下は新たなデータベースlaravel_test_developmentを作成した例。

.envファイルの修正

データベース接続確認

php artisan migrateでマイグレーションが実行されればデータベースは正常に接続されている。

マイグレーションの結果生成されたファイル。

MySQL側でもテーブルが生成されている。

データベースに接続できないとき

MySQLとPHPのバージョンによっては、認証方法の違いで接続できない場合がある。その対応方法はこちら

 

Laravel – データベースに接続できない

エラー発生

Laravel導入直後にデータベースを接続しようとしたところ、エラーが発生した。

MySQLのバージョンは8.0.23、PHPのバージョンは7.3.28で、MySQLのデフォルトの認証はcacing_sha2_passwordだが、PHPは7.3でもこれに対応しておらずmysql_native_passwordらしい。

MySQLの認証方法変更

認証方法の確認。

rootの認証方法をmysql_native_passwordに変更しようとするが、エラー。

パスワードがポリシーに適合していない。これは新たにMySQLをインストールした時にある状況。パスワード検証内容を確認してみる。

設定するパスワードに合わせてポリシーなどを変更。

改めてrootユーザーの認証方法を変更・確認。

これでPHP7.3以下で接続可能になる。

 

MySQL – パスワード検証

概要

MySQLでユーザーのパスワードを設定する際に、その長さや使われるべき文字数などについて求める内容を設定できる。設定内容は以下のとおり。

  • ポリシー:長さ、文字種類、辞書のいずれを使うか
  • 最小長さ
  • 大文字・小文字の最小数
  • 数字の最小数
  • 記号の最小数
  • 辞書ファイルへのパス

パスワード検証の確認

現在のパスワード検証の内容は以下で確認できる。

SHOW VARIABLES LIKE 'validate_password%';

それぞれの指定内容は以下のとおり。

check_user_name
ユーザー名と一致する場合に拒否するかどうか。
dictionary_file
パスワードチェックに用いる辞書へのパス。デフォルトでは空で辞書チェックは行われない。
length
パスワードの最小文字数。
mixed_case_count
パスワードポリシーがMEDIUM以上の場合に求める大文字・小文字の最小数。
number_count
パスワードポリシーがMEDIUM以上の場合に求める数字の最小数
policy
LOW(0):長さのみ
MEDIUM(1):長さ、数値・大文字・小文字・特殊文字
STRONG(2):長さ、数値・大文字・小文字・特殊文字、辞書ファイル
special_char_count
ポリシーがMEDIUM以上の場合に求める記号の最小数。

パスワード検証内容の変更

それぞれの検証内容は、対応する変数の値をセットすることで変更する。

パスワードポリシー

SET GLOBAL validate_password.policy=LOW/MEDIUM/STRONG;

最小長さ

SET GLOBAL validate_password.length=最小長さ;

など。

 

MySQL – リレーションを持つCSVのインポート

概要

参照関係を持つテーブルにCSVデータをインポートすることを考える。

  • 親テーブルの主キーにAUTO_INCREMENTが設定されていて、子テーブルがそのキーを参照するリレーションを対象とする
  • データの追加ではなく、空のテーブルに新たにデータを登録するケースを対象とする

テーブル構成

以下のようなテーブル構造とする。

  • branchesテーブルは支社に関する情報を記録する
    • AUTO_INCREMENTの支社ID(プライマリーキー)
    • 支社名
  • warehousesテーブルは支社に属する倉庫に関する情報を記録する
    • AUTO_INCREMENTの倉庫ID(プライマリーキー)
    • 倉庫が属する支社を参照する支社ID(外部キー)
    • 倉庫名
  • customersテーブルは倉庫から出荷される先の顧客に関する情報を記録する
    • AUTO_INCREMENTの顧客ID(プライマリーキー)
    • 顧客を担当する倉庫のID(外部キー)
    • 顧客名

ExcelでCSVファイルの作成

元データの入力

以下の3つのテーブルデータを別のシートに入力する。

<branchesテーブル>

id name
1 関東支社
2 関西支社

<warehousesテーブル>

id branch_id name
1 1 千葉倉庫
2 1 八王子倉庫
3 2 東大阪倉庫
4 2 神戸倉庫

<customersテーブル>

id warehouse_id customer
1 1 山田商会
2 1 田中屋
3 2 中川商店
4 2 川井製作所
5 3 井戸商店
6 3 戸田商会
7 4 田村屋
8 4 村山製作所

CSVファイルの保存

3つのシートそれぞれをCSVファイルで保存する。

  • 名前を付けて保存
  • ファイルの種類は”CSV UTF-8 (コンマ区切り)”
  • シートごとに別々のCSVファイルに保存

BOMなしへの変換

ExcelのUTF-8はBOM付きで保存されるので、これをBOMなしのUTF-8に変換する。

たとえば、Windowsのメモ帳で読み込んでUTF-8(BOM付きではない方)で保存し直すなど。

ファイルの提供

外部サーバーの場合、FTPで所定の場所にCSVファイルをアップロード。

Vagrant仮想環境の場合、保存されたCSVファイルを共有ディレクトリーにコピーまたは移動。

MySQLでの操作

ローカルファイルを許可してログイン

MySQLにログインするのに、--enable-local-infileを指定してローカルファイルからの入力を許可。

MySQL内でローカルファイルの入力許可

@@local_infile変数の内容をチェックする。0の場合はローカルファイル入力が許可されていないので、SET GLOBALで許可する。

テーブルの準備

CREATE TABLEでCSVデータを読み込むテーブルを準備する。

作成したテーブルの構造。

CSVファイルの読み込み

アップロードまたは共有されたCSVファイルをLOAD DATA LOCAL INFILEクエリーで読み込む。

  • カンマ区切り→FILES TERMINATED BY ','
  • 改行コード→LINES TERMINATED BY '\r\n'
  • 1行目が見出し行の場合→IGNORE 1 LINES

読み込み結果の確認

各テーブルデータの確認

参照関係の確認

外部キーによる参照関係の確認。各外部キーと親テーブルのキーでテーブルを結合。

実行結果。

新規追加の確認

たとえば新たな支社を1つ追加し、AUTO_INCREMENTが機能していることを確認。

外部結合してみる。

 

Vagrant – MySQLインストール – FreeBSD

pkgによるインストール

FreeBSDのバージョンが古いと言われたが、ミスマッチを無視することができるようなので無視して続行。

インストール直後の主要ファイルの存在状況は以下の通り。

/usr/local/etc/mysql/my.cnf → 存在
$HOME/.mysql_secret → 存在しない
/root/.mysql_secret → 存在しない
/usr/local/libdata/ldconfig/mysql57-server → 存在
/usr/local/share/mysql/mysql.server → 存在

 

MySQLサーバー起動

/etc/rc.confに以下の1行を追加してvagrant reload

サーバーの実行状況を確認。

サーバーを再起動する場合。

サーバーを起動すると.mysql_secretファイルが作成される。

初回ログインとパスワード変更

初期パスワードの確認

rootユーザーの初期パスワードは/root/.mysql_secretファイルに書かれている。

初回ログイン

パスワードを変更

SET PASSWORDクエリーでパスワードを変更。

日本語の設定

さくらサーバーでの日本語の扱い

インストールしたままの状態だと、ロケールやエンコーディングの設定が日本語の扱いに適していないので変更する必要がある。さくらサーバーのMySQLでの扱いは以下のようになっている。

OSのロケール

ロケールは日本(ja_JP)で文字コードはUTF-8で設定されている。

MySQLの文字コード

systemがutf8、databaseとserverがutf8mb4で設定されている。

MySQLの照合順序

databaseとserverの照合順序はutf8mb4_general_ciに設定されている。

Vagrantの設定

さくらサーバー上のMySQLの設定に合わせる。ロケール、文字コード、照合順序の詳細については以下を参照。

ロケール設定

/etc/profileに以下2行を追加してvagrantをリロード。

※’=’の前後にはスペースを入れない。

<変更後のロケール>

文字コードと照合順序の設定

/usr/local/etc/mysql/my.cnf[mysql]セクションと[mysqld]セクションに各々以下を追加してMySQLをリロード(sudo /usr/local/etc/rc.d/mysql-server restart)。

<変更後の文字コード>

<変更後の照合順序>

 

MySQL – CSVファイルへのエクスポート

コマンド

以下のコマンドで、指定したテーブルのデータをCSVファイルに書きだす。

エラー対応

下記のようなエラーが出る場合。

グローバル変数を確認する。

この場合、表示されたディレクトリーにのみCSVファイルを書き込むことが可能なので、以下のように指定する。

結果のファイルdata.csvは/var/lib/mysql-filesディレクトリー下に保存される。

 

MySQL – テーブルのカラムの変更

カラム名の変更

changeの場合

カラムの型の変更

changeの場合

ALTER TABLE … CHANGEで変更するが、新しいカラムでも現在のカラム名を指定する必要がある。

modifyの場合

 

MySQL – テーブルのカラムの削除

1つのカラムの削除

複数のカラムの削除

 

MySQL – テーブルへのカラムの追加

最後に追加

先頭に追加

指定したカラムの後に挿入

 

複数のカラムを追加

 

なお、複数カラムを特定のカラムの後に挿入する場合、ADD (...) afterではエラーになるため、以下のようなクエリーにする。