Za pomocą a.php plik do wygenerowania zrzutu MySQL

Oto informacje, które mam:

Pracuję z systemem opartym na Linuksie przy użyciu MySQL i PHP5. I need to be able to generate a mysqldump from within a .plik php, a następnie niech ten zrzut zostanie zapisany w pliku na serwerze w miejscu, które określiłbym.

Ponieważ jestem NOOBLETEM PHP, chciałbym, aby ktoś udzielił mi pomocy, wskazówek lub kodu, który zrobiłby to, czego potrzebuję. Musiałoby to być uruchamiane zdalnie z Internetu.

Author: hakre, 2011-07-19

16 answers

Możesz użyć exec() funkcja do wykonania zewnętrznego polecenia.

Uwaga: pomiędzy shell_exec() i exec(), wybrałbym drugą, która nie zwraca wyjścia do skryptu PHP -- nie ma potrzeby, aby skrypt PHP pobierał cały zrzut SQL jako ciąg znaków : wystarczy, że zostanie zapisany do pliku, a to może być wykonane przez samo polecenie.


Że zewnętrzne polecenie będzie:

  • być wywołaniem do mysqldump, z odpowiednimi parametrami,
  • i przekierowanie wyjścia do pliku.

Na przykład:

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


Co oznacza, że Twój kod PHP będzie wyglądał tak:

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


oczywiście, do ciebie należy użycie właściwych informacji o połączeniu, zastępując ... tymi.

 139
Author: Pascal MARTIN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 16:25:56

Jeśli chcesz utworzyć kopię zapasową, aby pobrać ją za pośrednictwem przeglądarki, możesz to zrobić również bez użycia pliku.

Funkcja phppassthru () przekieruje bezpośrednio wyjście mysqldump do przeglądarki. W tym przykładzie również będzie zapinany na zamek błyskawiczny.

Pro: nie musisz zajmować się plikami tymczasowymi.

Con: nie działa na Windows. Może mieć limity z ogromnymi zestawami danych.

<?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);
?>
 69
Author: MajorLeo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 20:39:20

Spójrz tutaj: https://github.com/ifsnop/mysqldump-php ! Jest to natywne rozwiązanie napisane w php.

Możesz go zainstalować za pomocą composera i jest to tak proste, jak:

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

?>

Obsługuje zaawansowanych użytkowników, z wieloma opcjami skopiowanymi z oryginalnego mysqldump.

Wszystkie opcje są wyjaśnione na stronie github, ale mniej więcej są autoeksploatacyjne:

$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
);
 18
Author: diego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 23:20:52

Prosimy o skorzystanie z poniższego linku, który zawiera skrypt, który pomoże: http://davidwalsh.name/backup-mysql-database-php

Uwaga: Ten skrypt może zawierać błędy z NULL typami danych

 10
Author: André Puel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-24 13:47:27

Tak długo, jak możesz używać exec () , możesz wykonywać polecenia powłoki za pomocą kodu PHP.

Więc zakładając, że wiesz jak napisać mysqldump w wierszu poleceń, czyli

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

Następnie możesz użyć tego jako parametru do funkcji exec ().

exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");
 5
Author: charliefortune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 16:29:36

Tutaj znajdziesz kompleksowe rozwiązanie do zrzutu struktury i danych mysql jak w PMA (i bez użycia exec, passthru itp.):

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

To fork projektu dszymczuk z moimi ulepszeniami.

Użycie jest proste

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

?>

Działa jak czar : -)

 5
Author: ANTARA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 14:53:38

Ze względów bezpieczeństwa zaleca się podanie hasła w pliku konfiguracyjnym, a nie w poleceniu (użytkownik może wykonać ps aux | grep mysqldump i zobaczyć hasło).

//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
Author: Constantin Galbenu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 08:40:31

Odpowiedź MajorLeo wskazuje mi właściwy kierunek, ale nie zadziałała. Znalazłem tę stronę , która działa zgodnie z tym samym podejściem.

$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}");
Mam nadzieję, że to pomoże komuś innemu!
 2
Author: Matías Cánepa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-19 20:07:28

Żaden z powyższych kodów nie zadziałał. Używam systemu windows. Poniższy kod zadziałał dla mnie...

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

To zapisze plik w folderze projektu zgodnie z zapytaniem, jakie dane chcesz. Jeśli chcesz zrzucić całą bazę danych lub tabelę, możesz użyć ten link http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx

 1
Author: swarnim dixit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-24 05:02:43

Cóż, zawsze możesz użyć wywołania funkcji systemowej PHP.

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

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

Który uruchamia dowolny program wiersza poleceń z PHP.

 0
Author: jazztickets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 16:24:19

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

Możesz rozszerzyć polecenie o dowolne opcje mysqldump. Użyj man mysqldump, Aby uzyskać więcej opcji (ale chyba o tym wiedziałeś ;))

 0
Author: Rem.co,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 16:25:41

Oto kolejna natywna opcja oparta na PHP: https://github.com/2createStudio/shuttle-export

 0
Author: Emil M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-15 11:42:43

Aby zrzucić bazę danych za pomocą shell_exec (), poniżej znajduje się Metoda :

shell_exec('mysqldump -h localhost -u username -ppassword databasename  | gzip > dbname.sql.gz');
 0
Author: Digisha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 12:39:25

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
Author: Fuad Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-06 03:20:06
<?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");


?>
 -1
Author: PradeepJangid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-10 12:06:33

Ja też miałem problem i nie mogłem znaleźć narzędzia do pracy dla mnie. Więc w celu tworzenia kopii zapasowych i przywracania danych MYSQL z PHP zrobiłem program, który może skompresować dane do pliku zip, który można pobrać. Później możesz przesłać i przywrócić pełną bazę danych. Znajdziesz go na mojej stronie Github

 -1
Author: Joshy Francis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-31 18:14:44