2017-07-20 3 views
0

特定のデータベースの特定のテーブルをバックアップするPHPスクリプトを指し示すcronjobを設定しようとしています。where句を持つ単一テーブルのmysqldump // dbnameにドットまたはヒットコアが付きます

Crontabが動作しています。 CLIのPHPが動作しています。

<?php 

$host = 'crm_host_be'; 
$db = 'db_crm_be'; 
// Define the database settings 
require('/var/www/'.$host.'/data_'.$db.'.php'); 

// connect to the database 
$link = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD); 
mysql_set_charset('utf8',$link); 
mysql_select_db(DB_DATABASE); 

// Get Offers list 
$get_offers_list = 'SELECT * FROM crm_offers ORDER BY date_of_change DESC '; 
$q_offers_list = mysql_query($get_offers_list); 

while($offers_list = mysql_fetch_array($q_offers_list)) { 
//echo $offers_list['offer_uid']."\n"; 
$ouid = $offers_list['offer_uid']; 

mysqldump -u "db_crm_be_u" -p'1234567890' --databases db_crm_be crm_offers --where="offer_uid=\"".$ouid.\"" > 'date +\%Y\%m\%d_\%H\%M\%S'.$ouid.sql 

    } 
?> 

DBおよびSELECTへの接続がOKである(エコーCLIの各OFFER_ID):

は、ここで私が使用しようとしているPHPコードです。

しかし、私はCLIでこれを取得しています:

PHP Parse error: syntax error, unexpected '"db_crm_be_u"' (T_CONSTANT_ENCAPSED_STRING) in /var/www/crm_host_be/db_offers_backup.php on line 35 

私はtimestamp-を生成するために、変数の使用を($ホスト、$デシベル、$ ouid、...)を保持したいのですがCRMの "ユニークオファー"に基づいて.sqlをベースにしています。

my DBとTABLESの両方にアンダースコアが付いています。

どのように私は全体的な名前を変更することなくこれを精巧に解決できますか?

また、各オファー($ ouid)のタイムスタンプとサフィックスを組み合わせてファイル名を生成する方法はありますか?

ご協力いただきありがとうございます。

+0

mysqldumpはPHP関数ではなく、シェルコマンドです。 – MrDarkLynx

+0

@ PdC-Stack:B Desaiの答えと、mysqldumpへのパスについての発言を参照してください。 –

答えて

0

コマンドを実行する必要があります。 mysqldumpはPHP関数ではなくシェルコマンドであるため、最初に文字列として保存してから実行してください。exec

$mysql_cmd = "mysqldump -u db_crm_be_u -p1234567890 --databases db_crm_be crm_offers --where=offer_uid=\"".$ouid."\" > date +\%Y\%m\%d_\%H\%M\%S".$ouid.".sql"; 
exec($mysql_cmd); 
+0

mysqldumpへの完全なパスを使用したいかもしれません。 cronから実行するとデフォルトの検索パスが見つからない場合があります。 –

+0

はい、デフォルトのパスがある場合は不要です。私はほんの少しのヒントを与えた –

+0

@ PdC-Stackのための発言はありました –

関連する問題