2

PHPでバックアップスクリプトを作成しようとしていますが、うまくいきません..

最初に、コマンドラインからこれを実行しようとしました:

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

それは機能し、ディレクトリ内のすべてのdbファイルをダンプしました

次に、コマンドラインからこれを試しました:

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!?? それは意味がありません...ファイルに何か問題があります..

次に、Webサーバーから最初の作業コマンドを実行しようとしました

$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
4

1 に答える 1

3

.tar.gz ファイルを作成しましたが、ファイルを開くと、backup-my.cnf..?! しか含まれていません。

-iPercona XtraBackup によって作成された tar ファイルの内容を抽出または表示するには、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 アーカイブの最初のファイルのみが表示されます。


次に、Webサーバーから最初の作業コマンドを実行しようとしました...ファイルは作成されません... PHPはすでにターゲットディレクトリにアクセスしています

innobackupex プロセスには、バックアップの出力を保存するための書き込み権限に加えて、MySQL datadir の下のデータおよびログ ファイルに対する読み取り権限が必要です。

次のようなエラーが表示されるはずです。

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()呼び出しがstderr 出力を破棄するため、おそらく失われました。


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
于 2013-06-30T17:44:10.443 に答える