tencent cloud

Data Transfer Service

MariaDB/Percona/TDSQL-C MySQL から MySQL への移行

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-16 16:36:57
AI翻訳
本文では、DTSデータ移行機能を使用して、MariaDBまたはPerconaからTencentDB for MySQLへデータを移行する操作手順について説明します。
サポートされるソースデータベースの配置タイプは以下の通りです:
自社構築MariaDB、TencentDB for MariaDB。
自社構築Percona。
説明:
TencentDB for MariaDBは、MariaDB、Percona、MySQLの3種類のカーネルをサポートしています。ユーザーは使用時にカーネルの種類を区別する必要はありません。ソースデータベースがTencentDB for MariaDBの場合、ソースデータベースのカーネルがMariaDB、Percona、MySQLのいずれであっても、ソースデータベースまたはターゲットデータベースのタイプを設定する際には、MariaDBを選択します。

注意事項

DTSはフルデータ移行を実行する際に、ソースインスタンスのリソースをある程度占有し、ソースインスタンスの負荷上昇を引き起こし、データベース自体の負担を増加させる可能性があります。データベースの設定が低すぎる場合は、ビジネスのオフピーク期に移行することをお勧めします。
デフォルトではロックフリー移行を採用して実現します。移行中はソースデータベースにグローバルロック(FTWRL)をかけず、主キーがないテーブルにのみテーブルロックをかけ、その他にはロックをかけません。
データ一貫性の検証を作成する際、DTSは移行タスクを実行するアカウントを使用してソースデータベースにシステムデータベース__tencentdb__を書き込み、移行タスクプロセス中のデータ比較情報を記録します。
後続のデータ比較問題を特定できるようにするため、移行タスク終了後もソースデータベース内の__tencentdb__は削除されません。
__tencentdb__システムデータベースが占有する容量は非常に小さく、ソースデータベースのストレージ容量の約1000分の1から1万分の1です(例えば、ソースデータベースが50GBの場合、__tencentdb__システムデータベースは約5MB~50MBです)。また、シングルスレッドと接続待機メカニズムを採用しているため、ソースデータベースのパフォーマンスにはほとんど影響を与えず、リソースを奪い合うこともありません。

前提条件

ソースデータベースとターゲットデータベースが移行機能とバージョン要件を満たしていることを確認してください。確認にはデータ移行がサポートするデータベースを参照してください。
事前準備が完了しました。
ソースデータベースに必要な権限は以下の通りです:
「インスタンス全体」の移行:
CREATE USER '移行アカウント'@'%' IDENTIFIED BY '移行パスワード';
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS ON *.* TO '移行アカウント'@'%';
//ソース側がTencent Cloud MariaDBデータベースの場合、RELOAD権限の付与についてチケットを提出する必要があります。その他のシナリオでは、ユーザーはコードを参照して権限を付与してください。
//トリガーとイベントの移行を選択する場合、TRIGGER権限とEVENT権限を同時に付与する必要があります。
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '移行アカウント'@'%';
GRANT SELECT ON *.* TO '移行アカウント';
「指定オブジェクト」の移行:
CREATE USER '移行アカウント'@'%' IDENTIFIED BY '移行パスワード';
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS ON *.* TO '移行アカウント'@'%';
//ソース側がTencent Cloud MariaDBデータベースの場合、RELOAD権限の付与についてチケットを提出する必要があります。その他のシナリオでは、ユーザーはコードを参照して権限を付与してください。
//トリガーとイベントの移行を選択する場合、TRIGGER権限とEVENT権限を同時に付与する必要があります。
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '移行アカウント'@'%';
GRANT SELECT ON `mysql`.* TO '移行アカウント'@'%';
GRANT SELECT ON 移行対象のデータベース.* TO '移行アカウント';
ソースデータベースがMariaDB 10.5、10.6バージョンの場合、show slave statusを実行するにはSLAVE MONITOR権限も必要です。
ターゲットデータベースの権限が必要です:ALTER、ALTER ROUTINE、CREATE、CREATE ROUTINE、CREATE TEMPORARY TABLES、CREATE USER、CREATE VIEW、DELETE、DROP、EVENT、EXECUTE、INDEX、INSERT、LOCK TABLES、PROCESS、REFERENCES、RELOAD、SELECT、SHOW DATABASES、SHOW VIEW、TRIGGER、UPDATE(ターゲットデータベースがTencentDB for MariaDBの場合、チケットを提出してRELOAD権限を付与する必要があります)。

異種移行の互換性に関する説明

MariaDBをMySQLに移行する場合、異なるデータベースタイプ間では機能に若干の違いがあるため、以下の互換性の問題が存在します。
1. MariaDB自体の機能特性により、一部のSQL実行文はSHOW CREATE TABLEと一致しないため、ターゲット側に同期されるDDL文に差異が生じる可能性があります。
MariaDBのblob型ではデフォルト値を指定しませんが、テーブル作成後にSHOW CREATE TABLEを実行すると、デフォルト値DEFAULT NULLが表示されます。
datetime型DDL文は、ソースデータではdatetime NOT NULL ON UPDATE CURRENT_TIMESTAMPですが、テーブル作成後にSHOW CREATE TABLEを実行するとdatetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp()と表示され、ターゲット側のMySQLで解析されたDDLはdatetime NOT NULL ON UPDATE CURRENT_TIMESTAMPです。
2. 一部のMariaDBのみがサポートする構文(例えばCREATE OR REPLACE TABLE/PERIOD FOR/WITHOUT OVERLAPSなど)は、全量段階でマイグレーションタスクのエラーを引き起こす可能性がありますが、増分段階ではこれらの文を無視します。
PERIOD FOR/WITHOUT OVERLAPS文について、マイグレーションタスクの開始前、またはタスク進行中の全量段階(ソースデータベースのエクスポートおよびデータインポートステップ)でこの文を実行した場合、マイグレーションタスクは失敗します。同期増分段階でこの文を実行した場合、ターゲット側はこれを無視し、データをターゲット側に同期できません。
CREATE OR REPLACE TABLE文について、全量移行段階ではデータベースまたはテーブル構造を変更するDDL操作を実行できないため、全量段階でこの文を実行すると、マイグレーションタスクは失敗します。同期増分段階でこの文を実行した場合、ターゲット側はこれを無視し、データをターゲット側に同期できません。
3. MariaDBではblob/textなどにデフォルト値を設定できますが、MySQLでは設定できません。このようなタイプのSQLがあると、マイグレーションタスクでエラーが発生します。

アプリケーション制限

基本テーブル、ビュー、関数、トリガー、ストアドプロシージャ、イベントの移行をサポートしています。システムデータベース・テーブルの移行はサポートしていません。対象はinformation_schema、sys、performance_schema、__cdb_recycle_bin__、__recycle_bin__、__tencentdb__、mysqlです。
ビュー、ストアドプロシージャ、関数を移行する際、DTSはソースデータベース内のDEFINERに対応するuser1([DEFINER = user1])と移行アカウントuser2が一致するかどうかをチェックします。一致しない場合、移行後にDTSはターゲットデータベース内のuser1のSQL SECURITY属性を変更し、DEFINERからINVOKERに変換します([INVOKER = user1])。同時に、ターゲットデータベース内のDEFINERを移行アカウントuser2に設定します([DEFINER = 移行アカウントuser2])。ソースデータベース内のビュー定義が複雑すぎる場合、タスクが失敗する可能性があります。
ソース側が非GTIDインスタンスの場合、DTSはソース側のHA切り替えをサポートしません。ソース側のMySQLで切り替えが発生すると、DTSの増分同期が中断される可能性があります。
InnoDB、MyISAM、TokuDBの3種類のデータベースエンジンのみ移行をサポートします。これら以外のデータエンジンテーブルが存在する場合、デフォルトでスキップされ移行されません。なお、ソースデータベースに圧縮モードのTokuDBエンジンデータが存在する場合、ターゲットデータベースが圧縮モードを同期サポートしている必要があります。そうでない場合、タスクはエラーを報告します。
相互に関連するデータオブジェクトは同時に移行する必要があります。そうしないと移行が失敗します。一般的な関連関係:ビューによるテーブル参照、ビューによるビュー参照、主キー・外部キー関連テーブルなどがあります。
増分移行中に、ソースデータベースに分散トランザクションが存在する場合、またはSTATEMENT形式のBinlogステートメントが生成された場合、移行が失敗します。
ソースデータベースがTencent Cloud MariaDBの場合、アプリケーション制限は以下の通りです。
DTSマイグレーションタスクでは、ソースデータベースとターゲットデータベースのlower_case_tame_nameパラメータ(テーブル名の大文字と小文字の区別)を一致させる必要があります。ソースデータベースがTencentDB for MariaDBの場合、TencentDB for MariaDBではインスタンス作成時にのみlower_case_tame_nameパラメータを変更できるため、ユーザーはソースデータベースインスタンスの作成時に大文字と小文字の区別ルールを決定し、パラメータ検証で不一致が発生した場合に、ターゲットデータベースのlower_case_tame_nameパラメータを変更する必要があります。
ソースデータベースがTencentDB for MariaDB 10.4バージョンの場合、マイグレーションタスク設定では、アクセスタイプでクラウドデータベースを選択することはサポートされていません。パブリックネットワークまたはその他の方法を選択する必要があります。
ソースデータベースのBinlogのGTIDに欠落が存在する場合、移行タスクのパフォーマンスに影響を与え、タスクの失敗を引き起こす可能性があります。
1つのトランザクションにDML文とDDL文が同時に含まれるシナリオはサポートされていません。この状況が発生した場合、タスクはエラーを報告します。
Geometry関連のデータ型はサポートされていません。このタイプのデータが検出された場合、タスクはエラーを報告します。
ALTER VIEWステートメントはサポートされていません。このステートメントが検出された場合、タスクはスキップされ、移行されません。

操作制限

移行中に以下の操作を行わないでください。行った場合、移行タスクが失敗する可能性があります。
ソースデータベースとターゲットデータベース内のユーザー情報(ユーザー名、パスワード、権限を含む)とポート番号を変更、削除しないでください。
ソースデータベース上で分散トランザクションを実行しないでください。
ソースデータベースにBinlog形式がSTATEMENTのデータを書き込まないでください。
ソースデータベース上でBinlogを削除する操作を実行しないでください。
テーブル構造移行およびフル移行の段階では、データベースまたはテーブル構造を変更するDDL操作を実行しないでください。
増分移行段階では、システムデータベース・テーブル__tencentdb__を削除しないでください。
MariaDB特有の構文、例えばCREATE OR REPLACE TABLE/PERIOD FOR/WITHOUT OVERLAPSなどは、全量段階でマイグレーションタスクのエラーを引き起こす可能性があります。増分段階ではこれらの文を無視します。
全量データ移行のみを実行する場合、移行プロセス中にソースインスタンスに新しいデータを書き込まないでください。そうしないと、ソースとターゲットのデータが不一致になります。データ書き込みがあるシナリオでは、データの一貫性をリアルタイムに維持するために、全量+増分データ移行を選択することをお勧めします。

サポートされるSQL操作

操作タイプ
サポートされる SQL 操作
DML
INSERT、UPDATE、DELETE、REPLACE
DDL
TABLE:CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、RENAME TABLE
VIEW:CREATE VIEW、DROP VIEW
INDEX:CREATE INDEX、DROP INDEX
DATABASE:CREATE DATABASE、ALTER DATABASE、DROP DATABASE
現時点では、CREATE TABLE テーブル名 AS SELECT ステートメントはサポートされていません。

環境要件

説明:
以下の環境要件について、システムは移行タスクを開始する前に自動的に検証を行います。要件を満たさない場合、システムはエラーを報告します。ユーザーが認識できる場合は、検証項目チェック要件を参照して自身で変更できます。認識できない場合は、システムの検証が完了するのを待ち、エラーメッセージに従って変更してください。
タイプ
環境要件
ソースデータベース要件
ソースデータベースとターゲットデータベースのネットワークが接続できる必要があります。
ソースデータベースが配置されているサーバーには十分な出力帯域幅が必要です。そうでない場合、移行速度に影響します。
インスタンスパラメータの要件:
ソースデータベースのserver_idパラメータは手動で設定する必要があります。また、値を0に設定することはできません。
ソースデータベースのテーブルのrow_formatをFIXEDに設定することはできません。
ソースデータベースとターゲットデータベースのlower_case_table_names変数は、一致するように設定する必要があります。
ソースデータベース変数connect_timeoutの設定値は10より大きい必要があります。
skip-name-resolveを有効にして、接続タイムアウトの可能性を減らすことをお勧めします。
Binlogパラメータの要件:
ソースデータベースのlog_bin変数はONに設定する必要があります。
ソースデータベースのbinlog_format変数はROWに設定する必要があります。
ソースデータベースのbinlog_row_image変数はFULLに設定する必要があります。
MariaDB 10.2以降、Percona 5.6以降では、gtid_mode変数がONでない場合に警告が表示されます。gtid_modeを有効にすることをお勧めします。
do_db、ignore_dbフィルター条件を設定することはできません。
ソースインスタンスがレプリカの場合、log_slave_updates変数をONに設定する必要があります。
ソースデータベースのBinlogログは少なくとも3日以上保持することをお勧めします。そうしないと、タスクの一時停止/中断時間がBinlogログの保持時間を超えた場合、タスクの再開ができなくなり、タスクが失敗する可能性があります。
外部キー依存関係:
外部キー依存関係はNO ACTION、RESTRICTの2種類にのみ設定できます。
一部のデータベース・テーブルを移行する場合、外部キー依存関係のあるテーブルはすべて揃っている必要があります。
DTSはデータ型FLOATの移行精度が38桁、データ型DOUBLEの移行精度が308桁です。期待どおりかどうかを確認する必要があります。
環境変数innodb_stats_on_metadataはOFFに設定する必要があります。
ターゲットデータベース要件
ターゲットデータベースのバージョンは、ソースデータベースのバージョン以上である必要があります。
ターゲットデータベースの容量は、ソースデータベースの移行対象テーブルスペースの1.2倍以上である必要があります。(全量データ移行ではINSERT操作が並行実行されるため、ターゲットデータベースのテーブルにフラグメンテーションが発生します。そのため、全量移行完了後、ターゲットデータベースのテーブルストレージ容量はソースインスタンスのテーブルストレージ容量よりも大きくなる可能性が高くなります。)
ターゲットデータベースには、ソースデータベースと同じ名前のテーブル、ビューなどの移行オブジェクトが存在してはなりません。
ターゲットデータベースのmax_allowed_packetパラメータ設定値は少なくとも4Mである必要があります。

操作手順

MariaDBからMySQLへの移行、PerconaからMySQLへの移行は、MySQLからMySQLへの移行の操作手順と同じです。MySQLからMySQLへの移行を参照して設定してください。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック