Raspberry Pi 2でサーバ作ってみる(16) 〜MySQLの初期設定〜

インストール後は初期設定。
まずはユーザを作ります。

groupadd mysql
useradd -r -g mysql mysql -d /usr/local/mysql

ちゃんと公式を見ながらやります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.10.1 Unix 類似システムでのインストール後の手順
ソースからインストールしたため、mysql_install_dbが必要らしい。

#MySQLのインストールディレクトリに移動
cd /usr/local/mysql
#rootでインストールしたので、所有権をmysqlに変更
chown -R mysql .
chgrp -R mysql .
#mysqlユーザで、データディレクトリを指定。さらにrandom-passwordオプションを付けて実行
scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --random-password
    • random-passwordってのは、セキュアに実行するためのオプションで、MySQL5.6.8で追加されたらしい。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.4.3 mysql_install_db — MySQL データディレクトリの初期化
rootパスワードをランダム生成し、匿名ユーザが作成されないそうな。
homeディレクトリに.mysql_secret というファイルができるようなので、

cat ~/.mysql_secret 
# The random password set for the root user at Sun Sep 27 22:33:56 2015 (local time): xxxx

xxxxはパスワード(文字数ももっと長いですよ)
公式ではデータディレクトリ以外のインストールディレクトリ権限をrootに戻しているみたい。

#所有権をrootに戻す
chown -R root .
#データディレクトリのみmysql所有に
chown -R mysql data

公式では設定ファイルを/etcにコピーしてます。
あれ?確かmysql_install_dbでmy.cnfが作成されたような…
/usr/local/mysql/my.cnfで確かにあるので、中を覗いてみると、
ほとんどコメントアウトされてました...
ということで改めてコピー。

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
bin/mysqld_safe --user=mysql &

#ソケット関連のエラー?所有権が問題かもしれないので、MySQL用のディレクトリを作成して、mysqlユーザに所有権を与える。
nano /etc/my.cnf
#mysql.sockの場所を変更したら、該当するディレクトリを作って所有権を与えておく
mkdir /tmp/mysql/
chown -R mysql /tmp/mysql/

でもダメ。調べると、
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.4.3 mysql_install_db — MySQL データディレクトリの初期化
こちらになるほど、ということが書いてある。
さっそくmy.cnfの[client]の記述を加えて再起動。
なんかうまく行ったっぽい?

別の端末から接続してみる。

/usr/local/mysql/bin/mysqladmin version
/usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)

そういえばmysql_install_dbでrootのパスワードを変更していた...
ということでパスワードを変更する。
ユーザーのパスワードを変更する - MySQL 逆引きリファレンス
こつこつ綴る: mysqlのパスワードを再設定する for Mac
ここらあたりを参考に。
公式と同じようにDBやテーブルが見えた!
うまくいったっぽい。

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ if (pre.className.indexOf("gist") !== -1) { return } var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)