【问题标题】:innobackupex restoring changes root and debian-sys-maint password. mysql restart failedinnobackupex 恢复更改 root 和 debian-sys-maint 密码。 mysql重启失败
【发布时间】:2013-06-22 11:15:53
【问题描述】:

我必须制定备份策略。 我选择 innobackupex 在 Debian 6 Squeeze 上运行。有两台服务器,生产服务器和备份服务器(如果生产服务器崩溃,它应该可以工作)。没有复制,我使用 rsync 传输备份。 我有一个 php 脚本,它在 conf 文件中查找以了解何时必须进行备份。

我的问题是:如何使用 innobackupex 跳过 mysql 数据库或 users 表?

在master上:我执行以下命令:

innobackupex --user=root --password=xxx --no-timestamp /opt/backups/full/ rsync -avz --progress -e 'ssh -i -p 1000' /opt/backups/full/ user@xxx:/home/backups/full/

这很好用

在备份服务器上,我只需要准备和恢复文件:

innobackupex --apply-log --redo-only --user=xxx --password=xxx /home/backups/full/ innobackupex --copy-back /home/backups/full --user=root --password=xxx

一切正常,但在备份服务器上,root 用户的密码更改了,甚至debian-sys-maint 密码也更改了。

root 用户密码成为主用户密码。

我做了一个脚本来纠正这个问题。 debian-sys-maint 密码清楚地写在/etc/mysql/debian.cnf 文件中,因此可以将其解压缩,但在 php 中(我使用 pdo 对象)我无法更改此密码,因此无法重新启动 mysql 服务器。 有时我无法找回root用户的密码,它不是主服务器的root密码。

有时我可以使用/etc/init.d/mysql stop/start 停止/启动 mysql,有时使用服务 mysql 停止/启动它这不起作用我尝试使用:mysqladmin -u root -p shutdown(如果我可以更改密码)

如果我真的无法停止 mysql,我会这样做killall mysql(我知道这是错误的) 然后我更改了root密码:

/usr/bin/mysqld_safe --skip-grant-tables & mysql --user=root mysql

有人遇到过和我类似的问题吗?如何使用 innobackupex 跳过 mysql 数据库?

【问题讨论】:

  • 如果您的工具无法保留 mysql 系统架构,我建议您放弃此工具并使用 MySQL 提供的 mysqldump 实用程序。
  • 你指的是this tool吗?

标签: mysql database-backups percona


【解决方案1】:

innobackupex 工具是 Percona XtraBackup 的一部分。我为 Percona 工作,我已经开发了关于 Percona XtraBackup 的培训。

innobackupex 有一些选项可以按名称或正则表达式备份特定数据库。 @YaK 提供了一个选项,或者您可以在此处查看其他选项:http://www.percona.com/doc/percona-xtrabackup/innobackupex/partial_backups_innobackupex.html

但是,--copy-back 假设您正在将完整备份恢复到 数据目录。 IE。如果目标目录不为空,--copy-back 会报错并拒绝覆盖文件。

如果您尝试将 InnoDB 表还原到您已经拥有 mysql 数据库的实例,则必须手动进行还原。这可以像使用文件的mv 到现有的datadir 一样简单(当然MySQL 服务器关闭)。还记得在启动 mysqld 之前在文件上使用chown mysql:mysql

PS:恢复前不需要使用--redo-only。该选项用于进行增量备份,即使这样,您也可以在进行最终恢复之前跳过该选项。

【讨论】:

  • 再次感谢您。所以最后,我使用了你的建议和@YaK 的建议。在主服务器上,我在创建备份时忽略了 mysql 数据库在从服务器上,我使用 innobackupex 命令恢复它并将一个干净的 mysql 文件夹(数据库)复制到 /var/lib/mysql 效果很好。对于 XtraBackup,有一个选项 --ignore-databases=xxx 可能很有用
【解决方案2】:

我相信你使用的是来自 Percona 的this tool

那么我能找到的唯一有用的选项是--databases。我假设您不想在脚本中维护数据库列表,您可以使用如下命令动态构建列表:

外壳 > mysql [选项] -NBe \ “SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'information_schema')”

您应该能够将此调用集成到以下内容中:

外壳 > innobackupex \ --databases=`mysql [选项] -NBe \ “SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'information_schema')”`

(可能需要一些额外的双引号,抱歉,我目前无法使用该工具)

【讨论】:

    【解决方案3】:

    感谢您的回答。

    是的,我所有的表都在 InnoDB 引擎上工作。 谢谢你的建议 Bill Karwin,但是 innobackupex 是一个很棒的工具,我会用它来忽略 mysql 数据库,--databases

    是的,我读到--redo-only 是增量的,我也是增量的。 在主服务器上,我有一个名为full 的目录和一个名为incremental 的目录,在最后一次增量之后,我删除了这些目录。

    测试后,如果一切正常,我会通知您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-08-28
      • 2021-01-07
      • 2012-07-23
      • 2020-03-04
      • 2013-08-05
      相关资源
      最近更新 更多