Использование a.php файл для создания дампа MySQL
вот информация, которую я имею:
Я работаю с системой на базе Linux, используя MySQL и PHP5. Мне нужно иметь возможность генерировать mysqldump
изнутри a .php-файл, а затем этот дамп будет храниться в файле на сервере в месте, которое я бы указал.
поскольку я PHP nooblet, я хотел бы, чтобы кто-то дал мне некоторую помощь, руководство или код, который будет делать то, что мне нужно. Это должно быть запущено удаленно из интернета.
16 ответов:
можно использовать
exec()
функция для выполнения внешней команды.Примечание: между
shell_exec()
иexec()
, Я бы выбрал второй, который не возвращает вывод в php-скрипт-нет необходимости в PHP-скрипте, чтобы получить весь SQL-дамп в виде строки : вам нужно только записать его в файл, и это может быть сделано самой командой.
Эта внешняя команда будет:
- быть вызов
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');
конечно, до вас, чтобы использовать правильную информацию о подключении, заменив...
С теми.
Если вы хотите создать резервную копию, чтобы загрузить его через браузер, вы также можете сделать это без использования файла.
функция php passthru () будет напрямую перенаправлять вывод mysqldump в браузер. В этом примере он также будет застегнут.
Pro: вам не нужно иметь дело с временными файлами.
Con: не будет работать на Windows. Может иметь ограничения с огромными наборами данных.
<?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); ?>
Взгляните сюда:https://github.com/ifsnop/mysqldump-php ! Это собственное решение, написанное на PHP.
вы можете установить его с помощью composer, и это так же просто, как сделать:
<?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.
все опции описаны на странице GitHub, но более или менее автоматически поясняющий:
$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 );
пожалуйста, перейдите по следующей ссылке, которая содержит скриптлет, который поможет вам: http://davidwalsh.name/backup-mysql-database-php
Примечание: этот скрипт может содержать ошибки с нулевыми типами данных
до тех пор, пока вы можете использовать exec (), вы можете выполнять команды оболочки через ваш PHP-код.
Итак, предполагая, что вы знаете, как написать mysqldump в командной строке, т. е.
mysqldump -u [username] -p [database] > [database].sql
затем вы можете использовать это в качестве параметра exec() функции.
exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");
здесь вы можете найти комплексное решение для дампа структуры mysql и данных, как в PMA(и без использования exec, passthru и т.д.):
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); ?>
работает как шарм :-)
в целях безопасности рекомендуется указывать пароль в файле конфигурации, а не в команде (пользователь может выполнить
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);
ответ Майорлео указал мне в правильном направлении, но это не сработало для меня. Я нашел этот сайт Это следует тому же подходу и действительно работает.
$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}");
Я надеюсь, что это поможет кому-то еще!
ни один из вышеперечисленных кодов не работал для меня. Я использую windows. Ниже код работал для меня...
$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"; }
Это позволит сохранить файл в папке проекта в соответствии с вашим запросом данные, которые вы хотите. Если вы хотите сбросить всю базу данных или таблицу, то вы можете использовать эта ссылка http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx
Ну, вы всегда можете использовать вызов системной функции PHP.
http://php.net/manual/en/function.system.php
http://www.php.net/manual/en/function.exec.php
который запускает любую программу командной строки из PHP.
<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>
вы можете расширить команду с любыми опциями mysqldump принимает конечно. Используйте
man mysqldump
для большего количества вариантов (но я думаю, вы это знали;))
вот еще один вариант на основе PHP:https://github.com/2createStudio/shuttle-export
для дампа базы данных с помощью shell_exec (), ниже приведен метод :
shell_exec('mysqldump -h localhost -u username -ppassword databasename | gzip > dbname.sql.gz');
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;
<?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"); ?>
У меня тоже была такая ситуация, и я не мог найти инструмент, чтобы работать на меня. Поэтому с целью резервного копирования и восстановления данных MYSQL с PHP я сделал программу, которая может сжимать данные в zip-файл, который вы можете скачать. Позже вы можете загрузить и восстановить полную базу данных. Вы можете найти его на моем Github страница