diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 007be182..34e8b9a3 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -12042,7 +12042,7 @@ structure (MAGIC_create_replicate): this_cnt int NOT NULL, master_crc char(40) NULL, master_cnt int NULL, - ts timestamp NOT NULL, + ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db, tbl, chunk), INDEX ts_db_tbl (ts, db, tbl) ) ENGINE=InnoDB; diff --git a/sandbox/start-sandbox b/sandbox/start-sandbox index 7f34c0aa..79ab4c7d 100755 --- a/sandbox/start-sandbox +++ b/sandbox/start-sandbox @@ -113,6 +113,10 @@ make_sandbox() { echo "query_cache_size=$QUERY_CACHE_SIZE" >> /tmp/$port/my.sandbox.cnf fi + if [ -n "$EXTRA_DEFAULTS_FILE" ]; then + cat "$EXTRA_DEFAULTS_FILE" >> /tmp/$port/my.sandbox.cnf + fi + # If the sandbox is a slave, set it read_only. if [ "$type" = "slave" ]; then echo "read_only" >> /tmp/$port/my.sandbox.cnf diff --git a/t/pt-table-checksum/create_replicate_table.t b/t/pt-table-checksum/create_replicate_table.t index fff69ebf..2a40fb5a 100644 --- a/t/pt-table-checksum/create_replicate_table.t +++ b/t/pt-table-checksum/create_replicate_table.t @@ -80,7 +80,7 @@ my $create_repl_table = this_cnt int NOT NULL, master_crc char(40) NULL, master_cnt int NULL, - ts timestamp NOT NULL, + ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db, tbl, chunk) ) ENGINE=InnoDB;"; diff --git a/t/pt-table-checksum/samples/checksum_tbl_truncated.sql b/t/pt-table-checksum/samples/checksum_tbl_truncated.sql index 9eb7be5a..2542d412 100644 --- a/t/pt-table-checksum/samples/checksum_tbl_truncated.sql +++ b/t/pt-table-checksum/samples/checksum_tbl_truncated.sql @@ -12,6 +12,6 @@ CREATE TABLE truncated_checksums ( this_cnt int NOT NULL, master_crc char(40) NULL, master_cnt int NULL, - ts timestamp NOT NULL, + ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db, tbl, chunk) ) ENGINE=InnoDB; diff --git a/t/pt-table-checksum/samples/explicit_defaults_for_timestamp.cnf b/t/pt-table-checksum/samples/explicit_defaults_for_timestamp.cnf new file mode 100644 index 00000000..665eba46 --- /dev/null +++ b/t/pt-table-checksum/samples/explicit_defaults_for_timestamp.cnf @@ -0,0 +1 @@ +explicit_defaults_for_timestamp=ON diff --git a/t/pt-table-checksum/settings.t b/t/pt-table-checksum/settings.t new file mode 100644 index 00000000..a5827228 --- /dev/null +++ b/t/pt-table-checksum/settings.t @@ -0,0 +1,57 @@ +#!/usr/bin/env perl + +BEGIN { + die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n" + unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH}; + unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib"; +}; + +use strict; +use warnings FATAL => 'all'; +use English qw(-no_match_vars); +use Test::More; + +use PerconaTest; +use Sandbox; +require "$trunk/bin/pt-table-checksum"; + +if ( $sandbox_version lt '5.6' ) { + plan skip_all => 'Tests for MySQL 5.6'; +} + +diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`); +diag(`EXTRA_DEFAULTS_FILE="$trunk/t/pt-table-checksum/samples/explicit_defaults_for_timestamp.cnf" $trunk/sandbox/start-sandbox master 12348 >/dev/null`); + +my $dp = new DSNParser(opts=>$dsn_opts); +my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp); +my $master_dbh = $sb->get_dbh_for('master1'); + +if ( !$master_dbh ) { + plan skip_all => 'Cannot connect to sandbox master 12348'; +} + +my $master_dsn = 'h=127.1,P=12348,u=msandbox,p=msandbox'; +my @args = ($master_dsn, '--max-load', ''); +my $output; +my $retval; + +$output = output( + sub { $retval = pt_table_checksum::main(@args, qw(-t mysql.user)) }, + stderr => 1, +); + +unlike( + $output, + qr/error 1364/i, + "explicit_defaults_for_timestamp (bug 1163735): no error" +); + +# Exit will be non-zero because of "Diffs cannot be detected because +# no slaves were found." + +# ############################################################################# +# Done. +# ############################################################################# +diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`); +ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); +done_testing;