TiDB Dedicated Cluster のデータバックアップを TiDB Serverless にインポートする手順
この記事はTiDB Adventcalender 12月8日の記事です。
Dedicated Cluster のデータを手動でバックアップ取得して、MySQL用ツールを用いてTiDB Serverless にインポートします。
さっそくやってみる
Dedicated でテスト用テーブルとデータの作成
まず以下の様に同じリージョンでDedicated と Serverless Cluster が存在している状態にします。
コンソールの左ペインNetworking
をクリックし、次にIP Access List
をクリックします。
Publicアクセスを許可します。Public接続の場合、MySQLクライアント無しでWeb SQL Shell
を使えるためこの記事では本題にかかわらない手順を簡略化させるためこちらを用います。
Private接続を用いて接続したい場合、以下の手順を参考にしてください。
[Web SQL Shell]
接続できたら以下のSQLを実行して以降用データを作成しておきます。
use test;
CREATE TABLE users (
user_id INT PRIMARY KEY, -- ユーザーID(整数型、主キー)
name VARCHAR(100), -- ユーザーの名前(最大100文字の文字列)
email VARCHAR(100), -- ユーザーのメールアドレス(最大100文字の文字列)
age INT -- ユーザーの年齢(整数型)
);
INSERT INTO users (user_id, name, email, age)
VALUES
(1, 'Alice', 'alice@example.com', 30),
(2, 'Bob', 'bob@example.com', 25);
select * from users;
user_id | name | email | age
---------+-------+-------------------+-----
1 | Alice | alice@example.com | 30
2 | Bob | bob@example.com | 25
(2 rows)
データバックアップ (標準機能)(参考)
次にDedicated Cluster のデータバックアップを作成します。
コンソールのBackup
をクリックします。
デフォルトでDedicated Clusterは自動バックアップが有効になっています。
Manual Backup
を選択します。
Backup取得が開始されます。
ここで取得されたBackupは残念ながらServereless Clusterには復元できないので別の手法を使う必要があります。
データバックアップ (MySQL Dump)
Serverless Cluster へ移行させるためにはバックアップファイルを手元に取得する必要があるため、MySQL Dumpを用います。TiDBのドキュメントではMyDumper/MyLoaderを用いていますが、AWS では歴史的背景からMySQLではなくMariaDBのパッケージをデフォルトとして用いているため、公式にはMyDumperのインストール手順が準備されていません。このためMySQL Dumpを用います。
sudo dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo yum update
sudo dnf -y install mysql mysql-community-client
mysqldump --version
mysqldump -h tidb.grjchb1j5th9.clusters.tidb-cloud.com -P 4000 -u root -p<password> test > dedicated.sql
あるあるな注意点ですが、-p
の後は小文字スペースなしです。
dedicated.sql
に以下のような情報が含まれていれば完了です。プロンプト上は何も結果が表示されませんので、dedicated.sql
の中身を読み取って確認して下さい。
/*!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.25-MariaDB, for Linux (x86_64)
--
-- Host: tidb.grjchb1j5th9.clusters.tidb-cloud.com Database: test
-- ------------------------------------------------------
-- Server version 8.0.11-TiDB-v8.1.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `users`
(以下省略)
データインポート
では次にこれをServerless Clusterにインポートします。
dumpファイルの以下の行は環境差異で認識されずエラーとなるため削除します。
/*!999999\- enable the sandbox mode */
次に以下を実行してインポートします。
mysql -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 --ssl-ca=cacert.pem -u 2dsyVGvhxXwApqH.root -p<password> test < dedicated.sql
実行環境にcacert.pem
が存在していない場合こちらの記事に準備手順があります。
マネージメントコンソールのServerless用 SQL Editorからデータが無事インポートされたことが確認されるはずです。
Discussion