2013-06-27 3 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 составляет около 2 МБ! ?? Это не имеет смысла ... что-то не так с файлом ..

Затем я попытался запустить первую рабочую команду из веб-сервера

$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 ..?!

Вы должны использовать опцию -i для гудрона, чтобы извлечь или просмотреть содержимое файла дегтя, созданного Percona XtraBackup. Это подтверждается, и напоминание выводится в конце 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 результатов опционных в поведении вы видели: только первый файл в архиве дегтя виден.


Затем я попытался запустить первую рабочую команду из веб-сервера ... Файл не создан ... 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.


Re ваш комментарий на 8/4:

Хорошо, я попробовал это сам с самыми последними XtraBackup и последнего Percona Server.

Мне нужно проверить это из оболочки, чтобы я мог видеть выход ошибки.Когда вы запускаете его только с вашего 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), чтобы получить GNU tar в Windows, поэтому вы можете использовать опцию '-i'. –

+0

извините за то, что вы отсутствовали некоторое время. Как вы даете привилегии чтения процессу innobackupex, чтобы он мог работать с php? – clarkk