Резервное копирование и загрузка удаленных данных общего назначения - в том числе поддержка InnoDb

Я хочу, чтобы на основе 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, если она присутствует отдельно. Кто-нибудь знает о какой-либо стабильной библиотеке, подобной этой?

Ответ 1

То, что я думаю, вам следует сделать:

Думаю, вы должны установить phpmyadmin на свой сервер, это позволит вам получить доступ к вашей базе данных из work/school/cafe/etc, MySQL-workbench является более продвинутым и дает вам больше возможностей, поэтому вы можете иметь дело с изменением структуры и редактируя любые строки/столбцы, отношения и многое другое, посмотрите на функции phpmyadmin, у которых есть большинство, если не все.

phpmyadmin работает в любом веб-браузере:

Я действительно рекомендовал phpMyAdmin, у него много функций SQL, чтобы помочь вам справиться со всем, когда дело доходит до базы данных MySQL, если вы используете innoDB, тогда вы получите еще больше функций, таких как отношения между таблицами.

phpMyAdmin имеет следующие функции:

  • Интуитивно понятный веб-интерфейс
  • Поддержка большинства функций MySQL:
  • просматривать и удалять базы данных, таблицы, представления, поля и индексы
  • создавать, копировать, удалять, переименовывать и изменять базы данных, таблицы, поля и индексы
  • сервер обслуживания, базы данных и таблицы с предложениями по конфигурации сервера
  • выполнить, отредактировать и пометить любой SQL-оператор, даже пакетные запросы
  • управлять пользователями и привилегиями MySQL
  • управлять хранимыми процедурами и триггерами
  • Импорт данных из CSV и SQL
  • Экспорт данных в различные форматы: CSV, SQL, XML, PDF, ISO/IEC 26300 - OpenDocument Text и Spreadsheet, Word, Excel, LATEX и др.
  • Администрирование нескольких серверов
  • Создание PDF-графики вашего макета базы данных
  • Создание сложных запросов с использованием Query-by-example (QBE)
  • Поиск по всему миру в базе данных или его подмножестве
  • Преобразование сохраненных данных в любой формат с использованием набора предопределенных функций, таких как отображение BLOB-данных в виде изображения или ссылки для загрузки
  • И многое другое.

Все, что вы указали выше, включено в phpMyAdmin, если вы запускаете систему на основе debian или Debian, просто запустите:

[email protected]:~ # aptitude install phpmyadmin
[email protected]:~ # pacman -S phpmyadmin

BTW: если вы не используете Apache или lighttpd для http-сервера, вам нужно будет прочитать файлы conf для phpmyadmin, а затем написать требуемый conf script для phpmyadmin для работы с вашим http-сервером.

Workbench MySQL. Его кросс-платформенный и отлично работает.

Workbench MySQL визуально видит, что вы делаете с вашей базой данных. http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

BTW: используйте <ctrl>+<G> для форматирования базы данных. Мне потребовалось некоторое время, чтобы это выяснить.

Отдельный файл perl, который работает сразу после его настройки: (untested)

use DBI;
my $user = "username";   # MySQL Username
my $pass = "xxxx";       # MySQL Password
my $host = "localhost";  # MySQL Host
my $mydb = "zzzz";       # MySQL Database
my $file = "test.sql";   # Import file
my $sqlServer = "mysql"; # What sql-server are we using, oracle/mysql/etc
    # I would use the following method to configure it, though the above works fine too.
($user,$pass,$host,$mydb,$file,sqlServer) = (
    "username",  # MySQL Username
    "password",  # MySQL Password
    "localhost", # MySQL Host
    "myDB",      # MySQL Database
    "test.sql",  # Imported file
    "mysql"      # What sql-server are we using, oracle/mysql/etc
);
    # Now lets connect to the MySQL server.
my $dbh  = DBI->connect("DBI:$sqlServer:$mydb:$host",$user,$pass)or die DBI->errstr();
    # Lets now open the .sql file.
open(INPUT,$file);
    # Now lets run each sql-statement.
while ($line = <INPUT>){
    print $line;
    $dbh->do($line);
    print "Query failed (run manually):\n$line\n\n ". $dbh->errstr()."\n" if $dbh->errstr();
}
    # Now close the file.
close(INPUT);

Ответ 2

PHPMyAdmin - отличное решение в целом, но может быть излишним, если вы только хотите делать резервные копии. Если вы хотите универсальное решение, то абсолютно не полагайтесь на доступность exec. PHP в сочетании с правильными SQL-запросами (как вы отметили в пункте 3.) может предоставить вам всю необходимую информацию и всегда будет работать.

Ответ 3

В моем собственном опыте, полагаясь на решение для резервного копирования на основе PHP, ОЧЕНЬ плохая идея. Если вы имеете дело с большими резервными копиями, PHP может легко выйти из строя (из-за тайм-аутов, потребления памяти или чего-то undefined).

Мы успешно используем Bacula (http://www.bacula.org/en/) уже много лет на наших серверах un * x. Были ли наши собственные сценарии резервного копирования, которые делают все, что мы хотим сделать. У вас должен быть доступ к оболочке на сервере.

Если вам нужно простое решение для резервного копирования на основе php, вам лучше всего писать свои собственные.:)