मैं अपने सर्वर के लिए एक sql फ़ाइल के रूप में अपने MySQL डाटाबेस बैकअप के लिए दाऊद वॉल्श (http://davidwalsh.name/backup-mysql-database-php) द्वारा डाटाबेस बैकअप स्क्रिप्ट का उपयोग कर रहा हूँ।क्यों मेरी डेटाबेस बैकअप स्क्रिप्ट php में काम नहीं कर रहा?
मैंने बैकअप नामक उपयोगकर्ता बनाया और इसे सभी विशेषाधिकार दिए (बस सुनिश्चित करने के लिए)। फिर मैंने कोड को एक php फ़ाइल में डाल दिया और php फ़ाइल चलाने के लिए क्रॉन जॉब सेट किया।
इस कोड है:
/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all of the tables
if($tables == '*')
{
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");\n";
}
}
$return.="\n\n\n";
}
//save file
$handle = fopen('../backup/db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
backup_tables('localhost','alupto_backup','pass','*');
जब क्रॉन जॉब चलाता है, बैकअप से काम नहीं करता और मैं त्रुटि प्रतीत होता है कि साथ एक ईमेल प्राप्त:
चेतावनी: mysql_fetch_row(): प्रदत्त तर्क मान्य MySQL परिणाम संसाधन /home5/ideapale/public_html/amator में नहीं है ders_basic/व्यवस्थापक/backup.php लाइन पर
लाइन 18 पर इस कोड है:
while($row = mysql_fetch_row($result))
जब मैं एसक्यूएल (शो टेबल्स) चलाने phpMyAdmin में, यह ठीक काम करता है और मुझे सभी तालिकाओं की एक सूची दिखाता है। लेकिन किसी कारण से, मुझे त्रुटि मिल रही है जब php फ़ाइल SQL को चलाने का प्रयास करती है।
क्यों मेरी डेटाबेस बैकअप स्क्रिप्ट काम नहीं कर रहा?
देखें और यह सूची में जोड़ने के लिए बहिष्कृत 'ereg_replace()' का उपयोग करता है। –
शेलेक्सैक? क्रॉन के माध्यम से प्रोग्राम चलाने के लिए PHP का उपयोग क्यों करें? –
ठीक है, मैंने कभी यह महसूस नहीं किया। क्या आप एक अच्छे ट्यूटोरियल के बारे में जानते हैं जो दिखाता है कि mysqldump चलाने के लिए shellexec() का उपयोग कैसे करें? – zeckdude