linuxからWindowsマシンにmysqlを移行しています。私はマッピングテーブルを使用している更新クエリは、WindowsとLinuxで異なる結果を与えている。 私は問題を再現するための手順と私が得た結果を提供しました。WindowsとLinuxのmysqlの結果が異なります
は、Linuxで次の手順に従います。
は、マッピングテーブル
を使用してテーブルにCREATE TABLE `buildmapping` ( `ver` varchar(36) DEFAULT NULL, `build` varchar(36) DEFAULT NULL, `branchname` varchar(36) DEFAULT NULL, `buildminor` varchar(36) DEFAULT NULL, UNIQUE KEY `bmap` (`ver`,`build`,`branchname`,`buildminor`), KEY `ak` (`ver`), KEY `br` (`branchname`), KEY `bi` (`build`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; CREATE TABLE `s_Last7days` ( `ver` varchar(36) DEFAULT NULL, `build` varchar(36) DEFAULT NULL, `branchname` varchar(36) DEFAULT NULL, `buildminor` varchar(36) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
挿入が必要なデータ
Insert into buildmapping values ('1522','105','release_01','682'); Insert into buildmapping values ('1384','105','release_01','682'); Insert into buildmapping values ('1090','105','release_01','682'); Insert into s_Last7days values ('0','105','release_01','682');
アップデート事実を必要の作成します
update s_Last7days b , buildmapping c set b.ver=c.ver where b.ver=0 and b.Build=c.build and b.BuildMinor=c.buildminor and b.branchname=c.branchname;
検証データ
select * from s_Last7days;
+------+-------+------------+------------+ | ver | build | branchname | buildminor | +------+-------+------------+------------+ | 1522 | 105 | release_01 | 682 | +------+-------+------------+------------+
は、Linuxサーバからのダンプを取る:
mysqldump -uxxxxx -pxxxxxx -hxxxxx databasename buildmapping > buildmapping_bk1128.sql
SSHのWindowsサーバへのファイル
フォローしますWindowsサーバーの以下の手順:
Windowsでテーブルを復元します。
必要なテーブルを作成します
CREATE TABLE `s_Last7days` ( `ver` varchar(36) DEFAULT NULL, `build` varchar(36) DEFAULT NULL, `branchname` varchar(36) DEFAULT NULL, `buildminor` varchar(36) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
(Iは、MySQL Workbenchを使用)挿入は
update s_Last7days b , buildmapping c set b.ver=c.ver where b.ver=0 and b.Build=c.build and b.BuildMinor=c.buildminor and b.branchname=c.branchname;
検証データをマッピングテーブルを使用して
Insert into s_Last7days values ('0','105','release_01','682');
アップデート事実をデータを必要と
select * from s_Last7days;
+------+-------+------------+------------+ | ver | build | branchname | buildminor | +------+-------+------------+------------+ | 1090 | 105 | release_01 | 682 | +------+-------+------------+------------+
私は両方のサーバーが同期になりたいです。誰かがこの問題について私を助けてくれますか?
あなた 'buildmapping'テーブルは' branchname'と 'buildminor'に一致する複数の行を持っています。 WindowsとLinuxが別の順序でそれらを取得しているように見えます。 –
その場合(私はすばやくスキャンした)、あなたがあなたのロジックを台無しにしてしまったことを意味します。 – Drew
問題は、毎回同じ順序で行が返されると仮定しているということです。行の順序を保証する唯一の方法は、ORDER BYを含めることです。 –