目前我正在研究 Percona 的 xtrabackup。在“在复制环境中进行备份”段落中的手册中,它说--safe-slave-backup
始终建议使用该选项,我理解其背后的原因。
我现在只是想知道,当我不使用此选项时,结果是否真的有所不同。在备份上应用日志后,我不明白为什么使用或不使用此选项进行的备份会有区别。
我在问,因为在我们的生产环境中我们不使用这个选项。备份在午夜运行,但今晚失败了。备份是在从服务器上进行的,我对现在停止 SQL 线程来进行备份有一种不好的感觉。
目前我正在研究 Percona 的 xtrabackup。在“在复制环境中进行备份”段落中的手册中,它说--safe-slave-backup
始终建议使用该选项,我理解其背后的原因。
我现在只是想知道,当我不使用此选项时,结果是否真的有所不同。在备份上应用日志后,我不明白为什么使用或不使用此选项进行的备份会有区别。
我在问,因为在我们的生产环境中我们不使用这个选项。备份在午夜运行,但今晚失败了。备份是在从服务器上进行的,我对现在停止 SQL 线程来进行备份有一种不好的感觉。
我试图弄清楚为什么在我的 xtrabackup 文件上应用日志不起作用。
我创建了一个运行 MySQL 5.5.24 的 VM。然后我创建了 sakila 测试数据库并使用以下命令对其进行备份:
innobackupex --user=bckuser --password=XXXX --no-timestamp --compress /var/lib/mysql/dumps/backup/;
这成功地完成了。之后我想用这个命令应用日志:
innobackupex --user=bckuser --password=XXXX --apply-log /var/lib/mysql/dumps/backup/;
但我收到以下错误:
140912 21:46:19 innobackupex: Starting ibbackup with command: xtrabackup_55 --defaults-file="/var/lib/mysql/dumps/backup/backup-my.cnf" --defaults-group="mysqld" --prepare --target-dir=/var/lib/mysql/dumps/backup --tmpdir=/tmp
xtrabackup_55 version 2.1.9 for Percona Server 5.5.35 Linux (x86_64) (revision id: 746)
xtrabackup: cd to /var/lib/mysql/dumps/backup
xtrabackup: This target seems to be not prepared yet.
xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(8564748)
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 1
xtrabackup: innodb_log_file_size = 2097152
xtrabackup: using the following InnoDB configuration for recovery:
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 1
xtrabackup: innodb_log_file_size = 2097152
xtrabackup: Starting InnoDB instance for recovery.
xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
140912 21:46:19 InnoDB: The InnoDB memory heap is disabled
140912 21:46:19 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140912 21:46:19 InnoDB: Compressed tables use zlib 1.2.3
140912 21:46:19 InnoDB: Initializing buffer pool, size = 100.0M
140912 21:46:19 InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
140912 21:46:19 InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
140912 21:46:20 InnoDB: Error: all log files must be created at the same time.
140912 21:46:20 InnoDB: All log files must be created also in database creation.
140912 21:46:20 InnoDB: If you want bigger or smaller log files, shut down the
140912 21:46:20 InnoDB: database and make sure there were no errors in shutdown.
140912 21:46:20 InnoDB: Then delete the existing log files. Edit the .cnf file
140912 21:46:20 InnoDB: and start the database again.
xtrabackup: innodb_init(): Error occured.
innobackupex: Error:
innobackupex: ibbackup failed at /usr/bin/innobackupex line 2560.
我用谷歌搜索了很多,但我无法找出问题所在。你们有什么想法吗?
我正在使用pt-show-grants在新服务器上创建我所有的 GRANTS,但是有很多旧的 GRANTS 引用不再存在的表,所以当我尝试在新服务器上应用 SQL 文件时出现错误.
有没有办法删除引用不再存在的表的 GRANTS?
我正在使用过滤器进行复制:
replicate-wild-do-table = test_slave.%
replicate-rewrite-db = test->test_slave
是否有一个选项可以在从站上为“pt-table-checksum”指定不同的数据库名称
pt-table-checksum --host=localhost --databases=test --max-load=Threads_connected:25 --no-check-replication-filters
编辑1:
mysql> SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test_slave';
+----------+
| COUNT(*) |
+----------+
| 145 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) FROM percona.checksums;
+----------+
| COUNT(*) |
+----------+
| 40 |
+----------+
1 row in set (0.00 sec)
编辑2:
# ls -l *.frm | wc -l
145
# ls -l | awk '{print $3,$4}' | uniq
mysql mysql
它还抱怨两个表没有索引并且过大。看起来它只是跳过了一些表?
我正在使用pt-table-checksum
版本2.1.4
来检查我的主从设置。如果我忘记在从机上设置正确的权限,它会写一个stderr
这样的错误:
# pt-table-checksum -d employees
Cannot connect to h=node03.mydomain.local <== error
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
10-04T15:33:33 0 0 9 1 0 0.014 employees.departments
[...]
但是,它的退出状态是0
。
# echo $?
0
它会找到的数字差异始终为零,因为它没有什么可比较的。0
是的,文档说如果没有报告差异或错误则退出状态。但这在大多数情况下没有意义。
有没有一种方法pt-table-checksum
可以避免无声地失败并将其报告为一般失败?我应该提交错误还是可以配置?
它被证明会让更多用户感到困惑,例如在这个问题中:“需要 pt-table-checksum help”。