2013-06-27 56 views
2

我想在PHP中创建一个备份脚本,但不能使它工作运行..innobackupex流焦油和从PHP

首先,我想在命令行中运行以下命令:

innobackupex --user=root --password=xxx --databases="dbtest" /var/www_backup 

它的工作原理,并倾倒在目录

然后我尝试这个命令行的所有数据库文件:

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!这是没有意义的......东西是错误的文件..

然后我试图从

$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); 

没有文件被创建的网络服务器上运行的第一个工作日的命令,但该返回

output 
Array 
(
) 
return 
3 

PHP已经进入到目标目录

chown -R www-data /var/www_backup 

回答

3

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

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

. . . 
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归档的第一个文件是可见的。


然后我试图从网络服务器上运行的第一个工作日命令不创建文件... PHP已经可以访问到目标目录

的innobackupex过程必须有读取MySQL数据目录下的数据和日志文件的权限,以及写入权限以保存备份的输出。

你应该看到象这样的错误:

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服务器尝试这样做我自己。

我需要从shell中测试,所以我可以看到错误输出。当你只从你的PHP脚本运行它时,你没有看到错误发生。一旦你得到它的工作,你应该能够将gid更改为www-data并使其继续工作。

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

$ cd /var/lib/mysql  # use your datadir if it is different 
$ chgrp -R billkarwin . 

不需要chmod默认安装上的任何东西。但是,你的文件权限可能是不对的,在这一点上,所以你需要将它们恢复到东西的作品:

$ cd /var/lib/mysql  # use your datadir if it is different 
$ chmod -R 660 . 
$ chmod 770 . */. 
$ chmod 777 mysql.sock 

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

$ 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中,以便不必将凭据放在命令行上。

$ cat > ~/.my.cnf 
[xtrabackup] 
user=root 
password=XXXX 
^D 
$ innobackupex /tmp 
+0

你怎么能打开和提取窗口中的文件? – clarkk

+0

你可以安装[Cygwin](http://cygwin.org)工具来在Windows上获得GNU tar,所以你可以使用'-i'选项。 –

+0

抱歉离开一段时间..你如何给innobackupex进程读取权限,以便它可以从PHP运行? – clarkk