Вот информация, которая у меня есть:
Я работаю с системой на базе Linux с использованием MySQL и PHP5. Мне нужно создать mysqldump
файл из файла .php, а затем сохранить этот дамп в файле на сервере в указанном мной месте.
Поскольку я новичок в PHP, мне бы хотелось, чтобы кто-нибудь дал мне некоторую помощь, руководство или код, который бы делал то, что мне нужно. Это должно быть запущено удаленно из Интернета.
mysqldump
bysystem()
.Ответы:
Вы можете использовать эту
exec()
функцию для выполнения внешней команды.Примечание: между
shell_exec()
иexec()
я бы выбрал второй, который не возвращает вывод в сценарий PHP - нет необходимости, чтобы сценарий PHP получал весь дамп SQL в виде строки: вам нужно только записать его в файл, и это можно сделать самой командой.Эта внешняя команда:
mysqldump
с правильными параметрами,Например :
Это означает, что ваш PHP-код будет выглядеть так:
Разумеется, вам решать, как использовать правильную информацию о подключении, заменив
...
те.источник
exec()
не вернется, пока команда не будет завершена; так что просто положите немногоecho "dump complete"
после звонкаexec()
/usr/local/mysql/bin/mysqldump
exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
Если вы хотите создать резервную копию, чтобы загрузить ее через браузер, вы также можете сделать это без использования файла.
Функция php passthru () будет напрямую перенаправлять вывод mysqldump в браузер. В этом примере он также будет заархивирован.
Pro: вам не нужно иметь дело с временными файлами.
Против: не работает в Windows. Могут иметь ограничения с огромными наборами данных.
источник
Взгляните сюда: https://github.com/ifsnop/mysqldump-php ! Это нативное решение, написанное на php.
Вы можете установить его с помощью composer, и это очень просто:
Он поддерживает опытных пользователей с множеством параметров, скопированных из исходного mysqldump.
Все параметры описаны на странице github, но более или менее понятны автоматически:
источник
exec
и / илиshell_exec
отключены системой безопасности, mysqldump-php отлично работает! Просто попробовал прямо сейчас на серверах Umbler и успешно получил дамп. Большое спасибо за подсказку!Перейдите по следующей ссылке, которая содержит сценарий, который поможет вам: http://davidwalsh.name/backup-mysql-database-php
Примечание. Этот сценарий может содержать ошибки с типами данных NULL.
источник
По соображениям безопасности рекомендуется указывать пароль в файле конфигурации, а не в команде (пользователь может выполнить a
ps aux | grep mysqldump
и увидеть пароль).источник
Здесь вы можете найти комплексное решение для дампа структуры и данных mysql, как в PMA (и без использования exec, passthru и т. Д.):
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
Это форк проекта dszymczuk с моими доработками.
Использование простое
работает как шарм :-)
источник
Пока вам разрешено использовать exec () , вы можете выполнять команды оболочки через свой PHP-код.
Итак, если вы знаете, как написать mysqldump в командной строке, т.е.
тогда вы можете использовать это как параметр функции exec ().
источник
Ответ MajorLeo указал мне правильное направление, но у меня это не сработало. Я нашел этот сайт, который придерживается того же подхода, и работал.
Надеюсь, это поможет кому-то другому!
источник
Что ж, вы всегда можете использовать вызов системной функции 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 (), ниже приведен метод:
источник
источник