FreeBSD: シェルから MySQLアカウントとデータベースを作成する

OSインストール後の FreeBSD の設定をすべてシェルのコマンドラインから行えないかと考えています。
先日 pw コマンドによるユーザー登録方法を学びました。

私がなぜ、Unix コマンドラインにこだわるかというと、コマンドラインからセットアップ操作できればシェルスクリプトのバッチファイル化できるためです。バッチファイル化できれば、バッチファイルを組み合わせることでより大きなスクリプトにして、FreeBSDサーバーのセットアップを、10分以内に終わらせることが出来そうだからです。
FreeBSDのセットアップを簡単に行うには、他にも、一度テンプレートとなる FreeBSD を構築しておいて、それを仮想ドライブ化するとか、dump/restore するという手もあります。この場合、1GBを越えるイメージファイルを保存しておくディスクスペースを消費してしまいます。
バッチファイルによるセットアップの場合は、FreeBSD OSの通常インストールまたは、イメージファイルからの起動後に数kBのファイルをダウンロードして実行するので、例えば、イメージインストールするしか方法がない Raspberry Pi 用 FreeBSD11 のセットアップを10分で完了させることが出来るかも知れません。現在の私のターゲットは、この Raspberry Pi2 のセットアップを(途中で、Yes とタイプする必要が何度か発生するかも知れませんが、)全てバッチファイルで完了させること。

今回は、MySQL にデータベース用のアカウントとデータベースを mysql 起動後ではなく、Unix シェルコマンドラインから登録する方法を調べましたので、メモすることにしました。

mysql には mysqladmin という管理コマンドがあるので、mysql にログインしなくても、ここからデータベースを制御できるのだろうと期待していたんですが、残念ながら見つかりませんでした。
正確には、mysqladmin コマンドでデータベースを作ることは出来るのですが、mysqlユーザー登録方法が見つかりませんでした。一度 mysql に入ってから作業するというのはバッチファイルが止まることになるので却下。検索してみると、外部ファイルを mysql に読み込ませることが出来るという情報が見つかりました。

MySQL インストール

MySQL上にデータベースやアカウントを作成する前に、MySQLをインストールして起動しないとお話になりません。

ダウンロードしたばかりのVMイメージの素のFreeBSD11 を起動した後、アカウント登録や pkg が使えるようになった後で、

pkg install mysql56-server phpmyadmin

として、mysql の他、動作確認用にphpmyadmin を入れておきます。
この後で、

service mysql-server onestart

とすれば MySQL が起動。

データベースを作る

データベースを作るだけなら、root で、

mysqladmin create new_database_name

とすれば作成できます。しかし、MySQLを使うユーザー(Unixユーザーとは別管理になります。が、アカウント名はUnixアカウントと合わせておく方が管理上便利。)を作成するためには mysqladmin コマンドではダメで、mysql コマンドで直接 mysql用コマンドを入力しないとダメのようです。
今までは、phpMyAdmin を使って作業していたのでわかりやすかった反面、GUI操作が必要であり、毎回メモを見ながら数分掛けて作成を行っていました。

コマンドファイルで MySQL にデータベースとユーザーを作る

検索した結果、MySQL に対して、コマンドファイルを外部から読み込ませるという方法が見つかりました。
WordPress 用に MySQL をコマンドから操作しようとすると次のステップになります。

  1. wordpress データベースを作る
  2. wordpress アカウントを作る
  3. 上記1で作ったデータベースの権限をwordpressユーザーへ移譲する

ですから、上記操作をバッチファイルにまとめて、一括読み込みさせればいいわけです。
これをファイルに書いたものが以下。

<for_wp.sql>

CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;

コマンドは全て小文字でもOKですが、ここではコマンドとパラメータを区別するために大文字小文字で書いています。

次ののコマンドで読み込ませます。

mysql < for_wp.sql

一瞬で完了。

結果を確認してみると、

mysql> SELECT host, user, password FROM mysql.user;
+----------------------+-----------+-------------------------------------------+
| host                 | user      | password                                  |
+----------------------+-----------+-------------------------------------------+
| localhost            | root      |                                           |
| pc12.lifewithunix.jp | root      |                                           |
| 127.0.0.1            | root      |                                           |
| ::1                  | root      |                                           |
| localhost            |           |                                           |
| pc12.lifewithunix.jp |           |                                           |
| localhost            | wordpress | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
+----------------------+-----------+-------------------------------------------+
7 rows in set (0.00 sec)

という表示。これで、バッチファイルによる MySQL のセットアップは、いけそう!

あとは、必要に応じてコマンドファイルの中のアカウント情報と、データベース名を書き替えるだけ。

バッチファイルによる FreeBSD の自動セットアップに一歩近づきました。

コメントを残す