ホームページ  >  記事  >  バックエンド開発  >  mysql を使用して 2 つのデータベースのテーブル構造を比較する方法

mysql を使用して 2 つのデータベースのテーブル構造を比較する方法

jacklove
jackloveオリジナル
2018-06-08 15:44:433150ブラウズ


開発とデバッグのプロセスでは、古いコードと新しいコードの違いを比較する必要があります。 などのバージョン管理ツールを使用できます。 git/svn 比較を行います。異なるバージョンのデータベーステーブル構造にも違いがあります。また、その違いを比較し、構造を更新するための SQL ステートメントを取得する必要があります。

関連する mysql ビデオ チュートリアルの推奨事項: "mysql チュートリアル"

たとえば、同じコード セットは開発環境では問題なく動作しますが、開発環境では問題が発生します。このとき、サーバーの設定を確認し、開発環境とテスト環境のデータベーステーブル構造に違いがないか確認してください。相違点を見つけたら、開発環境とテスト環境のデータベース テーブル構造が一致するまで、テスト環境のデータベース テーブル構造を更新する必要があります。

mysqldiff ツールを使用して、データベース テーブルの構造を比較し、更新された構造の SQL ステートメントを取得できます。

1.mysqldiff インストール方法

mysqldiff ツールは mysql-utilities ソフトウェア パッケージに含まれており、mysql-utilities を実行するには依存関係 # のインストールが必要です。 ##mysql-connector -python

mysql-connector-python のインストール

ダウンロード アドレス: https:// dev.mysql.com /downloads/connector/python/


##mysql-utilities インストールダウンロード アドレス: https://downloads .mysql.com /archives/utilities/

Mac システムを使用しているため、

brew

を直接使用してインストールできます。

brew install caskroom/cask/mysql-connector-pythonbrew install caskroom/cask/mysql-utilities
インストール後、view versionコマンドを実行してバージョンが表示されればインストール成功です

mysqldiff --versionMySQL Utilities mysqldiff version 1.6.5 License type: GPLv2

mysqldiff

コマンドの使い方:

mysqldiff --server1=root@host1 --server2=root@host2 --difftype=sql db1.table1:dbx.table3

パラメータの説明:

--server1 指定数据库1--server2 指定数据库2
比較は単一データベースに対して行うことができ、server1 オプションを指定するだけで、同じデータベース内の異なるテーブル構造を比較できます。データベース。

--difftype 差异信息的显示方式

unified

(デフォルト) 統一フォーマット出力の表示

context

コンテキストフォーマット出力の表示

differ

さまざまな形式の出力形式を表示します

sql

SQL 変換ステートメントの出力を表示します
get sql 変換ステートメントの場合は、sql 表示メソッドを使用するのが最適です。

--character-set 指定字符集--changes-for 用于指定要转换的对象,也就是生成差异的方向,默认是server1--changes-for=server1 表示server1要转为server2的结构,server2为主。--changes-for=server2 表示server2要转为server1的结构,server1为主。--skip-table-options 忽略AUTO_INCREMENT, ENGINE, CHARSET的差异。--version 查看版本

mysqldiff パラメータの使用方法の詳細については、公式ドキュメントを参照してください:

https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqldiff.html



3. 例

テスト データベース テーブルとデータを作成します

create database testa;create database testb;use testa;CREATE TABLE `tba` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL, `age` int(10) unsigned NOT NULL, `addtime` int(10) unsigned NOT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;insert into `tba`(name,age,addtime) values('fdipzone',18,1514089188);use testb;CREATE TABLE `tbb` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(10) NOT NULL, `addtime` int(10) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `tbb`(name,age,addtime) values('fdipzone',19,1514089188);

差分比較を実行し、server1 をメイン サーバーとして設定し、server2 を変換する必要があります。 server1 データベース テーブルの構造

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.
# server2 on localhost: ... connected.
# Comparing testa.tba to testb.tbb                                 
[FAIL]
# Transformation for --changes-for=server2:#ALTER TABLE `testb`.`tbb` 
  CHANGE COLUMN addtime addtime int(10) unsigned NOT NULL, 
  CHANGE COLUMN age age int(10) unsigned NOT NULL, 
  CHANGE COLUMN name name varchar(25) NOT NULL, 
RENAME TO testa.tba 
, AUTO_INCREMENT=1002;# Compare failed. One or more differences found.

mysqldiff から返された更新 SQL ステートメントを実行します

mysql> ALTER TABLE `testb`.`tbb` 
    ->   CHANGE COLUMN addtime addtime int(10) unsigned NOT NULL, 
    ->   CHANGE COLUMN age age int(10) unsigned NOT NULL, 
    ->   CHANGE COLUMN name name varchar(25) NOT NULL;
Query OK, 0 rows affected (0.03 sec)

比較のために mysqldiff を再度実行します。構造に違いはありません。

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.# server2 on localhost: ... connected.# Comparing testa.tba to testb.tbb                                
 [FAIL]# Transformation for --changes-for=server2:#ALTER TABLE `testb`.`tbb` 
RENAME TO testa.tba 
, AUTO_INCREMENT=1002;# Compare failed. One or more differences found.

AUTO_INCREMENT を無視するように設定し、差分比較を実行します。

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --skip-table-options --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.# server2 on localhost: ... connected.# Comparing testa.tba to testb.tbb                                
 [PASS]# Success. All objects are the same.

この記事では、MySQL が 2 つのデータベースのテーブル構造を比較する方法について説明します。詳細については、PHP の中国語 Web サイトを参照してください。

関連する推奨事項:

mysql binlog の使用方法について説明します


PHP がトークン バケット アルゴリズムを使用してトラフィックを達成する方法について説明しますredisベース コントロールの関連内容


phpでロゴ付きQRコードクラスを作成する方法


##

以上がmysql を使用して 2 つのデータベースのテーブル構造を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。