前の関連記事:linuxBean14.04(66)サンプルデータベースemployee dataのER図を作成するまで
sakila databaseはDVDレンタルショップのデータベースの例です。MySQL Workbench6.3をインストールするとすでにsakilaデータベースのモデルが登録されています。このサンプルデータベースについてモデルとMySQL5.6サーバのデータの同期をとってみます。
sakila databaseのダウンロード
employee dataの例と同様にしてまずはMySQL5.6サーバにsakila databaseをインストールします。
MySQL :: MySQL Documentation: Other MySQL Documentationからsakila databaseのGzipをダウンロードしました。
ファイルマネージャでダウンロードしたsakila-db.tar.gzを右クリック→ここでファイルを展開。
解凍してできたsakila-dbフォルダに3つのファイルが入っています。
sakila.mwbファイルはMySQL WorkbenchのモデルファイルになりますがこれをMySQL Workbenchで開こうとするとダイアログがでてきます。
インデックスに外部キーと同じ名前が使われているのでインデックスの名前を修正するか?、と問われています。
MySQL5.5以降はインデックスと外部キーに同じ名前を使うことは許されなくなったそうです。
とりあえずIgnoreを選択してERR DiagramタブのCatalogでテーブルの内容をみてみると、外部キーの名前はすべてfk_から始まっているのに対してインデックスの中にfk_から始まっているものがあります。
「Rename」で開きなおすとfk_film_actor_actorがfk_film_actor_actor_idxと改名されていました。
他のテーブルのfk_から始まる名前のインデックスも同様に改名されていました。
MySQL Workbench6.3に初めからついているsakila_fullのモデルは既に同様に改名済になっています。
このsakila_full.mwbは/usr/local/share/mysql-workbench/extrasにあってパーミッションを変更しないと編集できないのでダウンロードしたsakila.mwbを「Rename」で開いて使うことにします。
sakila.mwbと紛らわしいのでsakila_full.mwbはModelのリストから削除しておきます。
MySQL5.6サーバにスキーマとデータをインストールする
MySQL Workbench6.3でMySQL5.6サーバに接続します。(接続アイコンについてはlinuxBean14.04(65)MySQL WorkbenchでMySQLユーザーを追加で作成。)
左の枠のMANAGEMENTにあるData Import/Restoreをクリックします。
sakila-schema.sqlをしていしてStart Import。
SCHEMASの更新ボタンをクリックするとsakilaスキーマが作成されてテーブルやビューやルーチンがMySQL5.6サーバに作成されていることがわかります。
まだテーブル内容は空ですので今度はデータを取り込みます。
今度はsakila-data.sqlをインポートします。
テーブルにデータが入ったことがわかります。
モデルとスキーマを同期してみる
MySQL Workbench6.3のmwbファイルのモデルとMySQL5.6サーバのスキーマは一体のものではなく、モデルを開いてEER DiagramタブのメニューでDDL(Data Definition Language)を使ってモデルとスキーマを同期させるという仕組みになっています。
Reverse Engineer
MySQL :: MySQL Workbench :: 9.4.2.2 Reverse Engineering a Live Database
リバースエンジニアではスキーマからモデルを起こします。
Forward Engineer
MySQL :: MySQL Workbench :: 9.4.1.2 Forward Engineering to a Live Server
フォワードエンジニアではモデルからスキーマを起こします。
Synchronize Model
MySQL :: MySQL Workbench :: 9.5.1 Database Synchronization
モデル、スキーマを一致させます。
今回はモデルもスキーマもすでに存在しているのでSynchronize Modelを使います。
EER DiagramタブのメニューからDatabase→Synchronize Model。
MySQL5.6への接続設定ですのでそのまま「Next」。
同期に際してのオプションが選択できます。
今回はデフォルトのまま何もチェックせず「Next」。
サーバと接続してスキーマ一覧の取得に成功しました。「Next」。
MySQL Workbench6.3で開いているモデルとそれに対応するMySQL5.6サーバにあるスキーマが表示されます。
sakilaにチェックがついていることを確認して「Next」。
Model SchemaとRDBMS Shchemaのどっちから取得したのかよくわかりませんが、たぶんRDBMS Schemaから取得成功ということでしょう。「Next」。
左側モデル、右側がサーバにあるスキーマになります。
Updateの矢印はどちらの状態をどちらに適用するのかを示しています。
モデル側のN/Aは存在しないことを表し、上図ではサーバにあるスキーマからpayment_dateというトリガー(20.3 トリガーの使用)が削除されることになります。
Updateにある矢印をダブリックするとUpdate Model→Ignore→Update Sourceの順に矢印が変化します。
どちらも自分で作ったものではないのでModelかSourceのどちらをUpdateすればよいのか判断に迷いますね。
とりあえず今回は削除するものはないようにModelの方をUpdateすることにしました。
この3箇所の矢印の向きを逆にしました。「Next」。
自動生成されたSQL(DDL)が確認できます。
「Execute」でSQLが実行されます。
これで同期完了です。
モデルのpaymentテーブルをみてみるとTriggersが追加されていることがわかります。
アップデートされたモデルの保存はSave Model to Current Fileアイコンで行います。
同期させたあとMySQL :: Sakila Sample Database :: 6 Usage Examplesの通りSQLを実行してみても同様の結果が得られました。
参考にしたサイト
MySQL :: MySQL Documentation: Other MySQL Documentation
サンプルデータベースのダウンロードサイト。
MySQL :: MySQL Workbench
MySQL Workbenchの公式マニュアル。
SQLの基本とRDBMSのアーキテクチャ - Part1 SQLの基本を理解しよう:ITpro
SQLはデータ定義言語DDL、データ操作言語DML、データ制御DCLの3つに分類されるそうです。
MySQL :: Sakila Sample Database
Sakilaサンプルデータベースのマニュアル。
0 件のコメント:
コメントを投稿