SQLServerからMySQLへデータベースを移行する

SQLServerからMySQLへデータベースを移行した際のNote。
MySQL Workbenchを使用する。

参考にしたページは、Database Migrationのウィザードに出てくる以下リンク。
https://dev.mysql.com/doc/workbench/en/wb-migration.html

今回やったこと
– SQL ServerからMySQL用にテーブル作成のスクリプトのみを生成。(つまりスキーマダンプ。)
– データの移行は、やってません。(後ほど、PHPでゴリゴリ書いてやりました。)

環境
– MySQLWorkbenchを起動しているのは、Windows10 Pro。
– 移行元のサーバは、Windows Server 2012上のSQL Server(2014?Azureの仮想マシンにインストールしたやつ。)
– 今回は、移行先のサーバを設定するところが出てくるが、サーバへ直接移行していないで、sqlファイルで出力した。

できなかった場合は以下の点を確認してみて
– MySQLWorkbenchを使っている環境に、ODBC Driver for SQL Serverはインストールされているか。
– もし、対象先サーバのMySQLへ接続して移行する場合は、MySQLへリモートから接続できるようになっているか。(アカウントのホスト名、ファイアウォール、ポート解放…)
– もし、対象先サーバのMySQLへ接続して移行する場合、コネクションタイムアウトの設定に注意。でかいデータを移行する場合は、途中で接続が切断されてしまうことも。
– SQL Serverがのっているサーバの、ファイアウォール、ポート解放、アカウントの設定。

作業手順

1. MySQLWorkbenchを起動して、TOPからDatabaseMigrationを選択する。
画像のバージョンは古いかも。新しいバージョンでも、流れは同じ感じでいけるんじゃないだろうか。

1.メニューからDatabaseMigrationを選択

1.メニューからDatabaseMigrationを選択


 
2. 作業前に確認。OPEN ODBC Administratorをクリック。

2.開始前にドライバの確認

2.開始前にドライバの確認


 
3. 移行開始前に、SQL Server用のドライバを確認。

ODBC Driver for SQL Serverが必要。自分の場合は、既にインストールされていた。SQL Server Management Studio (2014かな?)がインストールされているから、その時に一緒に入ったのかも。エディションはExpressです。

3.ドライバの確認

3.ドライバの確認


 
4. 移行元(SQL Server)の接続設定。

4.移行元の設定

4.移行元の設定


 
5. 移行先(MySQL)の接続設定。

MySQLWorkbenchを普段使っている人なら、既に登録されている接続先から選択できる。自分のやった環境は、秘密鍵でSSHで、DBへは、localhostのデフォルトの3306ポートのrootでパスワードなし、といった感じ。まあ、今回は接続しないから、たぶん設定しても意味ないと思うんだけれども。

5.移行先の設定

5.移行先の設定


 
6. で、処理が進むので見守る。


 
7. 移行したいスキーマの選択。

データベースを選択する。このとき、移行先での名前をどうするか選択できるので、Only one schemaを選択。正直、SQL Serverでスキーマ全然使ってない。全部dbo。

7.移行したいスキーマの選択

7.移行したいスキーマの選択


 
8. 処理が進むので見守る。


 
9. 移行したいオブジェクトの選択。
テーブルを選ぶ。全部選んだ。

9.移行したいオブジェクトの選択

9.移行したいオブジェクトの選択


 
10. 処理が進むので見守る。


 
11. 処理結果を見る。


 
12. スキーマ作成スクリプトファイルの作成。

今回は、データ移行はしないで、空のデータベース、テーブルを作るsqlファイルだけ出力した。

12.スクリプトファイルの作成

12.スクリプトファイルの作成


 
13. 中断。

データ移行もする場合は、この後も続けていく感じだと思います。今回はコレで終了。

13.今回はスクリプトだけ作って終了

13.今回はスクリプトだけ作って終了

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

メインはWeb系エンジニアです。

コメント

コメント一覧 (3件)

  • はじめまして。
    SQL ServerからMySQLへデータを移行させようと試行錯誤中にこちらの記事を拝見しています。
    急なお願いで恐縮なのですが、ひとつ質問させていただいてもよろしいでしょうか?

    Azure上のSQL ServerからMySQLへデータを移行しようとしているのですが、記事中の「6. で、処理が進むので見守る。」のRetrieve schema list from sourceの項でスキーマがないとエラーになり、「7. 移行したいスキーマの選択。」でもやはりスキーマが表示されず先に進めません。

    〇エラー内容
    – Fetching catalog names…
    WARNING: The following catalogs were not found: DB名
    – Fetching schema names…
    – Finished
    Retrieve schema list from source finished
    Tasks finished with warnings and/or errors; view the logs for details
    Finished performing tasks.
    〇エラー内容ここまで

    このタイミングでスキーマが一つも表示されず、先に進まないのはどういった問題が考えられるでしょうか?Azure portal上では各table、recordがあることは確認できます。

    環境:
    移行元:Azure SQL Server2016
    移行先:MySQL(XAMPP3.2.2上のVer 15.1 Distrib 10.1.37-MariaDB)
    移行ツール:MySQL Workbench 8.0 CE
    作業OS:windows10

    突然のコメント、質問で大変恐縮ですがもし原因がわかるようであれば教えていただけないでしょうか。
    よろしくお願いいたします。

  • はじめまして。
    SQL ServerからMySQLへデータを移行試みておりこちらの記事を拝見しています。
    急なお願いで恐縮なのですが、質問よろしいでしょうか?

    8. 処理が進むので見守る。で「Reverse engineer selected schemas」がエラーを起こします。

    ○エラー内容
    Traceback (most recent call last):
    File “C:\Program Files\MySQL\MySQL Workbench 8.0 CE\workbench\wizard_progress_page_widget.py”, line 197, in thread_work
    self.func()
    File “C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\migration_schema_selection.py”, line 183, in task_reveng
    self.main.plan.migrationSource.reverseEngineer()
    File “C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\migration.py”, line 364, in reverseEngineer
    self.state.sourceCatalog = self._rev_eng_module.reverseEngineer(self.connection, self.selectedCatalogName, self.selectedSchemataNames, self.state.applicationData)
    SystemError: ProgrammingError(“(‘42000’, “[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]SELECT \x8c\xa0\x8c\xc0\x82\xaa\x83I\x83u\x83W\x83F\x83N\x83g ‘types’\x81A\x83f\x81[\x83^\x83x\x81[\x83X ‘mssqlsystemresource’\x81A\x83X\x83L\x81[\x83} ‘sys’ \x82\xc5\x8b\x91\x94\xdb\x82\xb3\x82\xea\x82\xdc\x82\xb5\x82\xbd\x81B (229) (SQLExecDirectW)”)”): error calling Python module function DbMssqlRE.reverseEngineer
    ERROR: Reverse engineer selected schemas: ProgrammingError(“(‘42000’, “[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]SELECT \x8c\xa0\x8c\xc0\x82\xaa\x83I\x83u\x83W\x83F\x83N\x83g ‘types’\x81A\x83f\x81[\x83^\x83x\x81[\x83X ‘mssqlsystemresource’\x81A\x83X\x83L\x81[\x83} ‘sys’ \x82\xc5\x8b\x91\x94\xdb\x82\xb3\x82\xea\x82\xdc\x82\xb5\x82\xbd\x81B (229) (SQLExecDirectW)”)”): error calling Python module function DbMssqlRE.reverseEngineer
    Failed
    ○エラー内容ここまで

    reverseEngineerと言っているのでMySQLの設定かと思いましたが、検討がつかず質問させていただいております。
    唐突の質問で大変恐縮ですが、もし原因がわかるようであれば教えていただけないでしょうか。

    環境:
    移行元:SQL Server2017 (localhost\SQLEXPRESS)
    移行先:MySQL(ver:5.7 場所:localhost)
    移行ツール:MySQL Workbench 8.0 CE
    作業OS:windows10

chibabay へ返信する コメントをキャンセル

目次