innobackupex恢复更改root和debian-sys-maint密码。 mysql重启失败

时间:2013-06-25 15:10:58

标签: mysql database-backups percona

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

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

在主人身上:我执行以下命令:

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数据库?

3 个答案:

答案 0 :(得分:1)

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

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

但是,--copy-back假设您要将完整备份还原到数据对。即如果目标目录不为空,--copy-back将发出错误并拒绝覆盖文件。

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

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

答案 1 :(得分:0)

我相信您使用的是Percona的this tool

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

    shell > mysql [options] -NBe \
            "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'information_schema')"

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

    shell > innobackupex \
            --databases=`mysql [options] -NBe \
            "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'information_schema')"`

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

答案 2 :(得分:0)

感谢您的回答。

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

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

经过测试,我会告诉你一切是否正常。