先日 CentOS 7 で LAMP 環境を構築する場面があり、さくらの VPS を利用して構築した際に MySQL の root のパスワードが分からず苦戦したので、残しておこうと思い、これを書いています。
さくらの VPS でスタートアップスクリプト「LAMP」を利用して環境構築を行ったはよいが、インストール後に MySQL (MariaDB) の初期セットアップを進めようとした時に「あれ?そいや、MySQL の root のパスワードって、どうなるんだ??」と壁にぶつかってしまった方の手助けになれば幸いです。
LAMP のインストール手順
さくらの VPS のスタートアップスクリプト「LAMP」を使用して CentOS 7 をインストールする手順については別記事で解説していますのでそちらをご覧ください。
以下は、こちらの記事の内容の通り LAMP 環境を構築完了し、サーバーへの SSH 接続ができるようになっている状態を前提として進めていきます。
本題:MySQL の root のパスワードが分からない
さて、本題ですが、上記の手順でインストールされたさくら VPS 上の CentOS 7 には、Linux+Apache+PHP+MySQL (MariaDB) の LAMP 環境が構築されています。
一つずつインストールしなくていいのは、すごく楽ですね!(がちで)
さくらインターネットさん、ありがとうございます!
、、、と言いたいところですが、それぞれ、インストールされただけの状態なので、初期設定を自分の利用用途に合わせてしていかないといけません。
こればっかりはクリックひとつでとはいきませんゆえ。
MySQL (MariaDB) のインストール後初期セットアップ
LAMP 環境を構築したことがある方なら一度は (どころか何度も) やっているであろう「mysql_secure_installation」コマンド。
今回もいつものように「mysql_secure_installation」コマンドを実行しようとした際に、突如として大きな壁に阻まれました。
mysql_secure_installation を実行
MySQL (MariaDB) のインストール直後、一番最初にやるのがこれです。
# mysql_secure_installation
※ MariaDB 向けには以下のコマンド名に変更になっているようです。mysql_secure_installation の実行時に、コマンドが見つかりません、と怒られた場合は以下のコマンドをお試しください。
# mariadb-secure-installation
初期セットアップを進めようとするが、、、
mysql_secure_installation コマンドは、匿名ユーザーの削除や test データベースの削除など、セキュリティにまつわる設定や処理を対話形式で行ってくれる大変気が利くコマンド君なのですが、その中でも最初に行うのが root ユーザーのパスワード設定です。
mysql_secure_installation コマンドを実行すると、まずは root ユーザーの現在のパスワードを聞かれます。
Enter current password for root (enter for none):
※念のためですが、OS の root ユーザーではなく、MySQL (MariaDB) の root ユーザーのパスワードです。
私の場合、過去の経験から「MySQL のパスワードの設定をした記憶はないから 空 だろう (過去にやったときも確かそうだったし)」と思い、そのまま空で Enter してみるも、パスワードが違うと怒られてしまいます。。。
(この時は「何か間違ってキーボード押しちゃったかな?もっかいやろう」と楽観視しています)
何か間違えたかなと思い、mysql_secure_installation コマンドからやり直して、確実に空で Enter しても違うと怒られるばかり。。。
(このあたりで「あー、これ OS インストールからやり直しかなー」とよぎります。が、安心してください、吐いてますよ)
余談:root のパスワードは、、、
さて、さくらの VPS のスタートアップスクリプト「LAMP」を使用して OS インストールした場合、MySQL (MariaDB) の root ユーザーの初期パスワードはどうなるのでしょう?
私は大いにはまりました。。。
いろいろ試しているうちに確信を持ちました。
初期パスワードはどうやら空ではなく、何かしらのパスワードが設定済みのようだ。
なるほど、わからん。
そしてふと思いました。
ではそもそも、初期パスワードは誰が設定したのか、ということです。
そうです。
今回の場合は スタートアップスクリプト「LAMP」 であるはずです。(えらいぞ、俺氏)
そうと分かればスタートアップスクリプトで具体的に何をしているのか、詳細を見てみましょう。
結論:MySQL (MariaDB) の root ユーザーのパスワードが書いてある場所①
冒頭でもご紹介したこちらの記事の「スタートアップスクリプトの詳細」の章でも触れていますが、そちらのページを細かく見てみることにします。
スタートアップスクリプト「LAMP」の内容を見てみる
「スタートアップスクリプトの詳細」の画面のこちらに、スクリプト内容が記載されています。
※なお、こちらの画面はさくらの VPS のコントロールパネルにログインしていないと見れないためご注意ください。(検索してもこの画面はヒットしません)
MySQL (MariaDB) に関するセットアップ内容
このスクリプト内容の、以下の部分が MySQL (MariaDB) の初期セットアップをしている箇所です。
function mysql_configure() { type mkpasswd && NEWMYSQLPASSWORD=$(mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2) type mkpasswd-expect && NEWMYSQLPASSWORD=$(mkpasswd-expect -l 32 -d 9 -c 9 -C 9 -s 0 -2) /usr/bin/mysqladmin -u root password "$NEWMYSQLPASSWORD" || exit 1 cat <<-EOT >/root/.my.cnf [client] host = localhost user = root password = $NEWMYSQLPASSWORD socket = /var/lib/mysql/mysql.sock EOT chmod 600 /root/.my.cnf mysql --defaults-file=/root/.my.cnf <<-EOC DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; FLUSH PRIVILEGES; EOC }
mkpasswd コマンドでランダムなパスワードを生成した後、以下のファイルにそのパスワードを書き込んでいるようです!。。
/root/.my.cnf
ということで、SSH 接続して、上記ファイルの内容を確認してみると、見事初期パスワードをみつけることができました。
# cat /root/.my.cnf [client] host = localhost user = root password = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX socket = /var/lib/mysql/mysql.sock
ランダムな 32 桁のパスワードが生成されています。
このパスワードを mysql_secure_installation コマンドの現在の root ユーザーのパスワードとして入力したところ、、、無事に先に進むことができました。(涙)
※ドット (.) で始まるファイルは一覧に表示されないので、「ll /root/」とやっても出てきませんが、直接「cat /root/.my.cnf」とファイル指定すれば見ることができます。
結論:MySQL (MariaDB) の root ユーザーのパスワードが書いてある場所②
上記①の手順でようやく初期パスワードが分かり、インストール後の MySQL (MariaDB) の初期セットアップを完了させることができたわけですが、いや待てよ、と。
こんなところを辿らないと初期パスワードを知る術がないのはおかしくないか。
ということで、「さくら vps スタートアップスクリプト」などとググってみます。
スタートアップスクリプトのマニュアルページ
ググったところ、以下のページがヒットしました。
スタートアップスクリプトの動作
スタートアップスクリプトは、サーバーの初回起動時後に以下の動作が行われます。
重要
本機能を用いてコントロールパネルに入力するパスワードを含む値は、スクリプト及び実行ログ、スクリプト内部の処理で作成されるファイルなどのVPS内部に残留します。
必要がある場合は、下記の内容を参考に削除ください。
CentOS の場合1. OS起動時、systemdで管理されている startup.service が ”/root/.sakuravps/startup.sh”を実行
2. startup.shより ”/root/.sakuravps/startup.done” を作成
3. startup.shより ”/etc/profile.d/startup.sh” を作成し、スクリプトが実行中にログインした場合にはメッセージを表示する
4. startup.shが、指定されたスクリプト(“/root/.sakuravps/VPS名.sh“に配置)をbashとして実行
5. スクリプトが実行され、ログが”/root/.sakuravps/startup.log”に出力される
6. スクリプトが正しく(終了コードが”0″)終了すると”systemdから/startup.service の実行処理を削除ヒント
CentOSの場合、StartupScript完了前に VNCコンソールおよびSSHログインが可能となります。
さくらの VPS のマニュアルサイトのスタートアップスクリプトのページ内「スタートアップスクリプトの動作」より
スタートアップスクリプトの実行状況は”/root/.sakuravps/startup.log”をご確認ください。
スタートアップスクリプトのログ
ほほーう。
「/root/.sakuravps/startup.log」にログ出力されている、とな。どれどれ。
# cat /root/.sakuravps/startup.log ====================================================================== STARTUP SCRIPTS START ====================================================================== => RUNNING /root/.sakuravps/xxxxx.vs.sakura.ne.jp.sh + ssl=false + fqdn= + email= + '[' -n '' ']' ++ hostname -f + fqdn=xxxxx.vs.sakura.ne.jp + . /etc/os-release ++ NAME='CentOS Linux' ++ VERSION='7 (Core)' ++ ID=centos ...
ふむふむ。
スタートアップスクリプト実行時のログがはかれているみたいだ。
... + mysql_configure + type mkpasswd mkpasswd is /usr/bin/mkpasswd ++ mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2 + NEWMYSQLPASSWORD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + type mkpasswd-expect /root/.sakuravps/xxxxx.vs.sakura.ne.jp.sh: line 126: type: mkpasswd-expect: not found + /usr/bin/mysqladmin -u root password XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + cat + chmod 600 /root/.my.cnf + mysql --defaults-file=/root/.my.cnf + reboot ====================================================================== STARTUP SCRIPTS END ======================================================================
!!!!!!!!!!!!!!!!!!!!
書いてある。。。。。
!!!!!!!!!!!!!!!!!!!!
現場からは以上です。
まとめ
さくらの VPS にて、CentOS 7 を OS から LAMP 環境をセットアップする際の選択肢の一つとして、スタートアップスクリプト「LAMP」を利用する方法があります。
その場合に、セットアップされた MySQL (MariaDB) の root のパスワードが分からない場合の確認方法について解説しました。
正直なところ、もう少し分かりやすく説明がほしい、と思いました。
私が何かを見落としているだけでしょうか。
今回はさくらの VPS を例にしましたが、他のサービスを利用する際にも、便利になる反面ブラックボックスになりがちな部分が少なからずあると思います。メリット、デメリットを考えてサービスの選定、設定方法の選択ができるとよいですね。