it-swarm.com.de

Verwenden einer .php-Datei zum Generieren eines MySQL-Dumps

Hier sind die Informationen, die ich habe:

Ich arbeite mit einem Linux-basierten System unter Verwendung von MySQL und PHP5. Ich muss in der Lage sein, aus einer .php-Datei ein mysqldump zu generieren und diesen Speicherauszug dann in einer Datei auf dem Server an einem von mir angegebenen Speicherort zu speichern.

Da ich ein PHP Nooblet bin, möchte ich, dass mir jemand Unterstützung, Anleitung oder Code gibt, der das tut, was ich brauche. Dies müsste remote aus dem Internet ausgeführt werden.

114
Thomas Ward

Mit der Funktion exec() können Sie einen externen Befehl ausführen.

Anmerkung: zwischen Shell_exec() und exec() würde ich die zweite auswählen, die die Ausgabe nicht an das PHP= script zurückgibt - keine Notwendigkeit Damit das Skript PHP den gesamten SQL-Speicherauszug als Zeichenfolge abruft, muss er nur in eine Datei geschrieben werden. Dies kann durch den Befehl selbst erfolgen.


Dieser externe Befehl wird:

  • ein Aufruf an mysqldump sein, mit den richtigen Parametern,
  • und leiten Sie die Ausgabe in eine Datei um.

Beispielsweise :

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


Was bedeutet, dass Ihr PHP Code so aussehen würde:

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


Es liegt natürlich an Ihnen, die richtigen Verbindungsinformationen zu verwenden und den ... Durch diese zu ersetzen.

150
Pascal MARTIN

Wenn Sie ein Backup erstellen möchten, um es über den Browser herunterzuladen, können Sie dies auch ohne eine Datei tun.

Die PHP-Funktion passthru () leitet die Ausgabe von mysqldump direkt an den Browser weiter. In diesem Beispiel wird es auch gezippt.

Pro: Sie müssen sich nicht mit temporären Dateien befassen.

Con: Funktioniert nicht unter Windows. Kann bei großen Datenmengen Grenzen haben.

<?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);
?>
74
MajorLeo

Schauen Sie hier nach: https://github.com/ifsnop/mysqldump-php ! Es ist eine native Lösung in PHP geschrieben.

Sie können es mithilfe von Composer installieren, und das ist so einfach wie:

<?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();
}

?>

Es unterstützt fortgeschrittene Benutzer mit vielen Optionen, die aus dem ursprünglichen mysqldump kopiert wurden.

Alle Optionen werden auf der Github-Seite erklärt, sind aber mehr oder weniger selbsterklärend:

$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
);
22
diego

Bitte klicken Sie auf den folgenden Link, der ein Scriptlet enthält, das Ihnen dabei hilft: http://davidwalsh.name/backup-mysql-database-php

Hinweis: Dieses Skript kann Fehler mit NULL-Datentypen enthalten

10
André Puel

Aus Sicherheitsgründen wird empfohlen, das Kennwort in einer Konfigurationsdatei und nicht im Befehl anzugeben (ein Benutzer kann ein ps aux | grep mysqldump und siehe Passwort).

//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);
7

Hier finden Sie eine umfassende Lösung zum Sichern von MySQL-Strukturen und -Daten wie in PMA (und ohne die Verwendung von exec, passthru usw.):

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

Es ist eine Gabelung des Dszymczuk-Projekts mit meinen Verbesserungen.

Die Benutzung ist einfach

<?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);

?>

klappt wunderbar :-)

5
ANTARA

Solange Sie exec () verwenden dürfen, können Sie Shell-Befehle über Ihren PHP Code ausführen.

Angenommen, Sie wissen, wie der mysqldump in die Befehlszeile geschrieben wird, d. H.

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

dann können Sie dies als Parameter für die exec () - Funktion verwenden.

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

Die Antwort von MajorLeo weist mich in die richtige Richtung, aber es hat bei mir nicht funktioniert. Ich habe diese Seite gefunden, die den gleichen Ansatz verfolgt und funktioniert hat.

$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}");

Ich hoffe es hilft jemand anderem!

3
Matías Cánepa

Keiner der obigen Codes hat bei mir funktioniert. Ich benutze Windows. Der folgende Code hat bei mir funktioniert ...

$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";
    }

Dadurch wird die Datei entsprechend Ihrer Abfrage in Ihrem Projektordner gespeichert, unabhängig von den gewünschten Daten. Wenn Sie die gesamte Datenbank oder Tabelle sichern möchten, können Sie diesen Link verwenden http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to- backup-mysql-databases.aspx

1
swarnim dixit

So sichern Sie die Datenbank mit Shell_exec ():

Shell_exec('mysqldump -h localhost -u username -ppassword databasename  | gzip > dbname.sql.gz');
0
Digisha
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
Fuad Hasan

Nun, Sie können immer den Systemfunktionsaufruf von PHP verwenden.

http://php.net/manual/en/function.system.php

http://www.php.net/manual/en/function.exec.php

Das führt jedes Befehlszeilenprogramm von PHP aus.

0
jazztickets

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

Sie können den Befehl mit beliebigen Optionen erweitern, die mysqldump natürlich verwendet. Verwenden man mysqldump für mehr Optionen (aber ich denke du wusstest das;))

0
Rem.co

Hier ist eine weitere native PHP basierte Option: https://github.com/2createStudio/shuttle-export

0
Emil M