FreeBSD/amd64 13.2 : MySQL 5.7 → 8.0 に上げる

先週まで、WordPress と MySQL5.7 を同一 FreeBSD13.2 の上で運用していましたが、MySQL は RPI2 上に引っ越し、FreeBSD/amd64 の MySQL5.7 は(リソースを空けるために)停止していました。

RPI2上のMySQL8.0 は今のところ問題なく動いているようなので、FreeBSD/amd64 13.2 の MySQL 5.7 を 8.0 に上げておこうと思います。毎日届くセキュリティレポートにもMySQL5.7 は今年いっぱいで終了 って届くのも、そろそろ見たくありませんのでね。

以下は、先週まで使用中だった MySQL 5.7 データベースファイルを 8.0形式に変更した手順。

  1. 何といっても、バックアップ。すでに FreeBSD/arm にデータは引き継がれていますが、まだ何があるかわかりませんからね。
    /var/db/mysql/* を cpio でアーカイブ。cpio -ovz > sql57.dump のような感じ。
    続いて、mysqldump コマンドでもバックアップ。コマンドは何度もメモしているので省略。
  2. MySQL 5.7 パッケージを消す。
    pkg delete mysql-\*
  3. MySQL 8.0 を入れる。
    pkg add mysql80-server
    最後に、/usr/local/etc/mysql の下に残った残骸を消す。または移動する。
  4. 最後の大仕事が、mysql80-server を起動すること。成功すれば自動的にデータベース形式が最新版に更新されますが、何か準備に見落としがあって失敗すると、データベースが壊れるかも。とにかく、失敗した状態から復旧するのは大変。素直にデータベースを消してバックアップから戻す方が楽。
    成功することを念じながら、
    service mysql-server start
    と実行。

以下の通り、今回は成功。

2023-11-08T05:57:23.578564Z 0 [Note] InnoDB: Shutdown completed; log sequence number 11858549970
2023-11-08T05:57:23.579028Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
2023-11-08T05:57:23.579063Z 0 [Note] Shutting down plugin 'MEMORY'
2023-11-08T05:57:23.579077Z 0 [Note] Shutting down plugin 'CSV'
2023-11-08T05:57:23.579089Z 0 [Note] Shutting down plugin 'sha256_password'
2023-11-08T05:57:23.579100Z 0 [Note] Shutting down plugin 'mysql_native_password'
2023-11-08T05:57:23.579294Z 0 [Note] Shutting down plugin 'binlog'
2023-11-08T05:57:23.656678Z 0 [Note] /usr/local/libexec/mysqld: Shutdown complete

2023-11-08T05:57:23.6NZ mysqld_safe mysqld from pid file /var/db/mysql/tokyo.lifewithunix.jp.pid ended
2023-11-08T13:59:42.6NZ mysqld_safe Logging to '/var/db/mysql/tokyo.lifewithunix.jp.err'.
2023-11-08T13:59:42.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
2023-11-08T13:59:42.979426Z 0 [System] [MY-010116] [Server] /usr/local/libexec/mysqld (mysqld 8.0.33) starting as process 98762
2023-11-08T13:59:43.191000Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory.
2023-11-08T13:59:43.191043Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-11-08T14:00:01.024233Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-11-08T14:00:07.954809Z 2 [Warning] [MY-010772] [Server] db.opt file not found for test database. Using default Character set.
2023-11-08T14:00:13.819348Z 2 [System] [MY-011003] [Server] Finished populating Data Dictionary tables with data.
2023-11-08T14:00:20.130964Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80033' started.
2023-11-08T14:00:37.997896Z 5 [Warning] [MY-013384] [Server] Could not open server upgrade info file '/var/db/mysql/mysql_upgrade_info' for writing. Please make sure the file is writable.
2023-11-08T14:00:37.997941Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80033' completed.
2023-11-08T14:00:39.192844Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2023-11-08T14:00:39.192908Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-11-08T14:00:39.908555Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2023-11-08T14:00:39.908820Z 0 [System] [MY-010931] [Server] /usr/local/libexec/mysqld: ready for connections. Version: '8.0.33'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
2023-11-08T14:05:44.979515Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user . Shutting down mysqld (Version: 8.0.33).
2023-11-08T14:05:46.113235Z 0 [System] [MY-010910] [Server] /usr/local/libexec/mysqld: Shutdown complete (mysqld 8.0.33)  Source distribution.
2023-11-08T14:05:47.6NZ mysqld_safe mysqld from pid file /var/db/mysql/tokyo.lifewithunix.jp.pid ended

結果だけ見れば、データベースを分離せずに、そのまま MySQL 5.7 を抜いて、8.0 を入れてしまえばよかったわけですが、テストマシンでの成功率は50%くらいでしたからね。本番環境でいきなり作業していたら、きっと失敗していたはず。MySQLサーバーを分離したのは、正しかったものと信じています。

もし、FreeBSD/arm 上の WordPress 用データベースに何かあった場合は、一時的に元のサーバーでも運用できるように、バージョンを最新に保つようにする予定。

それよりも、明日届く予定のセキュリティレポートがどう変化するか。

セキュリティレポート出力結果:

アップデート前:

Checking for packages with security vulnerabilities:
Database fetched: 2023-11-05T05:18+09:00
mysql57-server-5.7.42
mysql57-client-5.7.42: Tag: expiration_date Value: 2023-12-31
mysql57-server-5.7.42: Tag: expiration_date Value: 2023-12-31
mysql57-client-5.7.42: Tag: deprecated Value: Upstream support ended in October 2019
mysql57-server-5.7.42: Tag: deprecated Value: Upstream support ended in October 2019

アップデート後:

Checking for packages with security vulnerabilities:
Database fetched: 2023-11-08T04:00+09:00
mysql80-server-8.0.33

MySQLのアップグレードサポートが2019/10月にすでに終わっていて、多分2023/12でパッケージコレクションからも消えるっぽい。それが、mysql80-server には脆弱性がある に変わりました。結局、脆弱性はある訳だ。

この脆弱性に関して調べてみたら、8.0.35 に上げればいいわけですが、まだ、バイナリーもソースも FreeBSDサイトに届いていない。。。。。まあ、イントラネット側なのでいいかっって感じで、リリース待ち状態です。

コメントを残す