MySQL 5.6 on Ubuntu 14.04で少しはまったこと

3号です。

オンプレ+CentOS6系なインフラをちょめちょめしてたのが一年くらい前でそっから会社辞めて、今の会社で久々にMySQL構築おじさんをしたらちょっとはまりました。私にUbuntuの知見がほとんど無かったというのも原因ですね。そのメモになります。

インストール時にMySQLのユーザパスワードを聞かれないようにする

通常ubuntuにaptでMySQLをインストールするとrootのパスワードどうする?とかインタラクティブなやりとりが行われます。しかしシェルスクリプトやchefなどからインストールする場合、これをスキップしたいです。そこで下記のようにDEBIAN_FRONTEND=noninteractiveをコマンドに渡すとスキップすることができます。

sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.6 mysql-client-5.6 libmysqlclient-dev

をバーンでいけます。Ubuntu力が低くてはまった事柄です。

mysqldが落ちない

上記インストール直後、ps -ef | grep mysqlってやるとmysqldが存在しています。で、このプロセスなのですが、/etc/init.d/mysql stopってやっても落ちてくれません。killしてもダメです。

service mysql stop

ってやる必要があります。普段serviceコマンドほとんど使わないので解決するまで結構時間を食ってしまった...。serviceコマンドで落としたあとは/etc/init.d/mysql stop/etc/init.d/mysql startが効くようになります。

File 'mysql-bin.index' not found (Errcode: 13 - Permission denied)とか言われる

データディレクトリの場所を変えたんですが、そしたらこれに当たりました。データディレクトリ変える場合は注意ですね。原因は/etc/apparmor.d/usr.sbin.mysqldというファイルがあってですね(知らなかった)、このファイルに下記を追記します。以下の例はデータディレクトリを/db/mysqlにする場合になります。

   /db/mysql/ r,
   /db/mysql/** rwk,

そしてsudo service apparmor reloadで解消します。

[ERROR] Function 'innodb' already existsがログに記録される

http://www.faqssys.info/error-function-innodb-already-exists/

これですね。たぶんバグだと思います。mysql.pluginテーブルに入っているinnodbプラグインがないよ、って意味です。他にもFEDERATEDがないよとかいろいろログに出ます...。 これについてはそもそもinnodbはビルトインされたものを使ってますので、mysql.pluginテーブルで不要なものを消しました。このエラーログが出ていても動作に影響は無いようなのですが、ERRORって文字が気持ち悪いので。

[ERROR] InnoDB: Tablespace open failed for '"mysql"."innodb_index_stats"', ignored.がログに記録される

http://bugs.mysql.com/bug.php?id=67179

これですね。該当のバージョンではないのですが...これが発生しました。

http://bugs.mysql.com/file.php?id=19725&bug_id=67179&text=1

こちらの要領に従って従ってテーブルを再作成してMySQLを再起動して完了です。

以上です。