WordPressのDBをTiDBに移行しました

無料枠で頑張っているWordPress ブログ pokosho。色々問題がでてきた。

  • Google Cloudのt2.microでMySQL on GCEだとリソースが足りなくてすぐ死ぬ(実はswapを作り忘れていただけだったけど…)
  • 環境移行がだるいので後回しになる。特にDB。これさえいなければansibleなどに移行しやすい(僕の知識がないだけかもだけど)

そんなでTiDBのserverlessの無料枠に移行してみた。
PostgreSQL互換のはたくさんあるけどMySQLのはこれしかしらない。ありがたすぎる…

若干のハマりポイントがあった。

ポートの指定とSSL

define(‘FS_METHOD’, ‘direct’);
define( ‘DB_NAME’, ‘wordpress’ );
define( ‘DB_USER’, ‘xxx.yuzan’ );
define( ‘DB_PASSWORD’, ‘sugoi-password’ );
// portの指定は :4000
define( ‘DB_HOST’, ‘gateway01.ap-northeast-1.prod.aws.tidbcloud.com:4000’ );
define( ‘DB_CHARSET’, ‘utf8mb4’ );
define( ‘DB_COLLATE’, ‘utf8mb4_general_ci’ );
// SSLで通信する必要がある
define(‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL);
define(‘MYSQL_SSL_CA’, ‘/etc/ssl/certs/ca-certificates.crt’);

ポートの指定とSSL

SQL_CALC_FOUND_ROWS のエラーがでる。以下のプラグインをインストールする必要がある。

https://github.com/pingcap/wordpress-tidb-plugin

WordPressのマーケットにはいないので、zipでダウンロードして、wp-contents/plugins に展開して有効化する。
これは多分、postの件数を取得するのに使っているのでしょう。このプラグインは代わりに count を使うのかな?
その結果、post idが一桁増えたみたい。

どうなった?

オレゴン、日本間のレイテンシを感じる。
ダッシュボードはまあ仕方ないんだけど、表示も遅くなった。
Cloudflareさんが気を利かしてなんかやってくれてるんだろうけど、ガッツリキャッシュしていいんですよ!

まとめ

小さいWordPressなのに多くの無料サービスのお世話になっています。

  • ドメインとCDNにCloudfront
  • サーバにGCE(us-west1,オレゴン)
  • DBにTiDB(日本)
  • 監視にMackerel
  • バックアップにGCS

これまでのすべてに感謝…!
いや、意地汚い、という気もしますが、こうやっていろんなサービスに触っておくといろんな学びがあって、業務でちゃんとお金を払って使ったり使わなかったりするわけですよ(言い訳)。