Percona-xtrabackup 与 MyIsam Engine 的热备份问题

Percona-xtrabackup 与 MyIsam Engine 的热备份问题

我们正在使用 MyIsam 引擎,由于跳过了 inndb 引擎 [my.cnf skip-innodb],Percona-xtrabackup 抛出了以下错误。如何在不启用 inndb 引擎的情况下解决此问题?

percona-xtrabackup-2.0.0/bin:# ./innobackupex-1.5.1 --user="root" --password=*** --defaults-file="/etc/my.cnf" --socket=<path>/mysql.sock1  --ibbackup=<path>/percona-xtrabackup-2.0.0/bin/xtrabackup <path>/testbackup/

Percona 日志:

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex-1.5.1
           prints "completed OK!".

innobackupex-1.5.1: Using mysql  Ver 14.14 Distrib 5.1.57, for pc-linux-gnu (i686) using readline 5.1
innobackupex-1.5.1: Using mysql server version Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

innobackupex-1.5.1: Created backup directory <path>/testbackup/2012-06-08_16-55-23
120608 16:55:23  innobackupex-1.5.1: Starting mysql with options:  --defaults-file='/etc/my.cnf' --password=xxxxxxxx --user='root' --socket='/data/mysql1/mysql.sock1' --unbuffered --
120608 16:55:23  innobackupex-1.5.1: Connected to database with mysql child process (pid=25611)
120608 16:55:25  innobackupex-1.5.1: Connection to database server closed

120608 16:55:25  innobackupex-1.5.1: Starting ibbackup with command: <path>/percona-xtrabackup-2.0.0/bin/xtrabackup  --defaults-file="/etc/my.cnf" --backup --suspend-at-end --target-dir=<path>/testbackup/2012-06-08_16-55-23
innobackupex-1.5.1: Waiting for ibbackup (pid=25618) to suspend
innobackupex-1.5.1: Suspend file '<path>/testbackup/2012-06-08_16-55-23/xtrabackup_suspended'

<path>/percona-xtrabackup-2.0.0/bin/xtrabackup version 2.0.0 for Percona Server 5.1.59 pc-linux-gnu (i686) (revision id: undefined)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /data/mysql1
xtrabackup: Target instance is assumed as followings.
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 = 2
xtrabackup:   innodb_log_file_size = 5242880
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
120608 16:55:26  InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
xtrabackup: Something wrong with source files...
innobackupex-1.5.1: Error: ibbackup child process has died at ./innobackupex-1.5.1 line 371.

答案1

有什么理由使用它吗?无论如何,它只会锁定 myiasm 表以进行转储。它实际上是一个可以执行 myiasm 的 innodb 表工具,但它会锁定它们。不妨只进行服务器范围的锁定并复制所有文件。

答案2

在仅安装 MyISAM 的环境中使用它没有任何意义innobackupex。原因如下。

innobackupex旨在从正在运行的数据库中创建一致的备份;即所谓的“热备份”。这仅适用于 InnoDB 表空间,因为 MyISAM 要求您对READ LOCK要一致备份的表执行操作,只要未释放锁定,这会导致服务中断。

MyISAM 数据越多,innobackupex锁定表的时间就越长。如果只有 MyISAM 数据,使用该工具就毫无意义 - 这与

  1. mysql> FLUSH TABLES WITH READ LOCK
  2. shell> cp -a /path/to/datadir/of/mysql /path/to-backup/dir
  3. 等结束了mysql> UNLOCK TABLES

而对于 InnoDB 来说,innobackupex只是开始复制,然后在稍后准备更新时应用事务日志(--apply-log),离线/独立。

答案3

如果您因为认为过程很困难而拒绝转换到 InnoDB,我使用的方法如下:

mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

您可以使用正则表达式排除和包含数据库,例如在上面的示例中仅包含以小写字母开头的 dbs。

当然,修改将锁定表,但从那时起您就可以使用 xtrabackup。

答案4

我在启用 innobackupex 的新创建的数据库上运行 innobackupex 时遇到了同样的问题skip-innodb。似乎 innobackupex 需要有一个可运行的 InnoDB 存储引擎,即使它没有被使用,当它试图为你生成一个时会出错。

在我启动数据库一次并#skip-innodb在 /etc/my.cnf 中注释掉之后(我必须删除备份脚本生成的 ibdata1 文件,因为它已损坏),然后关闭它并取消注释该skip-innodb行,备份脚本按预期工作。

我猜人们不会再遇到这么多问题了,因为仍然运行仅 MyISAM 的数据库的情况并不常见。

相关内容