wordpressのデータをTiDBへレプリケーション
はじめに
この方法はレプリケーションなので、リアルタイムに変更が反映されるが、TiDB Cloudの無料枠(Serverlessクラスタ)では使えない。TiDB Cloud Dedicated(有償)か自前で運用しているTiDBクラスタであれば使える。Serverlessクラスタにバックアップする場合はレプリケーションではなく、後述するバックアップ方法を用いる。
collation問題を回避するための対策
tidbはwordpressがデフォルトで用いるcollationに対応していない問題があり、tidbへのレプリケーションがエラーになるので、このプラグインで事前にcollationを変更しておく。
ツールのインストール
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source ~/.bash_profile
tiup install dm
設定ファイル作成
- dm-master.toml
name = "dm-master"
master-addr = "127.0.0.1:8261"
advertise-addr = "127.0.0.1:8261"
- dm-worker.toml
name = "dm-worker"
worker-addr = "127.0.0.1:8262"
advertise-addr = "127.0.0.1:8262"
join = "127.0.0.1:8261"
- source.yaml
source-id: "wordpress-master"
enable-gtid: false
from:
host: "127.0.0.1" # MySQLサーバーのIPアドレス
port: 3306 # MySQLサーバーのポート番号
user: "root" # MySQLサーバーのユーザー名
password: "xxxx" # MySQLサーバーのパスワード
security:
ssl-ca: ""
ssl-cert: ""
ssl-key: ""
- task.yaml
name: "wordpress-replication-task"
task-mode: "all" # タスクモード: "all" は全データと増分データを含む
target-database: # TiDBの接続情報
host: "gateway01.ap-northeast-1.prod.aws.tidbcloud.com"
port: 4000
user: "3f4S7KB6wVkvx1d.root"
password: "PsZr5oMQPF8lJnfV"
security:
ssl-ca: "cert.pem"
mysql-instances: # MySQLのインスタンス情報
- source-id: "wordpress-master"
black-white-list: "bw-list"
mydumper-config-name: "global"
black-white-list: # レプリケーションするテーブルの指定
bw-list:
do-dbs:
- "wordpress"
mydumpers: # MyDumperの設定
global:
threads: 4 # ダンプに使用するスレッド数
chunk-filesize: 64 # チャンクファイルのサイズ(MiB)
skip-tz-utc: true # タイムゾーン変換をスキップ
ソースとなるMySQLの情報を登録
tiup dmctl --master-addr 127.0.0.1:8261 operate-source create ./source.yaml
移行開始
tiup dm-master --config=dm-master.toml
tiup dm-worker --config=dm-worker.toml
tiup dmctl --master-addr 127.0.0.1:8261 start-task task.yaml
状況確認
tiup dmctl --master-addr 127.0.0.1:8261 query-status wordpress-replication-task
移行を停止(削除)する
tiup dmctl --master-addr 127.0.0.1:8261 stop-task task.yaml
※tidbクラスタ側に生成されたdm_metaのような「チェックポイント」やダウンストリームに移行されたデータは削除されない。
TiDB関連リンク集
tidbへのwordpressのデータバックアップ手順書
この方法であればtidbのserverlessクラスタでも使用可能。
元ネタはここ
tiupを使っているが、普通にmysqlでダンプしてリストアする方が楽かもしれない。
- DB構築用のDDLを取得してtidbに反映(エラー回避のためcollocationを置換している)
tiup dumpling --host 127.0.0.1 --port 53306 --user root --password xxxxx --database wordpress --consistency none --no-data --output ./ddl
sed -i 's/utf8mb4_unicode_520_ci/utf8mb4_general_ci/g' ddl/*.sql
tiup tidb-lightning -config tidb-lightning-schema.toml
- データをCSV形式でダンプしてtidbにインポート
tiup dumpling --host 127.0.0.1 --port 53306 --user root --password xxxxx --database wordpress --filetype csv --no-schemas --output ./data
tiup tidb-lightning -config tidb-lightning-data.toml
- tidb-lightning-schema.toml
[tidb]
host = "tidbのホスト"
port = 4000
user = "ユーザー名"
password = "パスワード"
tls = "cluster"
[tikv-importer]
backend = "tidb"
[mydumper]
data-source-dir = "./ddl"
[security]
ca-path = "./cert.pem"
- tidb-lightning-data.toml
[tidb]
host = "tidbのホスト"
port = 4000
user = "ユーザー名"
password = "パスワード"
tls = "cluster"
[tikv-importer]
backend = "tidb"
[checkpoint]
enable = false
[conflict]
strategy = "replace"
[mydumper]
data-source-dir = "./data"
[mydumper.csv]
separator = ','
delimiter = '"'
header = true
not-null = false
null = '\N'
backslash-escape = true
trim-last-separator = false
[[mydumper.files]]
pattern = '^([a-z0-9_]+)\.([a-z0-9_]+)\.[0-9]+\.csv$'
schema = '$1'
table = '$2'
type = 'csv'
[security]
ca-path = "./cert.pem"
CA証明書はTiDBのコンソール画面からダウンロードできる。
- 参考文献
Comments