pt-table-checksum error: DBD::mysql::st execute failed: called with 2 bind variables when 6 are needed

Bug #916999 reported by James Byers
26
This bug affects 4 people
Affects Status Importance Assigned to Milestone
Percona Toolkit moved to https://jira.percona.com/projects/PT
Fix Released
Medium
Daniel Nichter

Bug Description

pt-table-checksum 2.0.2 (MySQL 5.1.53) fails on all tables that require checksumming. Errors show an incorrect numbers of bound parameters in explains. Below is a representative case on our dataset with a table containing ~300K rows.

I've redacted the slave detection, table, and database filtering portion of PTDEBUG as it's got some sensitive information and doesn't appear relevant. I'm happy to clean this up and add if needed.

show create table user_rename;
CREATE TABLE `user_rename` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `old_username` varchar(32) DEFAULT NULL,
  `new_username` varchar(32) DEFAULT NULL,
  `user_created` int(11) DEFAULT NULL,
  `date_created` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `user_created` (`user_created`),
  KEY `old_username` (`old_username`),
  CONSTRAINT `user_rename_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  CONSTRAINT `user_rename_ibfk_2` FOREIGN KEY (`user_created`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=653945 DEFAULT CHARSET=utf8;

./mysql/percona-toolkit/bin/pt-table-checksum \
  --databases=percona_test \
  --no-check-replication-filters \
  --replicate=percona_test.checksums \
  --tables=user_rename \
  h=localhost.localdomain,u=testuser,p=testpass
01-16T01:14:28 Error executing EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/: DBD::mysql::st execute failed: called with 2 bind variables when 6 are needed [for Statement "EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/" with ParamValues: 0=Null!, 1=Null!, 2=Null!, 3=Null!, 4=Null!, 5=Null!] at ./mysql/percona-toolkit/bin/pt-table-checksum line 7181.

01-16T01:14:28 Aborting percona_test.user_rename because 1 cannot be nibbled safely.
            TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
01-16T01:14:28 2 0 0 0 0 0.067 percona_test.user_rename

# /usr/bin/perl 5.008008
# Linux localhost.localdomain 2.6.18-274.17.1.el5 #1 SMP Wed Jan 4 22:45:44 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
# Arguments: _[--databases=percona_test]_ _[--no-check-replication-filters]_ _[--replicate=percona_test.checksums]_ _[--tables=user_rename]_ _[h=localhost.localdomain,u=testuser,p=testpass]_
# OptionParser:548 23464 Option rule: This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details.
# OptionParser:557 23464 =item --ask-pass
# OptionParser:584 23464 Short help: Prompt for a password when connecting to MySQL
# OptionParser:557 23464 =item --check-interval
# OptionParser:584 23464 Short help: Sleep time between checks for --max-lag
# OptionParser:557 23464 =item --[no]check-replication-filters
# OptionParser:584 23464 Short help: Do not checksum if any replication filters are set on any replicas
# OptionParser:557 23464 =item --check-slave-lag
# OptionParser:584 23464 Short help: Pause checksumming until this replica's lag is less than --max-lag
# OptionParser:557 23464 =item --chunk-index
# OptionParser:584 23464 Short help: Prefer this index for chunking tables
# OptionParser:557 23464 =item --chunk-size
# OptionParser:584 23464 Short help: Number of rows to select for each checksum query
# OptionParser:557 23464 =item --chunk-size-limit
# OptionParser:584 23464 Short help: Do not checksum chunks this much larger than the desired chunk size
# OptionParser:557 23464 =item --chunk-time
# OptionParser:584 23464 Short help: Adjust the chunk size dynamically so each checksum query takes this long to execute
# OptionParser:557 23464 =item --columns
# OptionParser:584 23464 Short help: Checksum only this comma-separated list of columns
# OptionParser:557 23464 =item --config
# OptionParser:584 23464 Short help: Read this comma-separated list of config files; if specified, this must be the first option on the command line
# OptionParser:557 23464 =item --[no]create-replicate-table
# OptionParser:584 23464 Short help: Create the --replicate database and table if they do not exist
# OptionParser:557 23464 =item --databases
# OptionParser:584 23464 Short help: Only checksum this comma-separated list of databases
# OptionParser:557 23464 =item --databases-regex
# OptionParser:584 23464 Short help: Only checksum databases whose names match this Perl regex
# OptionParser:557 23464 =item --defaults-file
# OptionParser:584 23464 Short help: Only read mysql options from the given file
# OptionParser:557 23464 =item --[no]empty-replicate-table
# OptionParser:584 23464 Short help: Delete previous checksums for each table before checksumming the table
# OptionParser:557 23464 =item --engines
# OptionParser:584 23464 Short help: Only checksum tables which use these storage engines
# OptionParser:557 23464 =item --explain
# OptionParser:584 23464 Short help: Show, but do not execute, checksum queries (disables --[no]empty-replicate-table)
# OptionParser:557 23464 =item --float-precision
# OptionParser:584 23464 Short help: Precision for FLOAT and DOUBLE number-to-string conversion
# OptionParser:557 23464 =item --function
# OptionParser:584 23464 Short help: Hash function for checksums (FNV1A_64, MURMUR_HASH, SHA1, MD5, CRC32, etc)
# OptionParser:557 23464 =item --help
# OptionParser:584 23464 Short help: Show help and exit
# OptionParser:557 23464 =item --host
# OptionParser:584 23464 Short help: Host to connect to
# OptionParser:557 23464 =item --ignore-columns
# OptionParser:584 23464 Short help: Ignore this comma-separated list of columns when calculating the checksum
# OptionParser:557 23464 =item --ignore-databases
# OptionParser:584 23464 Short help: Ignore this comma-separated list of databases
# OptionParser:557 23464 =item --ignore-databases-regex
# OptionParser:584 23464 Short help: Ignore databases whose names match this Perl regex
# OptionParser:557 23464 =item --ignore-engines
# OptionParser:584 23464 Short help: Ignore this comma-separated list of storage engines
# OptionParser:557 23464 =item --ignore-tables
# OptionParser:584 23464 Short help: Ignore this comma-separated list of tables
# OptionParser:557 23464 =item --ignore-tables-regex
# OptionParser:584 23464 Short help: Ignore tables whose names match the Perl regex
# OptionParser:557 23464 =item --lock-wait-timeout
# OptionParser:584 23464 Short help: Set the session value of the innodb_lock_wait_timeout variable on the master host
# OptionParser:557 23464 =item --max-lag
# OptionParser:584 23464 Short help: Pause checksumming until all replicas' lag is less than this value
# OptionParser:557 23464 =item --max-load
# OptionParser:584 23464 Short help: Examine SHOW GLOBAL STATUS after every chunk, and pause if any status variables are higher than the threshold
# OptionParser:557 23464 =item --password
# OptionParser:584 23464 Short help: Password to use when connecting
# OptionParser:557 23464 =item --pid
# OptionParser:584 23464 Short help: Create the given PID file
# OptionParser:557 23464 =item --port
# OptionParser:584 23464 Short help: Port number to use for connection
# OptionParser:557 23464 =item --progress
# OptionParser:584 23464 Short help: Print progress reports to STDERR
# OptionParser:557 23464 =item --quiet
# OptionParser:584 23464 Short help: Print only the most important information (disables --progress)
# OptionParser:557 23464 =item --recurse
# OptionParser:584 23464 Short help: Number of levels to recurse in the hierarchy when discovering replicas
# OptionParser:557 23464 =item --recursion-method
# OptionParser:584 23464 Short help: Preferred recursion method for discovering replicas
# OptionParser:557 23464 =item --replicate
# OptionParser:584 23464 Short help: Write checksum results to this table
# OptionParser:557 23464 =item --[no]replicate-check
# OptionParser:584 23464 Short help: Check replicas for data differences after finishing each table
# OptionParser:557 23464 =item --replicate-check-only
# OptionParser:576 23464 Option has no attributes
# OptionParser:584 23464 Short help: Check replicas for consistency without executing checksum queries
# OptionParser:557 23464 =item --replicate-database
# OptionParser:584 23464 Short help: USE only this database
# OptionParser:557 23464 =item --resume
# OptionParser:576 23464 Option has no attributes
# OptionParser:584 23464 Short help: Resume checksumming from the last completed chunk (disables --[no]empty-replicate-table)
# OptionParser:557 23464 =item --retries
# OptionParser:584 23464 Short help: Retry a chunk this many times when there is a nonfatal error
# OptionParser:557 23464 =item --separator
# OptionParser:584 23464 Short help: The separator character used for CONCAT_WS()
# OptionParser:557 23464 =item --set-vars
# OptionParser:584 23464 Short help: Set these MySQL variables
# OptionParser:557 23464 =item --socket
# OptionParser:584 23464 Short help: Socket file to use for connection
# OptionParser:557 23464 =item --tables
# OptionParser:584 23464 Short help: Checksum only this comma-separated list of tables
# OptionParser:557 23464 =item --tables-regex
# OptionParser:584 23464 Short help: Checksum only tables whose names match this Perl regex
# OptionParser:557 23464 =item --trim
# OptionParser:576 23464 Option has no attributes
# OptionParser:584 23464 Short help: Add TRIM() to VARCHAR columns (helps when comparing 4.1 to >= 5.0)
# OptionParser:557 23464 =item --user
# OptionParser:584 23464 Short help: User for login if not current user
# OptionParser:557 23464 =item --version
# OptionParser:584 23464 Short help: Show version and exit
# OptionParser:557 23464 =item --where
# OptionParser:584 23464 Short help: Do only rows matching this WHERE clause
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => ask-pass desc => Prompt for a password when connecting to MySQL
# OptionParser:661 23464 ask-pass type: undef
# OptionParser:623 23464 Parsing opt spec: group => Throttle spec => check-interval=m desc => Sleep time between checks for --max-lag (default 1)
# OptionParser:661 23464 check-interval type: m
# OptionParser:668 23464 check-interval default: 1
# OptionParser:623 23464 Parsing opt spec: group => Safety spec => check-replication-filters! desc => Do not checksum if any replication filters are set on any replicas (default yes)
# OptionParser:661 23464 check-replication-filters type: undef
# OptionParser:668 23464 check-replication-filters default: yes
# OptionParser:623 23464 Parsing opt spec: group => Throttle spec => check-slave-lag=s desc => Pause checksumming until this replica's lag is less than --max-lag
# OptionParser:661 23464 check-slave-lag type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => chunk-index=s desc => Prefer this index for chunking tables
# OptionParser:661 23464 chunk-index type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => chunk-size=z desc => Number of rows to select for each checksum query (default 1000)
# OptionParser:661 23464 chunk-size type: z
# OptionParser:668 23464 chunk-size default: 1000
# OptionParser:623 23464 Parsing opt spec: group => Safety spec => chunk-size-limit=f desc => Do not checksum chunks this much larger than the desired chunk size (default 2.0)
# OptionParser:661 23464 chunk-size-limit type: f
# OptionParser:668 23464 chunk-size-limit default: 2.0
# OptionParser:623 23464 Parsing opt spec: group => default spec => chunk-time=f desc => Adjust the chunk size dynamically so each checksum query takes this long to execute (default 0.5)
# OptionParser:661 23464 chunk-time type: f
# OptionParser:668 23464 chunk-time default: 0.5
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => columns|c=a desc => Checksum only this comma-separated list of columns
# OptionParser:661 23464 columns type: a
# OptionParser:623 23464 Parsing opt spec: group => Config spec => config=A desc => Read this comma-separated list of config files; if specified, this must be the first option on the command line
# OptionParser:661 23464 config type: A
# OptionParser:623 23464 Parsing opt spec: group => default spec => create-replicate-table! desc => Create the --replicate database and table if they do not exist (default yes)
# OptionParser:661 23464 create-replicate-table type: undef
# OptionParser:668 23464 create-replicate-table default: yes
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => databases|d=h desc => Only checksum this comma-separated list of databases
# OptionParser:661 23464 databases type: h
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => databases-regex=s desc => Only checksum databases whose names match this Perl regex
# OptionParser:661 23464 databases-regex type: s
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => defaults-file|F=s desc => Only read mysql options from the given file
# OptionParser:661 23464 defaults-file type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => empty-replicate-table! desc => Delete previous checksums for each table before checksumming the table (default yes)
# OptionParser:661 23464 empty-replicate-table type: undef
# OptionParser:668 23464 empty-replicate-table default: yes
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => engines|e=h desc => Only checksum tables which use these storage engines
# OptionParser:661 23464 engines type: h
# OptionParser:623 23464 Parsing opt spec: group => Output spec => explain+ desc => Show, but do not execute, checksum queries (disables --[no]empty-replicate-table) (default 0)
# OptionParser:661 23464 explain type: undef
# OptionParser:668 23464 explain default: 0
# OptionParser:677 23464 Deferring check of disables rule for HASH(0xafe1a00) disables --[no]empty-replicate-table) (default 0)
# OptionParser:623 23464 Parsing opt spec: group => default spec => float-precision=i desc => Precision for FLOAT and DOUBLE number-to-string conversion
# OptionParser:661 23464 float-precision type: i
# OptionParser:623 23464 Parsing opt spec: group => default spec => function=s desc => Hash function for checksums (FNV1A_64, MURMUR_HASH, SHA1, MD5, CRC32, etc)
# OptionParser:661 23464 function type: s
# OptionParser:623 23464 Parsing opt spec: group => Help spec => help desc => Show help and exit
# OptionParser:661 23464 help type: undef
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => host|h=s desc => Host to connect to (default localhost)
# OptionParser:661 23464 host type: s
# OptionParser:668 23464 host default: localhost
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-columns=H desc => Ignore this comma-separated list of columns when calculating the checksum
# OptionParser:661 23464 ignore-columns type: H
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-databases=H desc => Ignore this comma-separated list of databases
# OptionParser:661 23464 ignore-databases type: H
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-databases-regex=s desc => Ignore databases whose names match this Perl regex
# OptionParser:661 23464 ignore-databases-regex type: s
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-engines=H desc => Ignore this comma-separated list of storage engines (default FEDERATED,MRG_MyISAM)
# OptionParser:661 23464 ignore-engines type: H
# OptionParser:668 23464 ignore-engines default: FEDERATED,MRG_MyISAM
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-tables=H desc => Ignore this comma-separated list of tables
# OptionParser:661 23464 ignore-tables type: H
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => ignore-tables-regex=s desc => Ignore tables whose names match the Perl regex
# OptionParser:661 23464 ignore-tables-regex type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => lock-wait-timeout=i desc => Set the session value of the innodb_lock_wait_timeout variable on the master host (default 1)
# OptionParser:661 23464 lock-wait-timeout type: i
# OptionParser:668 23464 lock-wait-timeout default: 1
# OptionParser:623 23464 Parsing opt spec: group => Throttle spec => max-lag=m desc => Pause checksumming until all replicas' lag is less than this value (default 1s)
# OptionParser:661 23464 max-lag type: m
# OptionParser:668 23464 max-lag default: 1s
# OptionParser:623 23464 Parsing opt spec: group => Throttle spec => max-load=A desc => Examine SHOW GLOBAL STATUS after every chunk, and pause if any status variables are higher than the threshold (default Threads_running=25)
# OptionParser:661 23464 max-load type: A
# OptionParser:668 23464 max-load default: Threads_running=25
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => password|p=s desc => Password to use when connecting
# OptionParser:661 23464 password type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => pid=s desc => Create the given PID file
# OptionParser:661 23464 pid type: s
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => port|P=i desc => Port number to use for connection
# OptionParser:661 23464 port type: i
# OptionParser:623 23464 Parsing opt spec: group => default spec => progress=a desc => Print progress reports to STDERR (default time,30)
# OptionParser:661 23464 progress type: a
# OptionParser:668 23464 progress default: time,30
# OptionParser:623 23464 Parsing opt spec: group => default spec => quiet|q+ desc => Print only the most important information (disables --progress) (default 0)
# OptionParser:661 23464 quiet type: undef
# OptionParser:668 23464 quiet default: 0
# OptionParser:677 23464 Deferring check of disables rule for HASH(0xaffc6c0) disables --progress) (default 0)
# OptionParser:623 23464 Parsing opt spec: group => default spec => recurse=i desc => Number of levels to recurse in the hierarchy when discovering replicas
# OptionParser:661 23464 recurse type: i
# OptionParser:623 23464 Parsing opt spec: group => default spec => recursion-method=s desc => Preferred recursion method for discovering replicas
# OptionParser:661 23464 recursion-method type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => replicate=s desc => Write checksum results to this table (default percona.checksums)
# OptionParser:661 23464 replicate type: s
# OptionParser:668 23464 replicate default: percona.checksums
# OptionParser:623 23464 Parsing opt spec: group => default spec => replicate-check! desc => Check replicas for data differences after finishing each table (default yes)
# OptionParser:661 23464 replicate-check type: undef
# OptionParser:668 23464 replicate-check default: yes
# OptionParser:623 23464 Parsing opt spec: group => default spec => replicate-check-only desc => Check replicas for consistency without executing checksum queries
# OptionParser:661 23464 replicate-check-only type: undef
# OptionParser:623 23464 Parsing opt spec: group => default spec => replicate-database=s desc => USE only this database
# OptionParser:661 23464 replicate-database type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => resume desc => Resume checksumming from the last completed chunk (disables --[no]empty-replicate-table)
# OptionParser:661 23464 resume type: undef
# OptionParser:677 23464 Deferring check of disables rule for HASH(0xaffc4c0) disables --[no]empty-replicate-table)
# OptionParser:623 23464 Parsing opt spec: group => default spec => retries=i desc => Retry a chunk this many times when there is a nonfatal error (default 2)
# OptionParser:661 23464 retries type: i
# OptionParser:668 23464 retries default: 2
# OptionParser:623 23464 Parsing opt spec: group => default spec => separator=s desc => The separator character used for CONCAT_WS() (default #)
# OptionParser:661 23464 separator type: s
# OptionParser:668 23464 separator default: #
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => set-vars=s desc => Set these MySQL variables (default wait_timeout=10000)
# OptionParser:661 23464 set-vars type: s
# OptionParser:668 23464 set-vars default: wait_timeout=10000
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => socket|S=s desc => Socket file to use for connection
# OptionParser:661 23464 socket type: s
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => tables|t=h desc => Checksum only this comma-separated list of tables
# OptionParser:661 23464 tables type: h
# OptionParser:623 23464 Parsing opt spec: group => Filter spec => tables-regex=s desc => Checksum only tables whose names match this Perl regex
# OptionParser:661 23464 tables-regex type: s
# OptionParser:623 23464 Parsing opt spec: group => default spec => trim desc => Add TRIM() to VARCHAR columns (helps when comparing 4.1 to >= 5.0)
# OptionParser:661 23464 trim type: undef
# OptionParser:623 23464 Parsing opt spec: group => Connection spec => user|u=s desc => User for login if not current user
# OptionParser:661 23464 user type: s
# OptionParser:623 23464 Parsing opt spec: group => Help spec => version desc => Show version and exit
# OptionParser:661 23464 version type: undef
# OptionParser:623 23464 Parsing opt spec: group => default spec => where=s desc => Do only rows matching this WHERE clause
# OptionParser:661 23464 where type: s
# OptionParser:683 23464 Parsing rule: This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details.
# OptionParser:739 23464 Participants for This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details. :
# OptionParser:715 23464 Strict mode disabled by rule
# OptionParser:739 23464 Participants for disables --[no]empty-replicate-table) : empty-replicate-table
# OptionParser:725 23464 Option resume disables empty-replicate-table
# OptionParser:739 23464 Participants for disables --progress) (default 0) : progress
# OptionParser:725 23464 Option quiet disables progress
# OptionParser:739 23464 Participants for disables --[no]empty-replicate-table) (default 0) : empty-replicate-table
# OptionParser:725 23464 Option explain disables empty-replicate-table
# OptionParser:467 23464 Parsing DSN OPTIONS
# OptionParser:557 23464 =item * A
# OptionParser:584 23464 Short help: Default character set
# OptionParser:557 23464 =item * D
# OptionParser:584 23464 Short help: DSN table database
# OptionParser:557 23464 =item * F
# OptionParser:584 23464 Short help: Only read default options from the given file
# OptionParser:557 23464 =item * h
# OptionParser:584 23464 Short help: Connect to host
# OptionParser:557 23464 =item * p
# OptionParser:584 23464 Short help: Password to use when connecting
# OptionParser:557 23464 =item * P
# OptionParser:584 23464 Short help: Port number to use for connection
# OptionParser:557 23464 =item * S
# OptionParser:584 23464 Short help: Socket file to use for connection
# OptionParser:557 23464 =item * t
# OptionParser:584 23464 Short help: DSN table table
# OptionParser:557 23464 =item * u
# OptionParser:584 23464 Short help: User for login if not current user
# DSNParser:50 23464 DSN option: copy=1, dsn=charset, desc=Default character set, key=A
# DSNParser:50 23464 DSN option: copy=, dsn=undef, desc=DSN table database, key=D
# DSNParser:50 23464 DSN option: copy=, dsn=mysql_read_default_file, desc=Only read default options from the given file, key=F
# DSNParser:50 23464 DSN option: copy=1, dsn=host, desc=Connect to host, key=h
# DSNParser:50 23464 DSN option: copy=1, dsn=password, desc=Password to use when connecting, key=p
# DSNParser:50 23464 DSN option: copy=1, dsn=port, desc=Port number to use for connection, key=P
# DSNParser:50 23464 DSN option: copy=, dsn=mysql_socket, desc=Socket file to use for connection, key=S
# DSNParser:50 23464 DSN option: copy=, dsn=undef, desc=DSN table table, key=t
# DSNParser:50 23464 DSN option: copy=1, dsn=user, desc=User for login if not current user, key=u
# OptionParser:511 23464 pt-table-checksum 2.0.2
# OptionParser:823 23464 Cannot open /etc/percona-toolkit/percona-toolkit.conf: No such file or directory
#
# OptionParser:823 23464 Cannot open /etc/percona-toolkit/pt-table-checksum.conf: No such file or directory
#
# OptionParser:823 23464 Cannot open /home/mysql/.percona-toolkit.conf: No such file or directory
#
# OptionParser:823 23464 Cannot open /home/mysql/.pt-table-checksum.conf: No such file or directory
#
# OptionParser:791 23464 Got option databases = percona_test
# OptionParser:791 23464 Got option check-replication-filters = 0
# OptionParser:791 23464 Got option replicate = percona_test.checksums
# OptionParser:791 23464 Got option tables = user_rename
# OptionParser:1011 23464 Nothing to validate for option ignore-tables-regex type s value undef
# OptionParser:1001 23464 Parsing option chunk-size as a size value
# OptionParser:1011 23464 Nothing to validate for option recursion-method type s value undef
# OptionParser:1011 23464 Nothing to validate for option ignore-databases-regex type s value undef
# OptionParser:1011 23464 Nothing to validate for option check-slave-lag type s value undef
# OptionParser:1011 23464 Nothing to validate for option chunk-index type s value undef
# OptionParser:1011 23464 Nothing to validate for option password type s value undef
# OptionParser:1011 23464 Nothing to validate for option pid type s value undef
# OptionParser:1011 23464 Nothing to validate for option replicate type s value percona_test.checksums
# OptionParser:1011 23464 Nothing to validate for option float-precision type i value undef
# OptionParser:1011 23464 Nothing to validate for option user type s value undef
# OptionParser:1011 23464 Nothing to validate for option chunk-time type f value 0.5
# OptionParser:1011 23464 Nothing to validate for option set-vars type s value wait_timeout=10000
# OptionParser:1011 23464 Nothing to validate for option port type i value undef
# OptionParser:1011 23464 Nothing to validate for option socket type s value undef
# OptionParser:1011 23464 Nothing to validate for option lock-wait-timeout type i value 1
# OptionParser:962 23464 Parsing option check-interval as a time value
# OptionParser:967 23464 No suffix given; using s for check-interval (value: 1 )
# OptionParser:976 23464 Setting option check-interval to 1
# OptionParser:1011 23464 Nothing to validate for option recurse type i value undef
# OptionParser:1011 23464 Nothing to validate for option columns type a value undef
# OptionParser:962 23464 Parsing option max-lag as a time value
# OptionParser:976 23464 Setting option max-lag to 1
# OptionParser:1011 23464 Nothing to validate for option replicate-database type s value undef
# OptionParser:1011 23464 Nothing to validate for option engines type h value undef
# OptionParser:1011 23464 Nothing to validate for option retries type i value 2
# OptionParser:1011 23464 Nothing to validate for option function type s value undef
# OptionParser:1011 23464 Nothing to validate for option databases-regex type s value undef
# OptionParser:1011 23464 Nothing to validate for option tables-regex type s value undef
# OptionParser:1011 23464 Nothing to validate for option chunk-size-limit type f value 2.0
# OptionParser:1011 23464 Nothing to validate for option where type s value undef
# OptionParser:1011 23464 Nothing to validate for option defaults-file type s value undef
# OptionParser:1011 23464 Nothing to validate for option host type s value localhost
# OptionParser:1011 23464 Nothing to validate for option separator type s value #
# DSNParser:66 23464 Setting set-vars property
# OptionParser:1085 23464 Getting description and usage from SYNOPSIS in ./mysql/percona-toolkit/bin/pt-table-checksum
# OptionParser:1338 23464 Parsing SYNOPSIS in ./mysql/percona-toolkit/bin/pt-table-checksum
# OptionParser:1351 23464 Raw SYNOPSIS text: Usage: pt-table-checksum [OPTION...] [DSN]
#
# pt-table-checksum performs an online replication consistency check by executing
# checksum queries on the master, which produces different results on replicas
# that are inconsistent with the master. The optional DSN specifies the master
# host. The tool's exit status is nonzero if any differences are found, or if any
# warnings or errors occur.
#
#
# OptionParser:1089 23464 Description: pt-table-checksum performs an online replication consistency check by executing checksum queries on the master, which produces different results on replicas that are inconsistent with the master. The optional DSN specifies the master host. The tool's exit status is nonzero if any differences are found, or if any warnings or errors occur.
# Usage: pt-table-checksum [OPTION...] [DSN]
# DSNParser:137 23464 DSN string made from options: h=localhost,t=HASH(0xaffbdf0)
# DSNParser:78 23464 Parsing h=localhost,t=HASH(0xaffbdf0)
# DSNParser:96 23464 Finding value for S
# DSNParser:106 23464 Copying value for S from defaults
# DSNParser:96 23464 Finding value for F
# DSNParser:106 23464 Copying value for F from defaults
# DSNParser:96 23464 Finding value for A
# DSNParser:106 23464 Copying value for A from defaults
# DSNParser:96 23464 Finding value for P
# DSNParser:106 23464 Copying value for P from defaults
# DSNParser:96 23464 Finding value for p
# DSNParser:106 23464 Copying value for p from defaults
# DSNParser:96 23464 Finding value for u
# DSNParser:106 23464 Copying value for u from defaults
# DSNParser:96 23464 Finding value for h
# DSNParser:96 23464 Finding value for D
# DSNParser:106 23464 Copying value for D from defaults
# DSNParser:96 23464 Finding value for t
# DSNParser:78 23464 Parsing h=localhost.localdomain,u=testuser,p=testpass
# DSNParser:96 23464 Finding value for S
# DSNParser:106 23464 Copying value for S from defaults
# DSNParser:96 23464 Finding value for F
# DSNParser:106 23464 Copying value for F from defaults
# DSNParser:96 23464 Finding value for A
# DSNParser:106 23464 Copying value for A from defaults
# DSNParser:96 23464 Finding value for P
# DSNParser:106 23464 Copying value for P from defaults
# DSNParser:96 23464 Finding value for p
# DSNParser:96 23464 Finding value for u
# DSNParser:96 23464 Finding value for h
# DSNParser:96 23464 Finding value for D
# DSNParser:106 23464 Copying value for D from defaults
# DSNParser:96 23464 Finding value for t
# DSNParser:106 23464 Copying value for t from defaults
# DSNParser:189 23464 DBI:mysql:;host=localhost.localdomain;mysql_read_default_group=client
# DSNParser:235 23464 DBI:mysql:;host=localhost.localdomain;mysql_read_default_group=client testuser testpass mysql_enable_utf8=>0, ShowErrorStatement=>1, AutoCommit=>1, RaiseError=>1, PrintError=>0
# DSNParser:244 23464 DBI::db=HASH(0xb161ed0) SELECT @@SQL_MODE
# DSNParser:251 23464 DBI::db=HASH(0xb161ed0) SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/
# DSNParser:270 23464 DBI::db=HASH(0xb161ed0) : SET wait_timeout=10000
# DSNParser:296 23464 DBH info: DBI::db=HASH(0xb161ed0) $VAR1 = {
# '@@hostname' => 'localhost.localdomain',
# 'CONNECTION_ID()' => '1944371640',
# 'DATABASE()' => undef,
# 'VERSION()' => '5.1.53-rel11.7-log'
# };
# Connection info: localhost.localdomain via TCP/IP Character set info: $VAR1 = [
# {
# Value => 'latin1',
# Variable_name => 'character_set_client'
# },
# {
# Value => 'latin1',
# Variable_name => 'character_set_connection'
# },
# {
# Value => 'latin1',
# Variable_name => 'character_set_database'
# },
# {
# Value => 'binary',
# Variable_name => 'character_set_filesystem'
# },
# {
# Value => 'latin1',
# Variable_name => 'character_set_results'
# },
# {
# Value => 'latin1',
# Variable_name => 'character_set_server'
# },
# {
# Value => 'utf8',
# Variable_name => 'character_set_system'
# },
# {
# Value => '/home/mysql/Percona-Server-5.1.53-rel11.7-151-Linux-x86_64/share/mysql/charsets/',
# Variable_name => 'character_sets_dir'
# }
# ];
# $DBD::mysql::VERSION: 4.014 $DBI::VERSION: 1.616
# Cxn:1461 23464 DBI::db=HASH(0xb161ed0) Connected dbh to undef
# Cxn:1474 23464 DBI::db=HASH(0xb161ed0) Setting dbh
# Cxn:1479 23464 DBI::db=HASH(0xb161ed0) SELECT @@hostname, @@server_id
# Cxn:1481 23464 DBI::db=HASH(0xb161ed0) hostname: localhost.localdomain 1
# pt_table_checksum:5886 23464 DBI::db=HASH(0xb161ed0) /*!50108 SET @@binlog_format := "STATEMENT"*/
# pt_table_checksum:5900 23464 DBI::db=HASH(0xb161ed0) SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
# pt_table_checksum:5918 23464 DBI::db=HASH(0xb161ed0) SHOW SESSION VARIABLES LIKE "innodb_lock_wait_timeout"
# pt_table_checksum:5920 23464 innodb_lock_wait_timeout 50
# pt_table_checksum:5924 23464 DBI::db=HASH(0xb161ed0) SET SESSION innodb_lock_wait_timeout=1
# MasterSlave:2456 23464 Slave recursion method: undef
# MasterSlave:2504 23464 Connected to h=localhost.localdomain,p=...,t=HASH(0xaffbdf0),u=testuser
# MasterSlave:2513 23464 SELECT @@SERVER_ID
# MasterSlave:2515 23464 Working on server ID 1
# MasterSlave:2559 23464 Looking for slaves on h=localhost.localdomain,p=...,t=HASH(0xaffbdf0),u=testuser using methods processlist hosts
#
#
#
# [redacted - happy to include as needed - jbyers]
#
#
#
# SchemaIterator:4774 23464 SHOW TABLE STATUS FROM `percona_test` LIKE 'user_rename'
# SchemaIterator:4776 23464 $VAR1 = {
# auto_increment => '653941',
# avg_row_length => '65',
# check_time => undef,
# checksum => undef,
# collation => 'utf8_general_ci',
# comment => '',
# create_options => '',
# create_time => '2010-12-23 00:00:20',
# data_free => '4194304',
# data_length => '19447808',
# engine => 'InnoDB',
# index_length => '26787840',
# max_data_length => '0',
# name => 'user_rename',
# row_format => 'Compact',
# rows => '295341',
# update_time => undef,
# version => '10'
# };
#
# TableParser:1778 23464 /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := REPLACE(REPLACE(@@SQL_MODE, 'ANSI_QUOTES', ''), ',,', ','), @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
# TableParser:1783 23464 DBI::db=HASH(0xb161ed0) USE `percona_test`
# TableParser:1787 23464 SHOW CREATE TABLE `percona_test`.`user_rename`
# TableParser:1797 23464 /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
# TableParser:1802 23464 This table is a base table
# TableParser:2011 23464 Storage engine: InnoDB
# TableParser:1832 23464 Table cols: `id`, `user_id`, `old_username`, `new_username`, `user_created`, `date_created`
# TableParser:2011 23464 Storage engine: InnoDB
# TableParser:2027 23464 Parsed key: PRIMARY KEY (`id`),
# TableParser:2053 23464 PRIMARY key cols: `id`
# TableParser:2075 23464 This key is the clustered key
# TableParser:2027 23464 Parsed key: KEY `user_id` (`user_id`),
# TableParser:2053 23464 user_id key cols: `user_id`
# TableParser:2027 23464 Parsed key: KEY `user_created` (`user_created`),
# TableParser:2053 23464 user_created key cols: `user_created`
# TableParser:2027 23464 Parsed key: KEY `old_username` (`old_username`),
# TableParser:2053 23464 old_username key cols: `old_username`
# SchemaIterator:4655 23464 Next schema object: percona_test user_rename
# RowChecksum:3224 23464 Checksum strat: $VAR1 = {
# crc_type => 'int',
# crc_width => 16,
# func => 'CRC32',
# opt_slice => undef
# };
#
# RowChecksum:3206 23464 Row checksum: CRC32(CONCAT_WS('#', `id`, `user_id`, `old_username`, `new_username`, `user_created`, `date_created`, CONCAT(ISNULL(`old_username`), ISNULL(`new_username`), ISNULL(`user_created`), ISNULL(`date_created`))))
# RowChecksum:3245 23464 Chunk checksum: COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `user_id`, `old_username`, `new_username`, `user_created`, `date_created`, CONCAT(ISNULL(`old_username`), ISNULL(`new_username`), ISNULL(`user_created`), ISNULL(`date_created`)))) AS UNSIGNED)), 10, 16)), 0) AS crc
# NibbleIterator:3955 23464 No WHERE clause, using table status for row estimate
# NibbleIterator:3534 23464 One nibble: no
# NibbleIterator:3886 23464 Auto-selecting best index
# TableParser:1893 23464 Indexes sorted best-first: PRIMARY, user_id, old_username, user_created
# NibbleIterator:3919 23464 Best index: PRIMARY
# TableNibbler:2202 23464 Will ascend index PRIMARY
# TableNibbler:2209 23464 Will ascend columns id
# TableNibbler:2220 23464 Will ascend, in ordinal position: 0
# NibbleIterator:3590 23464 Ascend params: $VAR1 = {
# boundaries => {
# '<' => '((`id` < ?))',
# '<=' => '((`id` <= ?))',
# '>' => '((`id` > ?))',
# '>=' => '((`id` >= ?))'
# },
# cols => [
# 'id',
# 'user_id',
# 'old_username',
# 'new_username',
# 'user_created',
# 'date_created'
# ],
# index => 'PRIMARY',
# scols => [
# 'id'
# ],
# slice => [
# 0
# ],
# where => '((`id` > ?))'
# };
#
# NibbleIterator:3603 23464 First lower boundary statement: SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) ORDER BY `id` LIMIT 1 /*first lower boundary*/
# NibbleIterator:3628 23464 Last upper boundary statement: SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) ORDER BY `id` DESC LIMIT 1 /*last upper boundary*/
# NibbleIterator:3639 23464 Upper boundary statement: SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/
# NibbleIterator:3651 23464 Nibble statement: REPLACE INTO `percona_test`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT ?, ?, ?, ?, ?, ?, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `user_id`, `old_username`, `new_username`, `user_created`, `date_created`, CONCAT(ISNULL(`old_username`), ISNULL(`new_username`), ISNULL(`user_created`), ISNULL(`date_created`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) AND ((`id` <= ?)) /*checksum chunk*/
# NibbleIterator:3663 23464 Explain nibble statement: EXPLAIN SELECT COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `user_id`, `old_username`, `new_username`, `user_created`, `date_created`, CONCAT(ISNULL(`old_username`), ISNULL(`new_username`), ISNULL(`user_created`), ISNULL(`date_created`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) AND ((`id` <= ?)) /*explain checksum chunk*/
# NibbleIterator:3666 23464 Initial chunk size (LIMIT): 999
# OobNibbleIterator:4182 23464 Past lower statement: REPLACE INTO `percona_test`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT ?, ?, ?, ?, ?, ?, COUNT(*), '0' FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` < ?)) ORDER BY `id` /*past lower chunk*/
# OobNibbleIterator:4192 23464 Past lower statement: EXPLAIN SELECT COUNT(*), '0' FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` < ?)) ORDER BY `id` /*explain past lower chunk*/
# OobNibbleIterator:4199 23464 Past upper statement: REPLACE INTO `percona_test`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT ?, ?, ?, ?, ?, ?, COUNT(*), '0' FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` > ?)) ORDER BY `id` /*past upper chunk*/
# OobNibbleIterator:4209 23464 Past upper statement: EXPLAIN SELECT COUNT(*), '0' FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` > ?)) ORDER BY `id` /*explain past upper chunk*/
# OobNibbleIterator:4225 23464 Nibble past lower upper
# OobNibbleIterator:4251 23464 Preparing out-of-bound statement handles
# NibbleIterator:3962 23464 Preparing statement handles
# NibbleIterator:3990 23464 First lower boundary: $VAR1 = [
# '9'
# ];
#
# NibbleIterator:4006 23464 Next lower boundary: $VAR1 = [
# '9'
# ];
#
# NibbleIterator:4014 23464 Last upper boundary: $VAR1 = [
# '653939'
# ];
#
# pt_table_checksum:7098 23464 use_repl_db
# pt_table_checksum:7119 23464 USE `percona_test`
# pt_table_checksum:6341 23464 DELETE FROM `percona_test`.`checksums` WHERE db = ? AND tbl = ?
# pt_table_checksum:7098 23464 use_repl_db
# pt_table_checksum:7119 23464 USE `percona_test`
# NibbleIterator:3717 23464 init callback returned 1
# pt_table_checksum:7180 23464 EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/ params: 9 1000
01-16T00:46:58 Error executing EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/: DBD::mysql::st execute failed: called with 2 bind variables when 6 are needed [for Statement "EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/" with ParamValues: 0=Null!, 1=Null!, 2=Null!, 3=Null!, 4=Null!, 5=Null!] at ./mysql/percona-toolkit/bin/pt-table-checksum line 7181.

# pt_table_checksum:7190 23464 EXPLAIN plan: $VAR1 = undef;
#
# pt_table_checksum:6380 23464 Cannot nibble next chunk, aborting table
01-16T00:46:58 Aborting percona_test.user_rename because 1 cannot be nibbled safely.
# NibbleIterator:4058 23464 next_boundaries callback returned 0
# NibbleIterator:3758 23464 Done nibbling
            TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
01-16T00:46:58 2 0 0 0 0 0.013 percona_test.user_rename
# OobNibbleIterator:4300 23464 Finish nibble_sth
# OobNibbleIterator:4300 23464 Finish ub_sth
# OobNibbleIterator:4300 23464 Finish past_lower_sth
# OobNibbleIterator:4300 23464 Finish explain_past_lower_sth
# OobNibbleIterator:4300 23464 Finish explain_past_upper_sth
# OobNibbleIterator:4300 23464 Finish explain_nibble_sth
# OobNibbleIterator:4300 23464 Finish explain_ub_sth
# OobNibbleIterator:4300 23464 Finish past_upper_sth
# SchemaIterator:4730 23464 Getting next schema object from dbh DBI::db=HASH(0xb161ed0)
# SchemaIterator:4795 23464 No more tables in database percona_test
# SchemaIterator:4730 23464 Getting next schema object from dbh DBI::db=HASH(0xb161ed0)
# SchemaIterator:4745 23464 Next database: undef
# pt_table_checksum:6756 23464 Exit status 1 oktorun 1
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xb21bff0) undef
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xb2169e0) undef
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xb216150) undef
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xad70d50) undef
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xad718c0) undef
# Cxn:1514 23464 Disconnecting dbh DBI::db=HASH(0xb161ed0) undef

Changed in percona-toolkit:
status: New → Confirmed
importance: Undecided → Medium
assignee: nobody → Daniel Nichter (daniel-nichter)
Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

Interesting bug. It should work perfectly, of course. I think something lower-level than the tool is breaking because we see:

# pt_table_checksum:7180 23464 EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/ params: 9 1000

01-16T00:46:58 Error executing EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/: DBD::mysql::st execute failed: called with 2 bind variables when 6 are needed [for Statement "EXPLAIN SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `percona_test`.`user_rename` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/" with ParamValues: 0=Null!, 1=Null!, 2=Null!, 3=Null!, 4=Null!, 5=Null!] at ./mysql/percona-toolkit/bin/pt-table-checksum line 7181.

That statement has 2 params and the error message itself says "called with 2 bind variables when 6 are needed" yet it clearly does not need 6. Furthermore, the first debug statement shows it should be using values 9 and 1000, but the error message says all 6 vals are Null/undef.

It's like DBD::mysql is confused about the statement. You have $DBD::mysql::VERSION: 4.014 which is very close to my DBD::mysql 4.018. I'll try to reproduce this problem.

tags: added: crash pt-table-checksum
Changed in percona-toolkit:
milestone: none → 2.0.4
Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

James, we found the problem: DBD::mysql 4.014. upgrading (or even downgrading) one version will fix this problem. It's a bug in DBD::mysql 4.014.

summary: - pt-table-checksum chunking fails
+ pt-table-checksum error: DBD::mysql::st execute failed: called with 2
+ bind variables when 6 are needed
tags: added: dbd-mysql
Changed in percona-toolkit:
status: Confirmed → Fix Released
Revision history for this message
Baron Schwartz (baron-xaprb) wrote :

This isn't "fix released" because 2.0.4 isn't released; changing to "fix committed" status

Changed in percona-toolkit:
status: Fix Released → Fix Committed
Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

I think it is "fixed released" because the problem is not in pt-table-checksum and the user can fix the problem now, even with pt-table-checksum 2.0.3, by not using DBD::mysql 4.014.

Revision history for this message
Baron Schwartz (baron-xaprb) wrote :

Gotcha. In that case it should probably be WontFix or something like that. Also, can we make pt-table-checksum throw an error message if this particular version of DBD::mysql is installed?

Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

Yes, it should die if DBD::mysql 4.014 is installed because the tool won't work anyway. Changed to Triaged and until I add the check-and-die.

Changed in percona-toolkit:
status: Fix Committed → Triaged
Changed in percona-toolkit:
status: Triaged → In Progress
Revision history for this message
Daniel Nichter (daniel-nichter) wrote :

New error if DBD::mysql 4.014 is installed:

"DBD::mysql v4.014 is installed, but it has as bug which causes pt-table-checksum to fail. Please upgrade DBD::mysql to any newer version."

Changed in percona-toolkit:
status: In Progress → Fix Committed
Changed in percona-toolkit:
status: Fix Committed → Fix Released
Revision history for this message
Shahriyar Rzayev (rzayev-sehriyar) wrote :

Percona now uses JIRA for bug reports so this bug report is migrated to: https://jira.percona.com/browse/PT-451

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.