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.
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.
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);
?>
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
);
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
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");
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 : -)
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);
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!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
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.
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ś ;))
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
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');
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;
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");
?>
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
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