読者です 読者をやめる 読者になる 読者になる

雑多なノート

プログラミング初心者がメモとかを書きます。基礎的なこともメモとして。偏食系のアニオタ。

MySQLのバージョンを上げた

ググって出てきたコマンドを何も考えずにコピペしたら死んだ
まぁ考えても変わらなかったきもするけど


発端はツイッターのつぶやきをMySQLに入れたいと思ったときのこと.

get_tweet.py:62: Warning: (1366, "Incorrect string value: '\\xF0\\x9F\\x92\\x95\\xF0\\x9F...' for column 'tweet_text' at row 1")

MySQLからのエラー.
文字がおかしいだの言ってきた.

検索するとすぐに解決方法がでてきた.

blog.k11i.biz: UTF-8 エンコードされた絵文字を MySQL / JDBC で取り扱うには?

絵文字を含む文字を入れたい場合は文字コードにutf8mb4を設定すればいいらしい.

しかし,使っているのはMySQL5.1.
utf8mbを使うにはアップデートが必要らしい.

というわけでアップデート.
CentOS6にMySQL5.7をyumでインストール - Qiita

記事に従って進めていったがインストール後の起動でエラーになった.

$ sudo service mysqld start
MySQL Daemon failed to start.
mysqld を起動中:                                           [失敗]

この時点で軽く後悔していたのだがやってしまったものは仕方ないので解決法を探す.
ログを見てみるとなんかファイルサイズがおかしいとのこと.

2017-04-23T05:59:25.523092Z 0 [ERROR] InnoDB: The Auto-extending innodb_system data file './ibdata1' is of a different size an specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
2017-04-23T05:59:25.523147Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2017-04-23T05:59:26.124374Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2017-04-23T05:59:26.124645Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-04-23T05:59:26.124681Z 0 [ERROR] Failed to initialize plugins.
2017-04-23T05:59:26.124776Z 0 [ERROR] Aborting

調べてみるとログファイルに記載されているファイルのサイズがおかしいから削除すべきとのこと.
何のファイルかは分からないけどデータベースに大したデータも入ってなかったので削除してみる.

もう一回実行してみるとまたエラー
削除してはいけないファイルだったかと思ったけど新しいファイルが作成されていたのでそうでもなさそうだった.

2017-04-23T06:03:02.062276Z 0 [ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.

これは調べなくても分かる.
mysql_upgradeを実行しろということだろう.

$ sudo mysql_upgrade
mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) while connecting to the MySQL server
Upgrade process encountered error and will not continue.

MySQLサーバーが起動してないと怒られた.
起動時のエラーを直すためにやってるのに起動してからやれとかどうしろと.

調べるとセーフモードで起動すれば良いらしい.
なるほどね.
MySQL5.1→5.7へアップグレード - Qiita

$/usr/bin/mysqld_safe --skip-grant-tables &

これでセーフモードで起動した後,先ほどのコマンドを実行するといかにも治してるっぽい画面が出てきた.
診断のあと更新をしてるらしい.
そこそこ時間がかかる.

Upgrade process completed successfully.
Checking if update is needed.

最後にこれが表示されて終了.
なんとか正常に終わったらしい.

その後通常モードで起動したら成功.

長かった.

とりあえずこれで大丈夫かな.