ubuntu server のバージョンを今更ながらにアップグレードしました。
16.04 LTS がリリースされて、やらねばなと思いつつタイミングを逃して2年が…。
業務終了後に行わないといけないのでなかなか。
そうこうしているうちに、次の 18.04 LTS の時期が目前です。
18.04 が出てしまうと2回アップとやっかいなので先日思い切って実行しました。
予備サーバーでバージョンアップに影響が出そうなところは確認していました。
一つは redmine を追加リポジトリよりインストールしていたので依存の問題でアップしないこと。
まあ、これは消して入れ直すだけなので比較的簡単にクリア。
これだけかと思ったらデータベースの問題が出ました。
mysql のバージョンが 5.5 から 5.7 へ変わったため、PHP の SQL が実行されないという問題が発覚。
バージョン変更により mysql_* で始まるコマンドが使えなくなり書き換えが必要とのことです。
置き換えの方法は二つ、mysqli_ を使う方法と PDO(… を使う方法が見つかりました。
私は new PDO(‘server-address’, ‘ID’, ‘PASS’) を使う方法を選択しました。
これは書き換えで問題なくクリア。
次悩んだのが、SQL は実行され始めたが特定の SQL が実行できないと言うこと。
いろいろ調べたら DISTINC を含む SQL がダメ。
mySQL に sql_mode の ONLY_FULL_GROUP_BY が追加されこれが影響していると。
確かに並べ替えを消せば実行できるのでこの影響でした。
SQL を直せば良いのですが時間かかりそうだったので、取り急ぎ phpmyadmin から sql_mode の ONLY_FULL_GROUP_BY を削除して対応しましたが、再起動したら設定が戻る。
設定を保存する方法調べたところ /etc/mysql/my.cnf に sql_mode=……. を追記するとか出てきたのですが ubuntu 16.04 の場合だと追記すると sql_mode なんて設定無いぞと webmin がエラーをはき出す。やはり設定は反映しない。
他にはと探したところ ubuntu のコミュニティ に見つけました。
Source: How to Disable Strict SQL Mode in MySQL 5.7 らしいです。
/etc/mysql/conf.d/disable_strict_mode.cnf に
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
を記述し保存して restart する。これで無事設定できました。
disable ってことなので書いたのが消えそうな感じがするのですが、解除したいモードを書かずに記述すれば良いみたいです。
次の LTS は早めにアップしなきゃ。