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を選択する。
画像のバージョンは古いかも。新しいバージョンでも、流れは同じ感じでいけるんじゃないだろうか。
2. 作業前に確認。OPEN ODBC Administratorをクリック。
3. 移行開始前に、SQL Server用のドライバを確認。
ODBC Driver for SQL Serverが必要。自分の場合は、既にインストールされていた。SQL Server Management Studio (2014かな?)がインストールされているから、その時に一緒に入ったのかも。エディションはExpressです。
4. 移行元(SQL Server)の接続設定。
5. 移行先(MySQL)の接続設定。
MySQLWorkbenchを普段使っている人なら、既に登録されている接続先から選択できる。自分のやった環境は、秘密鍵でSSHで、DBへは、localhostのデフォルトの3306ポートのrootでパスワードなし、といった感じ。まあ、今回は接続しないから、たぶん設定しても意味ないと思うんだけれども。
6. で、処理が進むので見守る。
7. 移行したいスキーマの選択。
データベースを選択する。このとき、移行先での名前をどうするか選択できるので、Only one schemaを選択。正直、SQL Serverでスキーマ全然使ってない。全部dbo。
8. 処理が進むので見守る。
9. 移行したいオブジェクトの選択。
テーブルを選ぶ。全部選んだ。
10. 処理が進むので見守る。
11. 処理結果を見る。
12. スキーマ作成スクリプトファイルの作成。
今回は、データ移行はしないで、空のデータベース、テーブルを作るsqlファイルだけ出力した。
13. 中断。
データ移行もする場合は、この後も続けていく感じだと思います。今回はコレで終了。
コメント
コメント一覧 (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のアカウントの権限は確認してみましたか?
「4. 移行元(SQL Server)の接続設定」で入力する、SQL Serverのユーザの権限です。
Azure SQL Serverの場合にどうやってDBの権限まわりを設定するのかはわかりませんが、通常は、Microsoft SQL Server Management Studioを使用して、アカウントまわりの設定をいじることができます。
以下リンクの内容はいかがでしょうか。
Not retrieving schema list from source when migrating from MSSQL to MySQL using Workbench
Video Tutorial: Setup a Restricted SQL Server Account for Migrations with MySQL Workbench
はじめまして。
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