2013-06-27 92 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