Bug #72178 | --skip-table-options does not work when DIFFTYPE=sql | ||
---|---|---|---|
Submitted: | 1 Apr 2014 7:30 | Modified: | 15 Sep 2014 21:13 |
Reporter: | HBSpy HB | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Utilities | Severity: | S3 (Non-critical) |
Version: | 1.3.6, 1.4.2 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | mysqldiff |
[1 Apr 2014 7:30]
HBSpy HB
[21 Apr 2014 19:33]
Sveta Smirnova
Thank you for the report. Verified as described. Bug is only repeatable if there are other changes to the table, not only table options.
[24 Apr 2014 14:22]
Chuck Bell
What version of Utilities are you using? I have tested against 1.4.2 and the code is successfully skipping table options. Here are my results: mysql> show create table t1.a1 \G *************************** 1. row *************************** Table: a1 Create Table: CREATE TABLE `a1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b` char(20) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> show create table t2.a1 \G *************************** 1. row *************************** Table: a1 Create Table: CREATE TABLE `a1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b` char(20) DEFAULT NULL, `c` int(10) unsigned NOT NULL COMMENT 'hello', PRIMARY KEY (`a`), KEY `bb` (`b`), KEY `cc` (`c`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 1 row in set (0.00 sec) $ python ./scripts/mysqldiff.py --server1=root@localhost:13001 t1.a1:t2.a1 --skip-table-options # server1 on localhost: ... connected. # Comparing t1.a1 to t2.a1 [FAIL] # Object definitions differ. (--changes-for=server1) # --- t1.a1 +++ t2.a1 @@ -1,5 +1,8 @@ CREATE TABLE `a1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b` char(20) DEFAULT NULL, - PRIMARY KEY (`a`) + `c` int(10) unsigned NOT NULL COMMENT 'hello', + PRIMARY KEY (`a`), + KEY `bb` (`b`), + KEY `cc` (`c`) ) Compare failed. One or more differences found. ^^^ No table options here! $ python ./scripts/mysqldiff.py --server1=root@localhost:13001 t1.a1:t2.a1 # server1 on localhost: ... connected. # Comparing t1.a1 to t2.a1 [FAIL] # Object definitions differ. (--changes-for=server1) # --- t1.a1 +++ t2.a1 @@ -1,5 +1,8 @@ CREATE TABLE `a1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b` char(20) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 + `c` int(10) unsigned NOT NULL COMMENT 'hello', + PRIMARY KEY (`a`), + KEY `bb` (`b`), + KEY `cc` (`c`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 Compare failed. One or more differences found. ^^^ Ah, there they are. But I didn't tell it to skip them so they should be there.
[24 Apr 2014 14:28]
HBSpy HB
the bug will repeat when you add the option "DIFFTYPE=sql"
[14 Jul 2014 23:13]
Garrett Plasky
This bug also surfaces when the column order is different. Normally the tool will issue a warning in these cases, however when --skip-table opts is used in comparing two tables that have different column ordering, the check fails.
[14 Jul 2014 23:50]
Garrett Plasky
FWIW the bug seems to be limited to code within the private method _check_tables_structure in .../mysql/utilities/common/dbcompare.py. Lines 416-418 should be replaced with: diff = None if not options.get('skip_table_opts', False): table1_opts = db_1.get_table_options(db1, name1) table2_opts = db_2.get_table_options(db2, name2) diff = _get_diff(table1_opts, table2_opts, object1, object2, diff_type) I've tested every edge case I can think if with this code in place and the utility performs as expected. I'm unable to contribute this code -- would someone with a contributor agreement be willing to submit this and double-check the fix?
[15 Sep 2014 21:13]
Philip Olson
Fixed as of the upcoming MySQL Utilities 1.5.2 release, and here's the changelog entry: The "mysqldiff" utility's "--skip-table-options" option would fail when comparing two tables with different column ordering, or when also setting the "--difftype" option to SQL. Thank you for the bug report.