首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >innobackupex流tar并从php运行

innobackupex流tar并从php运行
EN

Stack Overflow用户
提问于 2013-06-28 01:54:06
回答 1查看 1K关注 0票数 2

我正在尝试在php中创建一个备份脚本,但无法使其正常工作。

首先,我尝试从命令行运行以下命令:

代码语言:javascript
复制
innobackupex --user=root --password=xxx --databases="dbtest" /var/www_backup

它可以工作并转储目录中的所有db文件

然后,我尝试从命令行执行以下操作:

代码语言:javascript
复制
innobackupex --user=root --password=xxx --databases="dbtest" --stream=tar ./ | gzip -c -1 > /var/www_backup/`date +%Y-%m-%d-%H-%M-%S`.tar.gz

它创建了一个.tar.gz文件,但当打开该文件时,它只包含一个backup-my.cnf..?!backup-my.cnf文件大小约为244字节,但整个.tar.gz文件大小约为2mb!??这没道理..。文件有问题..

然后,我尝试从Then服务器运行第一个工作命令

代码语言:javascript
复制
$syntax = 'innobackupex --user='.$mysql_user.' --password='.$mysql_pass.' --databases="'.$mysql_db.'" /var/www_backup';
exec($syntax, $output, $return);
echo "output\n";
print_r($output);
echo "return\n";
print_r($return);

未创建任何文件,但返回此消息

代码语言:javascript
复制
output
Array
(
)
return
3

php已拥有对目标目录的访问权限

代码语言:javascript
复制
chown -R www-data /var/www_backup
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-01 01:44:10

它创建了一个.tar.gz文件,但当打开该文件时,它只包含一个备份-my.cnf..?!

您必须使用tar的-i选项来提取或查看由Percona XtraBackup创建的tar文件的内容。这是有文档记录的,并且在innobackupex进程结束时会输出一条提醒:

代码语言:javascript
复制
. . .
130630 10:40:23  innobackupex: Connection to database server closed
innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
130630 10:40:23  innobackupex: completed OK!

省略-i选项将导致您看到的行为:只有tar归档中的第一个文件是可见的。

,然后我尝试从Then服务器运行第一个工作命令...未创建任何文件...PHP已拥有对目标目录的访问权限

innobackupex进程必须对MySQL数据目录下的数据和日志文件具有读取权限,此外还必须具有写入权限才能保存备份输出。

您应该会看到这样的错误:

代码语言:javascript
复制
130630 10:36:20  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Error in opening ./ibdata1

但是它可能丢失了,因为PHP的exec()调用了discards stderr output

你对8/4的评论如下:

好的,我自己用最新的XtraBackup和Percona Server试过了。

我需要从shell测试它,这样我才能看到错误输出。当您仅从PHP脚本运行它时,您看不到发生的错误。一旦你让它工作,你应该能够将gid改为www-data并让它继续工作。

我通过将所有文件的组所有权更改为我自己用户的gid进行了测试。

代码语言:javascript
复制
$ cd /var/lib/mysql     # use your datadir if it is different
$ chgrp -R billkarwin .

在默认安装中不需要chmod任何东西。但此时您的文件权限可能不正确,因此您需要将其还原为有效的内容:

代码语言:javascript
复制
$ cd /var/lib/mysql     # use your datadir if it is different
$ chmod -R 660 .
$ chmod 770 . */.
$ chmod 777 mysql.sock

然后我可以运行innobackupex,但我必须指定mysql凭据:

代码语言:javascript
复制
$ innobackupex --user=root --password=XXXX /tmp

130804 08:56:33  innobackupex: Connecting to MySQL server with DSN
'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).
130804 08:56:33  innobackupex: Connected to MySQL server
. . .
130804 09:53:46  innobackupex: Connection to database server closed
130804 09:53:46  innobackupex: completed OK!

请注意,您还可以将xtrabackup组添加到用户自己的$HOME/.my.cnf中,这样就不必将凭据放在命令行上。

代码语言:javascript
复制
$ cat > ~/.my.cnf
[xtrabackup]
user=root
password=XXXX
^D
$ innobackupex /tmp
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17350046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档