ETLCloud のライブラリ テーブル同期コンポーネントを使用して、SQLServer から MySQL への異種データ テーブルのバッチ移行を実現します。

バックグラウンド

以前、SQLServerオンライン データベースを変換から に移行する必要が生じましたMySQL。データ テーブルは 70 以上あり、データの総量はそれほど大きくありません。インターネット上には推奨される使用方法がたくさんあり、移行用の公式のものもSQLyogあるのですが、手順が少し面倒で、その後、記事の片隅で Misoft Technology から提供されているこのツールを見つけました。公式紹介:さまざまな主流データベース間のデータ変換に使用されます。最初のバージョンは 2015 年に開発されました。長年にわたる製品の反復を経て、400 以上の顧客の検証に合格しました。成熟した便利な製品です。ソフトウェア機能としては、現行バージョンでは、 、、 、、 、、 、 、 、など 6 つのデータベースの相互移行と変換をサポートしており、十分です。具体的な移行プロセスについては、 「異種データベース変換ツールのエクスペリエンス: SQLServer データの変換と MySQL への移行」を参照してください。ただし、このアーキテクチャのツールは、ダウンロード後にデフォルトで非承認バージョン (試用版) になり、レコード数の制限が 50,000 件に制限されることに注意してくださいOracle MySQL ServerWorkbenchDB2DB
DB2DB1.30.107SQLServerMySQLSQLiteAccessSQLServer CEPostgreSQL
DB2DBCS

まず、この移行プロセスの主役であるETLCloudを紹介します。ETLCloud は、エンタープライズ データ フュージョン アーキテクチャを再構築し、さまざまな複雑かつ即時かつ準拠性の高いデータ統合ニーズを解決し、タスク開発、タスク スケジューリング、血縁関係分析、データ品質管理、データ サービス開発、タスク監視をワンストップでカバーします。現在、上記と同じ移行作業は、マイクロサービス アーキテクチャに基づくデータ統合ツールのバージョンである ETLCloud Community Edition を通じてBS完了できます。

移行の実践

次に、移行の実践に入ります: プロセス全体はゼロコードで視覚化され、ドラッグ アンド ドロップで行われ、異種データ テーブルのバッチ移行はマウスの 1 クリックで完了できます。最も重要なことは、コミュニティ バージョンが無料であることです。
注: ここではコミュニティ バージョンが選択されており、Docker展開方法は軽量ですぐに開始できますdocker pull ccr.ccs.tencentyun.com/restcloud/restcloud-etl:V2.2

データソース構成

SQLServerと はMySQL両方ともETLCloudコミュニティ エディションでサポートされている組み込みデータ ソースであるため、新しいデータ ソースを直接作成するだけです。

  1. ソースの構成: SQL Server

新しいデータ ソースを作成して選択しSQLServer、IP: ポートとユーザー パスワード情報を入力します。
画像.pngテスト接続は成功しました~

  1. シンクの構成: MySQL

新しいデータ ソースを作成して選択しMySQL、IP: ポートとユーザー パスワード情報を入力します。
画像.pngテスト接続は成功しました~

アプリケーションとプロセスを作成する

アプリケーションを作成し、基本的なアプリケーション構成情報を入力します。次に、データ フローを作成し、情報を入力します。
プロセスを作成した後、「プロセス設計」ボタンをクリックしてプロセス視覚化構成ページに入ることができます。

視覚的な構成プロセス

プロセスを構成する前に、この構成ページのさまざまな領域を簡単に紹介します: 左側はコンポーネント領域、中央上部は機能領域、中央の大部分はプロセス描画領域です。描画領域でコンポーネントをダブルクリックすると、ドロワー スタイルでポップアップ表示されるコンポーネントの詳細な構成項目領域が表示されます。

  1. データベーステーブル一括入力:SQLServer

左側のライブラリ テーブル同期コンポーネントで、「バッチ入力ライブラリ テーブル」を選択し、中央のプロセス描画領域にドラッグし、ダブルクリックして構成ステージに入ります。

ステップ 1:構成したSQLServerデータ ソースを選択します。ここでは、ページごとの読み取り方法を選択し、ユーザーは空でもかまいません。
画像.png
ステップ 2: に既存のテーブルとビューをロードできますSQLServer。合計 74 のテーブルと 4 つのビューがあります。
画像.png
必要に応じて、移行するデータテーブルを選択し、ここですべてのテーブルとビューを選択して保存します。
画像.png

  1. データベーステーブルのバッチ出力: MySQL

左側のライブラリ テーブル同期コンポーネントで、[ライブラリ テーブルのバッチ出力] を選択し、中央のプロセス描画領域にドラッグし、ダブルクリックして構成ステージに入ります。

ステップ 1: 構成した MySQL データ ソースを選択します。
画像.png
ステップ 2: 構成可能な出力オプション: テーブル データをクリアするかどうか、テーブルを自動的に構築するかどうか、データを更新する方法など。
画像.png

  1. プロセスを改善する

最後に、startデータベース テーブル バッチ入力ライブラリ テーブル バッチ出力、およびend流程线コンポーネントをそれぞれ接続することで、バッチ データベース テーブル データ移行の視覚的な構成が完了します。
画像.png

プロセスの実行

プロセスを保存して実行すると、対応するプロセス ログを表示して、移行の進行状況を視覚的に監視できます。
画像.png

問題記録

もちろん、移行プロセス全体は 1 回限りのプロセスではなく、データ ソース構成と移行リンクでいくつかの問題が発生しました。これは次のように記録されています。

  • SQLServerJDKデータ ソースは、クライアントのバージョンの問題による接続エラーを報告しました

画像.png
問題の説明: 接続に失敗しました (ドライバーは、Secure Sockets Layer (SSL) 暗号化を使用して SQL Server への安全な接続を確立できませんでした。エラー: 「サーバーが選択したプロトコル バージョン TLS10 は、クライアント設定 [TLS12] によって受け入れられません。」ClientConnectionId: aacc4edf-d ca7-4296-bd33-a4462fcf0033) 問題分析: クライアントで使用されているプロトコル バージョンは ですが、サーバーのプロトコル バージョンは です。つまり、データベースのバージョンが低すぎるため、クライアントのバージョンを下げる
必要TLS12TLS10ありますまずコンテナに入り、ファイルに移動します。
jdk/jre/lib/security/java.securityjdk.tls.disabledAlgorithms
画像.png
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
画像.png
解決策: ターゲット データベースへのリモート アクセスを有効にし、テーブルの作成などの権限を構成します。

grant create,alter,drop,index,select,insert,update,delete on qwert.* to root@'%' identified by 'root';
flush PRIVILEGES;
  • ELTCloudSQLServerテーブルを読み取るときに、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
画像.png
解決策: 移行プロセスを変更します。ライブラリ テーブル バッチ入力コンポーネントの構成で、最初に同期するテーブル構造のみを構成し、実行プロセスがテーブル構造の同期を完了した後、手動でタイプを端末上のタイプに変更MySQLTimeStampますDateTime
画像.png

要約する

上記は、異種データ テーブルのバッチ移行を実現するデータベース テーブル同期コンポーネントに基づいており、シンプル、直接的かつ効果的な、データベース テーブルからデータベースETLCloudテーブルへのデータ移行の実践を完了します。さらに、移行プロセス中のいくつかの構成関連の問題と解決策も記録します。以前に使用されていたタイプの移行ツールと比較して、インターフェイスはよりフレンドリーで使いやすく、コミュニティ バージョンの機能は十分に強力です。SQLServerMySQLCSETLCloud

参照


ご質問やバグが見つかった場合は、お気軽にご連絡ください。
ご意見やご提案は大歓迎です。

おすすめ

転載: blog.csdn.net/u013810234/article/details/131488797
おすすめ