MySQL डंप जनरेट करने के लिए .php फ़ाइल का उपयोग करना


118

यहाँ मेरे पास जानकारी है:

मैं MySQL और PHP5 का उपयोग करके लिनक्स आधारित प्रणाली के साथ काम कर रहा हूं। मुझे mysqldumpएक .php फ़ाइल के भीतर से उत्पन्न करने में सक्षम होने की आवश्यकता है , और फिर उस डंप को उस स्थान पर सर्वर पर एक फ़ाइल में संग्रहीत किया जाना चाहिए जिसे मैं निर्दिष्ट करूंगा।

जैसा कि मैं एक PHP nooblet हूँ, मैं चाहूंगा कि कोई मुझे कुछ सहायता, मार्गदर्शन, या कोड दे, जो मुझे चाहिए। इसे इंटरनेट से दूरस्थ रूप से चलाना होगा।


2
इसकी जाँच करें । मैं mysqldumpद्वारा उपयोग करेंगे system()
डेव


यह एक php फ़ाइल की मदद से mysqldump बनाने में मदद करता है। kvcodes.com/2017/10/php-create-mysql-backup
Kvvaradha

निष्पादन () या सिस्टम () पर भरोसा न करें, क्योंकि ज्यादातर बार वे साझा होस्टिंग पर अक्षम होते हैं। उत्तर बाहरी कार्यक्रमों को चलाने के बिना डेटाबेस डंप उत्पन्न करने के लिए एक उचित तरीका लागू करना चाहिए।
डाईगो

जवाबों:


159

आप exec()किसी बाहरी कमांड को निष्पादित करने के लिए फ़ंक्शन का उपयोग कर सकते हैं ।

नोट: के बीच shell_exec()और exec(), मैं दूसरे का चयन करूंगा, जो PHP स्क्रिप्ट में आउटपुट नहीं लौटाता है - पूरे एसक्यूएल डंप को स्ट्रिंग के रूप में प्राप्त करने के लिए PHP स्क्रिप्ट की कोई आवश्यकता नहीं है: आपको केवल इसे एक फ़ाइल के लिए लिखा जाना चाहिए, और यह कमांड द्वारा ही किया जा सकता है।


वह बाहरी आदेश होगा:

  • mysqldumpसही मापदंडों के साथ कॉल करें ,
  • और आउटपुट को किसी फ़ाइल में रीडायरेक्ट करता है।

उदाहरण के लिए :

mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql


जिसका अर्थ है कि आपका PHP कोड इस तरह दिखेगा:

exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');


बेशक, आप सही कनेक्शन जानकारी का उपयोग करने के लिए, ...उन लोगों के साथ की जगह ।


2
मैं जल्द ही इस पर एक कदम उठाऊंगा। क्या PHP पेज पर आउटपुट उत्पन्न करने का कोई तरीका है जब उसने "डंप पूरा!" या कुछ और?
थॉमस वार्ड

6
exec()जब तक आज्ञा समाप्त नहीं होगी, वापस नहीं आएंगे; इसलिए, बस कुछ echo "dump complete"कॉल करने के बादexec()
पास्कल मार्टिन

7
इससे मुझे आज मदद मिली - और osx शेर के उपयोगकर्ताओं के लिए एक नोट: mysqldump शॉर्टकट मेरे लिए तब सेट नहीं किया गया था जब मैंने mysql स्थापित किया था, इसलिए मुझे इसे ढूंढना पड़ा - यहाँ का रास्ता है:/usr/local/mysql/bin/mysqldump
NotLizards

4
आपकी टिप्पणी, jammypeach, ने मेरी जान बचाई। कृपया ध्यान दें कि किसी भी 1 को इसके अतिरिक्त की आवश्यकता हो सकती है: '/ usr / स्थानीय / mysql / bin / mysqldump -u ...'
सहायता

1
विंडोज उपयोगकर्ताओं के लिए ध्यान दें: विंडोज में आपको mysqldump.exe के लिए पूरा रास्ता exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
बताना होगा

83

यदि आप इसे ब्राउज़र के माध्यम से डाउनलोड करने के लिए एक बैकअप बनाना चाहते हैं, तो आप एक फ़ाइल का उपयोग किए बिना भी ऐसा कर सकते हैं।

Php function passthru () ब्राउज़र में mysqldump के आउटपुट को सीधे रीडायरेक्ट करेगा। इस उदाहरण में यह भी ज़िप किया जाएगा।

प्रो: आप अस्थायी फ़ाइलों से निपटने के लिए नहीं है।

Con: विंडोज पर काम नहीं करेगा। विशाल डेटासेट के साथ सीमाएँ हो सकती हैं।

<?php

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";

$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";

header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";   

passthru( $cmd );

exit(0);
?>

25

यहाँ देखें: https://github.com/ifsnop/mysqldump-php ! यह php में लिखा गया एक देशी घोल है।

आप इसे संगीतकार का उपयोग करके स्थापित कर सकते हैं, और यह करना जितना आसान है:

<?php

use Ifsnop\Mysqldump as IMysqldump;

try {
    $dump = new IMysqldump\Mysqldump('database', 'username', 'password');
    $dump->start('storage/work/dump.sql');
} catch (\Exception $e) {
    echo 'mysqldump-php error: ' . $e->getMessage();
}

?>

यह मूल उपयोगकर्ताओं का समर्थन करता है, मूल mysqldump से बहुत सारे विकल्प कॉपी किए गए हैं।

सभी विकल्पों को जीथब पृष्ठ पर समझाया गया है, लेकिन कमोबेश ऑटो-एक्सप्लोसिव हैं:

$dumpSettingsDefault = array(
    'include-tables' => array(),
    'exclude-tables' => array(),
    'compress' => 'None',
    'no-data' => false,
    'add-drop-database' => false,
    'add-drop-table' => false,
    'single-transaction' => true,
    'lock-tables' => false,
    'add-locks' => true,
    'extended-insert' => true,
    'disable-foreign-keys-check' => false,
    'where' => '',
    'no-create-info' => false
);

2
उन सर्वरों पर भी, जो सुरक्षा द्वारा exec/ और shell_execअक्षम हैं, mysqldump-php बढ़िया काम करता है! अभी Umbler के सर्वर पर इसे अभी आज़माया है और डंप को सफलतापूर्वक प्राप्त किया है। टिप के लिए बहुत बहुत धन्यवाद!
giovannipds

यह उन सर्वरों के लिए एकदम सही है जिनके पास mysql शेल कमांड उपलब्ध नहीं हैं!
Andrej

9

कृपया निम्नलिखित लिंक को देखें जिसमें एक स्क्रिप्ट है जो आपकी सहायता करेगा: http://davidwalsh.name/backup-mysql-database-php

नोट: इस स्क्रिप्ट में NULL डेटा प्रकार के बग हो सकते हैं


धन्यवाद, यह एक आसान प्लान B है अगर "shell_exec () को सुरक्षा कारणों से अक्षम कर दिया गया है" (वहां आप जाएं, Google)
Deebster

1
ध्यान दें कि यह mysqli के बजाय पदावनत mysql कमांड का उपयोग करता है।
पास्कल रासज़क

"बग डेटा के साथ बग" बैक-अप समाधान के लिए एक समस्या की तरह लगता है।
एलेक्सिस

7

सुरक्षा कारणों से, यह एक कॉन्फ़िगरेशन फ़ाइल में पासवर्ड निर्दिष्ट करने के लिए अनुशंसित है और कमांड में नहीं (उपयोगकर्ता एक ps aux | grep mysqldumpपासवर्ड निष्पादित कर सकता है और पासवर्ड देख सकता है)।

//create a temporary file
$file   = tempnam(sys_get_temp_dir(), 'mysqldump');

//store the configuration options
file_put_contents($file, "[mysqldump]
user={$user}
password=\"{$password}\"");

//execute the command and output the result
passthru("mysqldump --defaults-file=$file {$dbname}");

//delete the temporary file
unlink($file);

5

यहां आप mysql संरचना और डेटा को पीएमए में डंप करने के लिए एक व्यापक समाधान पा सकते हैं (और निष्पादन के बिना, पेसस्टैस्ट आदि):

https://github.com/antarasi/MySQL-Dump-with-Foreign-keys

यह मेरी वृद्धि के साथ dszymczuk परियोजना का कांटा है।

उपयोग सरल है

<?php
//MySQL connection parameters
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpsw = 'pass';
$dbname = 'dbname';

//Connects to mysql server
$connessione = @mysql_connect($dbhost,$dbuser,$dbpsw);

//Set encoding
mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");

//Includes class
require_once('FKMySQLDump.php');


//Creates a new instance of FKMySQLDump: it exports without compress and base-16 file
$dumper = new FKMySQLDump($dbname,'fk_dump.sql',false,false);

$params = array(
    //'skip_structure' => TRUE,
    //'skip_data' => TRUE,
);

//Make dump
$dumper->doFKDump($params);

?>

एक जादू की तरह काम करता है :-)


यह काम करता है - लेकिन यह PHPMYADMIN mysqldump की तुलना में एक अलग आउटपुट का उत्पादन करता है। क्यों ? डेटा गायब है, जबकि मेरा PHPMYADMIN बैकअप पूरा हो गया है।
13

@ लेड्यू-डे: डेटा को केवल डंप में शामिल नहीं किया जाना चाहिए अगर विकल्प स्किप_डेट => सच को एक पैरामीटर के रूप में पारित किया जाता है
ANTARA

3

जब तक आपको निष्पादन () का उपयोग करने की अनुमति है , आप अपने PHP कोड के माध्यम से शेल कमांड निष्पादित कर सकते हैं।

तो यह मानते हुए कि आप कमांड लाइन में mysqldump लिखना जानते हैं, अर्थात

mysqldump -u [username] -p [database] > [database].sql

फिर आप इसे फंक्शन (निष्पादन) के पैरामीटर के रूप में उपयोग कर सकते हैं।

exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");

3

MajorLeo का उत्तर मुझे सही दिशा में इंगित करता है लेकिन इसने मेरे लिए काम नहीं किया। मुझे यह साइट मिली है जो उसी दृष्टिकोण का अनुसरण करती है और काम करती है।

$dir = "path/to/file/";
$filename = "backup" . date("YmdHis") . ".sql.gz";

$db_host = "host";
$db_username = "username";
$db_password = "password";
$db_database = "database";

$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";
exec($cmd);

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");

passthru("cat {$dir}{$filename}");

मुझे आशा है कि यह किसी और की मदद करता है!


आपका यहाँ अंत उपयोगकर्ता के लिए उत्पादन लौटाता है न? IE निष्पादन पर यह एक तरह से आप इसे कॉपी / पेस्ट कर सकते हैं? यदि ऐसा है तो यह स्वीकार नहीं किया जाएगा कि स्वीकृत उत्तर क्या है - बस सर्वर पर फ़ाइल बनाता है ताकि मैं इसे स्कैप द्वारा हड़प सकूं।
थॉमस वार्ड

@ThomasW। यह कोड दो काम करता है: यह सर्वर पर सेव की गई फाइल को जेनरेट करता है और डाउनलोड डायलॉग को प्रॉम्प्ट करता है। यदि आप फ़ाइल को स्टोर करना चाहते हैं, तो हेडर () और पार्थस्ट्रू () भाग न करें। और अगर आपको बस फ़ाइल स्थान की आवश्यकता है, तो आप हमेशा $ dir और $ फ़ाइल नाम चर की गूंज कर सकते हैं .... कोई फर्क नहीं पड़ता कि आप क्या चुनते हैं, आप अभी भी एससीपी के माध्यम से फ़ाइल का उपयोग कर सकते हैं
Matías Cánepa


0

<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>

आप mysqldump के किसी भी विकल्प के साथ कमांड का विस्तार कर सकते हैं। man mysqldumpअधिक विकल्पों के लिए उपयोग करें (लेकिन मुझे लगता है कि आप जानते थे कि;))



0

global $wpdb;
$export_posts = $wpdb->prefix . 'export_posts';
$backupFile = $_GET['targetDir'].'export-gallery.sql';
$dbhost=DB_HOST;
$dbuser=DB_USER;
$dbpass=DB_PASSWORD;
$db=DB_NAME;
$path_to_mysqldump = "D:\xampp_5.6\mysql\bin";
$query= "D:\\xampp_5.6\mysql\bin\mysqldump.exe -u$dbuser -p$dbpass $db $export_posts> $backupFile";
exec($query);
echo $query;


0

उपरोक्त में से किसी भी कोड ने मेरे लिए काम नहीं किया। मैं विंडोज़ का उपयोग कर रहा हूँ। नीचे कोड मेरे लिए काम किया ...

$sql = "SELECT * FROM  $tableName WHERE yourclause";
$result = $conn->query($sql);


if($result){

        if ($result->num_rows > 0) {

            $myfile = fopen("daily_events_$district.sql", "w") or die("Unable to open file!");

            while($row = $result->fetch_assoc()) {  

                $rowToString = implode("','",$row);
                $writeToFile = "INSERT INTO $tableName VALUES('$rowToString');". PHP_EOL;
                fwrite($myfile,$writeToFile);
            }
            echo "File saved successfully";
        }
    } else {
        echo "No result found";
    }

यह आपके प्रोजेक्ट फ़ोल्डर में आपकी क्वेरी के अनुसार फ़ाइल को बचाएगा जो भी डेटा आप चाहते हैं।


यह समाधान अनिवार्य रूप से त्रुटिपूर्ण है, क्योंकि यह गलत SQL स्ट्रिंग्स बनाता है
आपका कॉमन सेंस

-1

शेल_सेक्स () का उपयोग करके डेटाबेस को डंप करने के लिए, नीचे विधि है:

shell_exec('mysqldump -h localhost -u username -ppassword databasename  | gzip > dbname.sql.gz');

-2
<?php
    $toDay = date('d-m-Y');

    $dbhost =   "localhost";
    $dbuser =   "YOUR DB USER";
    $dbpass =   "USER PASSWORD";
    $dbname =   "DB NAME";

    exec("mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname > /home/....../public_html/".$toDay."_DB.sql");


?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.