TiDBにWordPressのデータをバックアップしてみた

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のコンソール画面からダウンロードできる。

  • 参考文献
  1. tidb-lightningの設定
  2. CSVのインポート用の設定
  3. dumplingによるダンプ

Comments

Copied title and URL