久々のサーバいじり(Mariadbへの移行)

2022年8月3日

 さて、CentOS8の突然の余命1年宣言への対応としてCentOS8-Streamへの移行を行った訳だが、そうなるとほかのところにもそういったリスクのあるものを使っていないかと振り返ってみたところ、凄いのがいた。

 その名もMySQL。centos8から標準リポジトリに返り咲いた為、何も考えずに使用していたが、mysqlを取り巻く環境は厳しい。
 そもそもOracleによる買収というのがとびきりのリスクで、フリー使用できるRDBとしての前途はほぼ闇に閉ざされているといってもいい感じすらある(Oracleがどのような思いであれ、営利企業の経営判断次第で無償では無くなる可能性は排除できないし、そもそも製品として開発が継続され続ける保証すらない)
 というわけで、この際こちらも対応。mariadbに移行しましょうと。

 事前に分かっていることとして、
 ・Mysql8のデータベースの全体ダンプをmariadbにそのままリストアすることはできない。
 ・Mysql8とMariadbのcollationの違いをどうにかしないといけない。

 というわけで、まずは各データベースを個別にダンプ。それと併せてデータベースに作成してるユーザとパスワード、ユーザに割り当てた権限等必要な情報を確保しておく。
その後既存のMysqlをいったんアンインストールしてmariadb-serverをインストール。なお、今回は最新のパッケージを使うために、
https://downloads.mariadb.org/mariadb/repositories/#mirror=osuosl
上記のサイトで対応するOSのレポジトリ設定を作成して/etc/yum.repos.d/mariadb.repoとして設置しています。

パッケージをインストールしたらmysql_secure_installationを実行。なお、この際にrootパスワード云々いわれて失敗する場合はsudo mysql -u root でrootで強制ログインできるんでrootのパスワードを設定してやり直す。
 その後、/etc/my.cnf.d/servercnf に以下の設定を投入。

[mariadb]
character-set-server = utf8mb4
[client-mariadb]
default-character-set = utf8mb4

 これをしないとmariadbのデフォルト文字コードはlatin-1なので困る場合がある。
 ここまでで、mariadbが普通に動く、動くのだ。動かないならあなたの祈祷力が足りてないかコンフィグのスペルミスだ。
 無事にDBがうごいているなら、ログインしてリストアするデータベースを前もって作成しておく。

 次にリストアするデータベースの修正。
 各データベースを表示し、文字コードとcollateを確認する。
 文字コードがutf8mb4であり、collateがutf8mb4_binやascii_general_ciであるならそのまま、utf8mb4_0900_ai_ciなど、他のコードの場合はそのデータベース内のcollateをascii_general_ciで置換する。
 準備ができたら、
mysql -u root -p database_name < dumped_database
 でデータベースをレストアしていく。
 レストアが完了したら再度sqlサーバにログオンしてユーザを作成し,権限の割り当てを行う。

 Mariadbへの移行作業としてはこれで完了となり、あとは正常に接続して各アプリケーションが動作するのを祈るだけである。

 実際、移行はもんだいなくおわったのだが、不思議なことが起きる。
 本環境ではprometheusのmysqld_exporterでsqlサーバの監視を行っているのだが、データベース移行後messagesに以下のようなエラーが発生するようになった。

Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation"

 とりあえずこれはこれは監視用アカウントの権限にSUPERを追加することで対応。

 とりあえずこれでDBの移行は完了。

Linux