Я хочу, чтобы на основе PHP было создано резервное копирование базы данных (только данных, а не кода) удаленного сервера и загрузка файла. Я знаю, что решения на основе Shell лучше подходят для выполнения таких задач (запуск оболочки script в локальной системе и подключение через SSH к удаленной системе), но это требование иметь решение на базе PHP, где знание URL-адреса и наличие учетных данных для базы данных достаточно, чтобы нетехник взял резервные копии. PHP скрипт может быть загружен на удаленный сервер и выполнен.
Ниже приведены функции. Я хочу: -
- Должен иметь поддержку движка InnoDb по крайней мере - внешние ограничения ключа должны быть экспортированы. Нет вреда, если он поддерживает все другие двигатели.
-
Должно работать на всех серверах при наличии максимально возможного количества ограничений (я знаю о нескольких ограничениях, таких как
safe_mode
enabled,exec()
,system()
функции отключены и т.д.). Я хочу очень универсальное решение, которое гарантированно будет работать где угодно. -
Процесс должен быть аутентифицирован паролем (запрашивает учетные данные для базы данных).
Теперь я разрушаю вещи и начинаю с самых оснований. Ниже приведены мои предположения о вещах и некоторые вопросы: -
-
Я не уверен, что системные функции, такие как
exec
,system
и т.д., могут быть полностью отключены на серверах с общим хостингом или нет. Если они отключены таким образом, что их нельзя переопределить, то решениеmysqldump
, данное здесь, не будет работать повсеместно.
Вопрос - Если, однако, существует толькоsafe_mode
, что системные функции могут выполняться на файлах, находящихся внутриsafe_mode_exec_dir
, будет ли решение работать надежно? -
Я задал вопрос о рисках безопасности при использовании PHP и понял, что файл резервной копии никогда не должен создаваться (я полагаю, в случае
mysqldump
, сначала необходимо создать файл резервной копии перед загрузкой) в веб-пространстве. Таким образом, решение не должно нуждаться в резервных файлах, которые будут созданы там (без проблем, если они создаются в других местах).
Вопрос - Но, предоставят ли хостинг-провайдеры это? -
Я проверил различные общедоступные пользовательские классы PHP, такие как phpmysqldump и т.д. и не нашел использования
mysqldump
, используя системные команды для резервного копирования. Они делают такие вещи, какSHOW CREATE TABLE
и т.д., Чтобы получить все создание таблиц, запросы на ввод данных, а затем загрузить эти вещи, не сохраняя при этом его как файл (так что не угроза безопасности).
Вопрос - Правильно ли я заключаю, что они делают все это без простогоmysqldump
, как указано в решении в первой точке, потому что это не может быть универсальным и безопасным решением? Вопрос - Кроме того, я читал, что нет хороших, которые хорошо работают. Я лично использовал только этот phpmysqldump, и он дает мне mysql-ошибки при попытке восстановить базу данных с созданной резервной копией. Запросы в файле дампа также несколько отличаются от запросов, созданных модулем экспорта PhpMyAdmin. Я также проверил несколько других классов PHP, добавленных пользователем. Похоже, что большинство из них не поддерживают поддержку InnoDb и поэтому ограничения ключа foriegn, если они присутствуют в базе данных, в экспорте отсутствуют.
Вопрос - Я полагаю, что для меня может быть решение для экспорта самой функции PhpMyAdmin, если она присутствует отдельно. Кто-нибудь знает о какой-либо стабильной библиотеке, подобной этой?