mac で homebrew から入れた mysql 8.0 を 5.7 に落とす

ダウングレードとは言ってない
公式ドキュメントにもダウングレードがサポートされてないことははっきり書いてあります
MySQL :: MySQL 8.0 Reference Manual :: 2.10.2 Downgrading MySQL

production では必ず8.0に上げる前にバックアップを取っておきましょう

今回、 Homebrew で入れてたやつをうっかりアップグレードしてしまって焦りました
最終的に data ディレクトリを初期化する羽目になりました。。。(一応データは救出出来ました)
以下流れです

うっかり 8.0 にしてしまう

brew upgrade でよく見ずに更新してしまい、いつの間にか起動できなくなっているのに気付きました
その時はこのようなエラーが出ていました

2018-07-28T19:27:30.524132Z 1 [ERROR] [MY-010781] [Server] Found ./mysql/index_stats.frm file in mysql schema. DD will
create .ibd file with same name. Please rename table and start upgrade process again.
2018-07-28T19:27:30.524175Z 1 [ERROR] [MY-010336] [Server] Found .frm file with same name as one of the Dictionary Tab
les.
2018-07-28T19:27:30.524338Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-07-28T19:27:30.524359Z 0 [ERROR] [MY-010119] [Server] Aborting

5.7 を入れ直す

他にも色々変わってそうだし 8.0 を使い続けるのは厳しそうだったので元に戻す方向で頑張ることにしました
実行したコマンドは以下の通り(8.0を消して5.7を入れ直してます)

brew sevices stop mysql
brew uninstall mysql
brew install [email protected]
brew services start [email protected]

しかし5.7が起動しない

素直には起動してくれず、以下のようなログが吐かれていました

2018-07-28T22:01:56.921910Z 0 [ERROR] InnoDB: Unsupported redo log format. The redo log was created with MySQL 8.0.11. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html
2018-07-28T22:01:56.921954Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2018-07-28T22:01:57.428053Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2018-07-28T22:01:57.428134Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2018-07-28T22:01:57.428180Z 0 [ERROR] Failed to initialize builtin plugins.
2018-07-28T22:01:57.428202Z 0 [ERROR] Aborting

どうやら中途半端に 8.0 向けになったファイルが悪さをしていそう?
ひとまず起動させて dump だけしたかったので redo log が書かれている ib_logfile を移動させてみます

brew services stop [email protected]
mkdir ~/backup
cd /usr/local/var/mysql
mv ib_logfile* ~/backup
brew services start [email protected]

自分の場合はこれで起動しました!
しかし err ログを見てると不穏な出力がありました

2018-07-28T22:09:52.237832Z 0 [Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name
table_name.  Please run mysql_upgrade

innodb_index_statsmysql DB にある統計用テーブルとのことで、致命的な問題ではなさそうです(起動してますし)
一応動いているのでこのまま dump してしまいます

mysqldump -u root --databases db1 db2... > ~/all.sql

復旧

これで必要なデータは吸い出せたので、データディレクトリを初期化して dump したデータを入れ直します

brew services stop [email protected]
cd /usr/local/var
mv mysql mysql_old
mkdir mysql
mysqld --initialize-insecure
brew services start [email protected]
mysql -u root < ~/all.sql

このブログのデータも無事元通りになりました

PS4 に外付けSSDを導入

もうMHWは100時間以上プレイしているのですが、今更ながらSSDを導入してみました
起動時間やクエスト出発時のロードが本当に短くなるのでおすすめです

今回はPS4がSATA2までしか対応してないのと、
システムソフトウェアの再インストールが面倒そうだったので外付けにしました
PS4ProならSATA3なので内蔵化した方がいいです

購入したSSDは売れ筋のCrucial SSD 500GB MX500です
250GB以上であればなんでも良いですが、SATA3のものにしておきましょう

外付けケースはSATA3かつUSB3.0以上のものを選んでおけばとりあえず問題ないと思われますが、
メーカーホームページを参照するなどして最大転送速度の説明はよく読みましょう
予算に余裕がある場合は、今後を考えるとUSB3.1 Gen2又はSuperSpeed+という10Gbpsの規格に対応した製品が良いかもしれません
自分はセンチュリーのCSS25U31BKにしました
本当は玄人志向のGW2.5FST-SU3.1が欲しかったのですが、秋葉原の店頭でも売り切れていました。。。

2.5インチストレージには7.5mmと9mmの2種類があり、ケースも対応している厚さが違うので組み合わせに注意しましょう
上記は7.5mm同士の組み合わせになります

ケースにSSDをセットしてケーブルでPS4に繋ぐと自動的に認識されフォーマットを促されます
フォーマット完了後は新規ソフトのインストール先が外付けストレージになり、
設定メニュー>ストレージから内蔵の方にあるソフトを移動させたり出来るようになります

スマホが突然壊れた時にやったこと

先日、普通に操作中に Nexus5X がシャットダウンしてしまいました
ファクトリリセットなどを試してもブートアニメーションを突破出来ず、
故障と判断して諦めてスマホを新調することになったのでその時大変だったことをまとめておきます

一応再起動出来るかの検証

cache, data パーティションの初期化、電源ボタン連打、端末を冷やしてから再起動などググって出て来る方法は一通り試しましたがダメでした
bootloader はアンロックしていなかったのでファクトリイメージの再書き込みで回復出来たのかは未検証です

SIMカードの入れ替え

悲しいことに N5X 付属のピンを紛失しており途方に暮れました
代わりになりそうなものがなかったので仕方なく爪楊枝をカッターで加工して頑張って取り出しました。。。
N5X のSIMスロットの穴は iPhone などと比べて小さく、安全ピンなどの代用品でも太さ次第では使えないので注意が必要です
新しい端末の Xperia XZ1 compact は防水のためかSIMスロットがキャップ式で、トレーも指で簡単に引き出せて感動しました

各種アカウントの復旧

新しい端末に Google アカウントをセットアップする際に、旧端末の2段階認証アプリが使えなかったため詰みかけました
結局PCブラウザでログインしっぱなしだったため、パスワード入力でリカバリコード画面にアクセス出来て助かりました
Slack もアプリで認証していたのですが、たまたまPC版クライアントがログイン状態であればなんとかなる仕様だったため助かりました

このような場合、リカバリコードを保存したり代替のアクセス手段を用意しておかないとサービス次第で詰みます
またコードの保存先も検討が必要で、例えば dropbox に置いても dropbox 自体がアプリでの2段階認証になってると詰みます
自分は最近2段階認証を有効化したものはアプリに登録するのが面倒でSMS認証になっていたため助かりました(dropboxもその一つ)
とはいえ端末の物理的紛失・盗難を考慮するとリカバリコードを紙に印刷しておくのが一番無難ということになるかもしれません…

Switch ソフトのDL版は量販店で買おう

先日運良く amazon で Switch を定価購入することが出来た

早速ゼノブレイド2のDL版をニンテンドーeショップで購入(もちろん定価)した
…のだが、よくよく調べると量販店の方がお得な値段でDL版を提供していることに気付いた
Sony PS4 のDL版は PlayStation Store でしか提供されておらず、
定価で買うのが習慣化していたので完全に油断していたorz

例えばゼノブレイド2は定価だと税込み8618円だが、 amazon ではご覧の通り
自分が確認した時は約1割の値引きがされていた(実際の値段はamazonで確認して欲しい)

ヨドバシも10%のポイント還元が受けられるので、ほぼ同額だ
さらに amazon の場合は下記のような複数本同梱でのディスカウントもしていて、強い

知ってる人にとっては当たり前のことなのだけど、戒めとして記しておく
次からは絶対にニンテンドーeショップ以外で買おうと心に誓った。。。

osx 版 Synergy2 がスリープ復帰後に再接続してくれない

Synergy2 になってから表題の現象が起こっているのに気づいた
ver は 2.0.1, 2.0.2 で確認している

osx 版は一度起動すると以降 Synergy.app を実行しても何も表示されないのがそもそもバグっぽいのだけど、
とりあえずプロセスを kill すると勝手に再起動してくれて繋がったのでスリープ解除後に下記コマンドを自動で実行するようにした

killall synergy-service

自動実行には sleepwatcher を使った
homebrew の場合以下のようにインストール出来る

brew install sleepwatcher
brew tap homebrew/services
brew services start sleepwatcher

インストール後、 ~/.sleep~/.wakeup というシェルスクリプトを作成して置いておくとそれぞれスリープ時と解除時に自動で実行してくれる