これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド mysqldiff です。
プログラム:
NAME
mysqldiff - データベース オブジェクト間の相違点を特定する
SYNOPSIS
mysqldiff [オプション] {db1[:db1] | {db1.obj1[:db2.obj2]} ...
DESCRIPTION
このユーティリティはオブジェクトの定義を読み取り、diff のようなメソッドを使用してそれらを比較します。
それらが同じかどうかを判断します。 ユーティリティはオブジェクトの違いを表示します
それは同じではありません。
比較する 1 つのデータベースに名前を付けるには、db2:db1 という表記を使用するか、単に dbXNUMX を使用して比較します。
同じ名前の XNUMX つのデータベースを比較します。 後者の場合は便宜的な表記です。
異なるサーバー上の同じ名前のデータベースを比較します。
比較は、単一サーバー上の異なる名前の XNUMX つのデータベースに対して実行できます。
のみを指定すると、 --server1 オプション。 ユーザーは次の方法で別のサーバーに接続することもできます。
の指定 --server2 オプション。 この場合、db1 はサーバー 1 から取得され、db2 はサーバー XNUMX から取得されます。
サーバー2。
データベース ペアを指定すると、XNUMX つのデータベース内のすべてのオブジェクトがデータベースと比較されます。
もう一方の対応するオブジェクト。 どちらのデータベースにも現れないオブジェクトは生成されます。
エラー。
特定のオブジェクトのペアを比較するには、次の各データベース名にオブジェクト名を追加します。 デシベルオブジェクト
フォーマット。 たとえば、1 つの名前付きオブジェクトを比較するには db1.obj2:db2.obj1 を使用し、比較するには db1.objXNUMX を使用します。
同じ名前のデータベース内の同じ名前のオブジェクトを比較します。 合法ではありません
データベース名とオブジェクト名を混ぜてください。 たとえば、db1.obj1:db2 および db1:db2.obj2 は次のようになります。
違法。
異なる XNUMX つのデータベースを比較するために、単一サーバーに対して比較を実行できます。
のみを指定して、同じサーバー上の名前を指定します。 --server1 オプション。 または、次のこともできます。
を指定して別のサーバーに接続することもできます。 --server2 オプション。 この場合、最初の
比較するオブジェクトはserver1から取得され、2番目はserverXNUMXから取得されます。
デフォルトでは、ユーティリティはオブジェクトの差異を差異レポートとして生成します。 しかし、あなたは
を変換するための SQL ステートメントを含む変換レポートを生成できます。
代わりに適合性を求めるオブジェクトを使用します。 「sql」値を使用します。 --difftype を生成するオプション
オブジェクト定義に準拠するための適切な ALTER コマンドを含むリスト
指定されたオブジェクトのペア。 変換を形成できない場合、ユーティリティは次のことを報告します。
オブジェクトの差分と警告ステートメント。 注意事項の重要な制限事項を参照してください。
のセクションから無料でダウンロードできます。
diff 形式の出力を表示する方法を指定するには、次の値のいずれかを使用します。
--difftype オプション:
· 統一 (デフォルト)
統一フォーマットの出力を表示します。
· コンテキスト
コンテキスト形式の出力を表示します。
· 異なる
異なる形式の出力を表示します。
· SQL
SQL 変換ステートメントの出力を表示します。
この --変更点- オプションは、差の方向を制御します (
変換されるオブジェクト) を差分レポート (デフォルト) または変換のいずれかで指定します。
レポート ( --difftype=sql オプション)。 次のコマンドを考えてみましょう。
mysqldiff --server1=root@host1 --server2=root@host2 --difftype=sql \
db1.テーブル1:dbx.テーブル3
一番左のデータベース (db1) は、 --server1 オプション
(ホスト1)。 一番右のデータベース (dbx) は、 --server2
オプション (ホスト 2)。
· --changes-for=server1: の定義を行う方法を示す出力を生成します。
サーバー 1 上のオブジェクトは、サーバー 2 上の対応するオブジェクトの定義と同様です。
· --changes-for=server2: の定義を行う方法を示す出力を生成します。
サーバー 2 上のオブジェクトは、サーバー 1 上の対応するオブジェクトの定義と同様です。
デフォルトの方向はserver1です。
SQL 差分形式を指定すると、逆の変換を確認することもできます。
--show-reverse オプションを選択します。
ユーティリティは、オブジェクトの欠落が最初に発生したとき、またはオブジェクトが存在しないときに停止します。
マッチ。 この動作をオーバーライドするには、 - 力 ユーティリティに次のことをさせるオプション
引数としてリストされたすべてのオブジェクトの比較を試みます。
OPTIONS
mysqldiff 次のコマンドラインオプションを受け入れます。
・ - ヘルプ
ヘルプメッセージを表示して終了します。
· --changes-for=
他のサーバーと一致する変換を表示するサーバーを指定します。 たとえば、
に一致するようにserver1上のオブジェクト定義を変換する変換を参照してください。
対応する定義をserver2上で使用します。 --changes-for=server1。 許可される値は次のとおりです
server1 と server2。 デフォルトは server1.
· --difftype= 、-d
差分の表示形式を指定します。 許可される形式値は次のとおりです。 統一, コンテキスト,
異なる, SQL。 デフォルトは 統一.
・ - 力
最初に見つかった違いで立ち止まらないでください。 すべてのオブジェクトを処理してすべてを検索します
違い。
・--quiet、-q
何も印刷しないでください。 成功または失敗の終了コードのみを返します。
・--server1 =
次の形式の最初のサーバーの接続情報:
<user> [:passwd>] @host> [:ポート>] [:ソケット>]またはログインパス> [:ポート>] [:ソケット>]。
・--server2 =
XNUMX 番目のサーバーの接続情報の形式は次のとおりです。
<user> [:passwd>] @host> [:ポート>] [:ソケット>]またはログインパス> [:ポート>] [:ソケット>]。
· --show-reverse
オブジェクトを適合させるための SQL ステートメントを含む変換レポートを作成します。
定義を逆に指定します。 たとえば、次の場合 --変更点- はserver1に設定されており、
また、server2 の変換も生成します。 注: 逆の変更には注釈が付けられます
コメントとしてマークされています。
・--verbose、-v
表示する情報の量を指定します。 このオプションを複数回使用して増加します
情報の量。 例えば、 -v =冗長、 -vv =より冗長、 -vvv =
デバッグ。
・ - バージョン
バージョン情報を表示して終了します。
· --width=
テストレポートの表示幅を変更します。 デフォルトは 75 文字です。
注意事項
アカウントの接続パラメータ (ユーザー、ホスト、パスワードなど) を指定する必要があります。
比較対象のすべてのオブジェクトにアクセスするための適切な権限を持っていること。
SQL 変換機能には、次の既知の制限があります。
· パーティションに違いがあるテーブルが見つかった場合、ユーティリティは
変更する 表 他のすべての変更についてはステートメントを使用しますが、警告を出力して省略します。
パーティションの違い。
· 変換によってソース テーブル内のテーブル オプションが検出された場合 (
--変更点- オプション) 変更されていないか、ターゲットテーブルに存在しないものは、
ユーティリティが生成する 変更する 表 他のすべての変更についてはステートメントを実行しますが、警告を出力します
テーブルオプションの違いは省略します。
· イベントの名前変更はサポートされていません。 それの訳は mysqldiff オブジェクトを比較します
名前。 この場合、diff の方向に応じて、イベントは次のように識別されます。
追加する必要があるか、 DROP EVENT ステートメントが生成されます。
· イベントの定義句の変更はサポートされていません。
· MySQL Cluster に固有の SQL 拡張機能はサポートされていません。
--difftype オプションでは、許可される値は大文字と小文字が区別されません。 加えて、
値は、有効な値の明確なプレフィックスとして指定できます。 例えば、
--difftype=d 異なるタイプを指定します。 プレフィックスが複数一致する場合、エラーが発生します。
有効な値。
MySQLクライアントツールへのパスは、のPATH環境変数に含める必要があります
login-pathsで認証メカニズムを使用するため。 これにより、ユーティリティは次のことが可能になります
ログインパス値をから読み取るために必要なmy_print_defaultsツールを使用します。
ログイン構成ファイル(.mylogin.cnf)。
引数として指定されたデータベース オブジェクト識別子に特殊文字が含まれている場合、または
は予約語であるため、バッククォート () で適切に引用符で囲む必要があります。`)。 順番に、
バックティックで引用された名前は、状況に応じて一重引用符または二重引用符で囲む必要があります。
オペレーティング システム、つまり (") Windows または (') Windows 以外のシステムでは、
バッククォートで囲まれた識別子を単一の引数として読み取るユーティリティ。 たとえば、表示するには
テーブルとの違い 奇妙な`テーブル1 データベースから 変な`db.name とテーブル
奇妙な`テーブル2 データベースから その他: 奇妙な`db.name、オブジェクトのペアは次を使用して指定する必要があります。
次の構文 (Windows 以外の場合):
'`奇妙な`db.name`.`奇妙な`table1`:`other:`weird`db.name`.`奇妙な`table2`'.
例
ローカル サーバー上のemployee データベースと emp データベースを比較するには、次のコマンドを使用します。
$ mysqldiff --server1=root@localhost 従業員:emp1
# ローカルホスト上のserver1: ... 接続されました。
警告: オブジェクトは、server1:employees にはありますが、server2:emp1 にはありません:
イベント: e1
比較に失敗しました。 XNUMX つ以上の違いが見つかりました。
$ mysqldiff --server1=root@localhost \
employees.t1:emp1.t1 employees.t3:emp1.t3
# ローカルホスト上のserver1: ... 接続されました。
#employee.t1 と emp1.t1 を比較 [PASS]
# ローカルホスト上のserver1: ... 接続されました。
#employee.t3 と emp1.t3 を比較 [PASS]
成功。 すべてのオブジェクトは同じです。
$ mysqldiff --server1=root@localhost \
従業員.給与:emp1.給与 --異なる
# ローカルホスト上のserver1: ... 接続されました。
#employees.salaries と emp1.salaries を比較 [FAIL]
# オブジェクト定義は同じではありません:
CREATE TABLE `給与` (
`emp_no` int型(11)NOT NULL、
「給料」 int型(11)NOT NULL、
`from_date` の日付は NULL ではありません。
「to_date」の日付は NULL ではありません。
主キー (`emp_no`,`from_date`)、
KEY `emp_no` (`emp_no`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1
? ^^^^
+ ) エンジン=MyISAM デフォルト文字セット=latin1
? ++^^
比較に失敗しました。 XNUMX つ以上の違いが見つかりました。
次の例は、変換レポートを生成する方法を示しています。 次のように仮定します
オブジェクト定義:
ホスト1:
CREATE TABLE db1.table1 (数値 int、misc チャリオット(30));
ホスト2:
CREATE TABLE dbx.table3 (数値 int、メモ チャリオット(30)、その他 チャリオット(55));
db1.table1 の定義を次のように変換する一連の SQL ステートメントを生成するには
dbx.table3 の場合は、次のコマンドを使用します。
$ mysqldiff --server1=root@host1 --server2=root@host2 \
--changes-for=server1 --difftype=sql \
db1.テーブル1:dbx.テーブル3
# host1 上のserver1: ... 接続されました。
# host2 上のserver2: ... 接続されました。
# db1.table1 と dbx.table3 を比較します [失敗]
# 変換ステートメント:
ALTER TABLE db1.table1
列メモを追加 チャリオット(30) aの後、
列の変更 その他 その他 チャリオット(55);
比較に失敗しました。 XNUMX つ以上の違いが見つかりました。
dbx.table3 の定義を次のように変換する一連の SQL ステートメントを生成するには
db1.table1 の場合は、次のコマンドを使用します。
$ mysqldiff --server1=root@host1 --server2=root@host2 \
--changes-for=server2 --difftype=sql \
db1.テーブル1:dbx.テーブル3
# host1 上のserver1: ... 接続されました。
# host2 上のserver2: ... 接続されました。
# db1.table1 と dbx.table3 を比較します [失敗]
# 変換ステートメント:
ALTER TABLE dbx.table3
ドロップカラムメモ、
列の変更 その他 その他 チャリオット(30);
比較に失敗しました。 XNUMX つ以上の違いが見つかりました。
dbx.table3 の定義を変換する一連の SQL ステートメントを生成するには、
db1.table1 を両方向に接続するには、次のコマンドを使用します。
$ mysqldiff --server1=root@host1 --server2=root@host2 \
--show-reverse --difftype=sql \
db1.テーブル1:dbx.テーブル3
# host1 上のserver1: ... 接続されました。
# host2 上のserver2: ... 接続されました。
# db1.table1 と dbx.table3 を比較します [失敗]
# 変換ステートメント:
# --destination=サーバー1:
ALTER TABLE db1.table1
列メモを追加 チャリオット(30) aの後、
列の変更 その他 その他 チャリオット(55);
# --destination=サーバー2:
# ALTER TABLE dbx.table3
# DROP COLUMN ノート、
# 列の変更 その他 その他 チャリオット(30);
比較に失敗しました。 XNUMX つ以上の違いが見つかりました。
COPYRIGHT
onworks.net サービスを使用してオンラインで mysqldiff を使用する