バックグラウンド
以前、SQLServer
オンライン データベースを変換から に移行する必要が生じましたMySQL
。データ テーブルは 70 以上あり、データの総量はそれほど大きくありません。インターネット上には推奨される使用方法がたくさんあり、移行用の公式のものもSQLyog
あるのですが、手順が少し面倒で、その後、記事の片隅で Misoft Technology から提供されているこのツールを見つけました。公式紹介:さまざまな主流データベース間のデータ変換に使用されます。最初のバージョンは 2015 年に開発されました。長年にわたる製品の反復を経て、400 以上の顧客の検証に合格しました。成熟した便利な製品です。ソフトウェア機能としては、現行バージョンでは、 、、 、、 、、、 、 、 、など 6 つのデータベースの相互移行と変換をサポートしており、十分です。具体的な移行プロセスについては、 「異種データベース変換ツールのエクスペリエンス: SQLServer データの変換と MySQL への移行」を参照してください。ただし、このアーキテクチャのツールは、ダウンロード後にデフォルトで非承認バージョン (試用版) になり、レコード数の制限が 50,000 件に制限されることに注意してください。Oracle MySQL Server
Workbench
DB2DB
DB2DB
1.30.107
SQLServer
MySQL
SQLite
Access
SQLServer CE
PostgreSQL
DB2DB
CS
まず、この移行プロセスの主役であるETLCloudを紹介します。ETLCloud は、エンタープライズ データ フュージョン アーキテクチャを再構築し、さまざまな複雑かつ即時かつ準拠性の高いデータ統合ニーズを解決し、タスク開発、タスク スケジューリング、血縁関係分析、データ品質管理、データ サービス開発、タスク監視をワンストップでカバーします。現在、上記と同じ移行作業は、マイクロサービス アーキテクチャに基づくデータ統合ツールのバージョンである ETLCloud Community Edition を通じてBS
完了できます。
移行の実践
次に、移行の実践に入ります: プロセス全体はゼロコードで視覚化され、ドラッグ アンド ドロップで行われ、異種データ テーブルのバッチ移行はマウスの 1 クリックで完了できます。最も重要なことは、コミュニティ バージョンが無料であることです。
注: ここではコミュニティ バージョンが選択されており、Docker
展開方法は軽量ですぐに開始できますdocker pull ccr.ccs.tencentyun.com/restcloud/restcloud-etl:V2.2
。
データソース構成
SQLServer
と はMySQL
両方ともETLCloud
コミュニティ エディションでサポートされている組み込みデータ ソースであるため、新しいデータ ソースを直接作成するだけです。
- ソースの構成: SQL Server
新しいデータ ソースを作成して選択しSQLServer
、IP: ポートとユーザー パスワード情報を入力します。
テスト接続は成功しました~
- シンクの構成: MySQL
新しいデータ ソースを作成して選択しMySQL
、IP: ポートとユーザー パスワード情報を入力します。
テスト接続は成功しました~
アプリケーションとプロセスを作成する
アプリケーションを作成し、基本的なアプリケーション構成情報を入力します。次に、データ フローを作成し、情報を入力します。
プロセスを作成した後、「プロセス設計」ボタンをクリックしてプロセス視覚化構成ページに入ることができます。
視覚的な構成プロセス
プロセスを構成する前に、この構成ページのさまざまな領域を簡単に紹介します: 左側はコンポーネント領域、中央上部は機能領域、中央の大部分はプロセス描画領域です。描画領域でコンポーネントをダブルクリックすると、ドロワー スタイルでポップアップ表示されるコンポーネントの詳細な構成項目領域が表示されます。
- データベーステーブル一括入力:SQLServer
左側のライブラリ テーブル同期コンポーネントで、「バッチ入力ライブラリ テーブル」を選択し、中央のプロセス描画領域にドラッグし、ダブルクリックして構成ステージに入ります。
ステップ 1:構成したSQLServer
データ ソースを選択します。ここでは、ページごとの読み取り方法を選択し、ユーザーは空でもかまいません。
ステップ 2: に既存のテーブルとビューをロードできますSQLServer
。合計 74 のテーブルと 4 つのビューがあります。
必要に応じて、移行するデータテーブルを選択し、ここですべてのテーブルとビューを選択して保存します。
- データベーステーブルのバッチ出力: MySQL
左側のライブラリ テーブル同期コンポーネントで、[ライブラリ テーブルのバッチ出力] を選択し、中央のプロセス描画領域にドラッグし、ダブルクリックして構成ステージに入ります。
ステップ 1: 構成した MySQL データ ソースを選択します。
ステップ 2: 構成可能な出力オプション: テーブル データをクリアするかどうか、テーブルを自動的に構築するかどうか、データを更新する方法など。
- プロセスを改善する
最後に、start、データベース テーブル バッチ入力、ライブラリ テーブル バッチ出力、およびend流程线
コンポーネントをそれぞれ接続することで、バッチ データベース テーブル データ移行の視覚的な構成が完了します。
プロセスの実行
プロセスを保存して実行すると、対応するプロセス ログを表示して、移行の進行状況を視覚的に監視できます。
問題記録
もちろん、移行プロセス全体は 1 回限りのプロセスではなく、データ ソース構成と移行リンクでいくつかの問題が発生しました。これは次のように記録されています。
SQLServer
JDK
データ ソースは、クライアントのバージョンの問題による接続エラーを報告しました
問題の説明: 接続に失敗しました (ドライバーは、Secure Sockets Layer (SSL) 暗号化を使用して SQL Server への安全な接続を確立できませんでした。エラー: 「サーバーが選択したプロトコル バージョン TLS10 は、クライアント設定 [TLS12] によって受け入れられません。」ClientConnectionId: aacc4edf-d ca7-4296-bd33-a4462fcf0033) 問題分析: クライアントで使用されているプロトコル バージョンは ですが、サーバーのプロトコル バージョンは です。つまり、データベースのバージョンが低すぎるため、クライアントのバージョンを下げる
必要TLS12
がTLS10
あります。まずコンテナに入り、ファイルに移動します。jdk/jre/lib/security/java.security
jdk.tls.disabledAlgorithms
java.security
# 进入容器
[root@etl ~]# docker exec -it de63b29c71d0 /bin/bash
# 查看ETLCloud容器中自带的jdk版本信息
root@de63b29c71d0:/usr# java -version
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)
# 定位到java.security文件
root@de63b29c71d0:/usr# which java
/usr/jdk/bin/java
root@de63b29c71d0:/usr# ls
bin games include jdk lib local sbin share src start.sh tomcat velocity.log
root@de63b29c71d0:/usr# cd jdk/jre/lib/security/
root@de63b29c71d0:/usr/jdk/jre/lib/security# ls
blacklist blacklisted.certs cacerts java.policy java.security javaws.policy policy public_suffix_list.dat trusted.libraries
root@de63b29c71d0:/usr/jdk/jre/lib/security# vi java.security
bash: vi: command not found
ただし、コンテナーはvi
コマンドを提供しないため、コンテナー内のファイルは最初に/usr/jdk/jre/lib/security/java.security
ホストにコピーされ、変更後にコンテナーにコピーされて戻されます。
# 从容器中复制文件到宿主机
[root@etl opt]# docker cp de63b29c71d0://usr/jdk/jre/lib/security/java.security /opt/
Successfully copied 58.9kB to /opt/
# 修改配置文件
[root@etl opt]# vi java.security
删除jdk.tls.disabledAlgorithms中的TLS1.*算法配置
# 从宿主机复制文件到容器中
[root@etl opt]# docker cp /opt/java.security de63b29c71d0://usr/jdk/jre/lib/security/
Successfully copied 58.9kB to de63b29c71d0://usr/jdk/jre/lib/security/
MySQL
データベース テーブルの権限の問題により、データ ソースが接続エラーを報告する
問題の説明: Access denied for user 'root'@'%' to database qwert
。
解決策: ターゲット データベースへのリモート アクセスを有効にし、テーブルの作成などの権限を構成します。
grant create,alter,drop,index,select,insert,update,delete on qwert.* to root@'%' identified by 'root';
flush PRIVILEGES;
ELTCloud
SQLServer
テーブルを読み取るときに、DateTime
型のフィールドがTimeStamp
型として認識されるため、テーブルMySQL
に日付データを書き込むときにエラーが発生します。
問題の説明: Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1753-01-01 12:00:00' for column 'ErrorTime' at row 1
。
解決策: 移行プロセスを変更します。ライブラリ テーブル バッチ入力コンポーネントの構成で、最初に同期するテーブル構造のみを構成し、実行プロセスがテーブル構造の同期を完了した後、手動でタイプを端末上のタイプに変更MySQL
しTimeStamp
ますDateTime
。
要約する
上記は、異種データ テーブルのバッチ移行を実現するデータベース テーブル同期コンポーネントに基づいており、シンプル、直接的かつ効果的な、データベース テーブルからデータベースETLCloud
テーブルへのデータ移行の実践を完了します。さらに、移行プロセス中のいくつかの構成関連の問題と解決策も記録します。以前に使用されていたタイプの移行ツールと比較して、インターフェイスはよりフレンドリーで使いやすく、コミュニティ バージョンの機能は十分に強力です。SQLServer
MySQL
CS
ETLCloud
参照
ご質問やバグが見つかった場合は、お気軽にご連絡ください。
ご意見やご提案は大歓迎です。