Резервное копирование и загрузка данных общего назначения, включая поддержку InnoDb - PullRequest
11 голосов
/ 17 января 2011

Я хочу решение на основе PHP для резервного копирования базы данных (только данные, а не код) удаленного сервера и загрузки файла. Я знаю, что решения на основе Shell лучше подходят для таких вещей (запуск сценария оболочки в локальной системе и подключение через SSH к удаленной системе), но необходимо иметь решение на основе PHP, в котором достаточно знать URL-адрес и иметь учетные данные базы данных. нетехнолог, чтобы делать резервные копии. Скрипт PHP может быть загружен на удаленный сервер и выполнен.

Ниже приведены функции Я хочу: -

  • Должна иметь как минимум поддержку движка InnoDb - необходимо экспортировать ограничения внешнего ключа. Не вредно, если он поддерживает все другие движки.
  • Должно работать на всех серверах, при наличии максимально возможного количества ограничений (я знаю о нескольких ограничениях, таких как safe_mode включенный, exec(), system() функции отключены и т. Д.). Я хочу очень универсальное решение, которое гарантированно будет работать где угодно.

  • Процесс должен быть аутентифицирован по паролю (запрашивает учетные данные базы данных).

Теперь я ломаю вещи и начинаю с самых основ. Ниже приведены мои предположения о вещах и некоторые вопросы : -

  1. Я не уверен, могут ли системные функции, такие как exec, system и т. Д., Полностью отключаться на серверах общего хостинга или нет. Если они отключены таким образом, что их нельзя переопределить, то решение на основе mysqldump, указанное здесь , не будет работать универсально.
    Вопрос - Если, однако, включен только safe_mode, чтобы системные функции могли выполняться с файлами, присутствующими внутри safe_mode_exec_dir, будет ли решение работать безопасно?

  2. Я задал вопрос о угрозах безопасности при использовании PHP и понял, что файл резервной копии никогда не следует создавать (я полагаю, в случае решения на основе mysqldump, файл резервной копии) необходимо создать перед загрузкой) в веб-пространстве. Таким образом, решение не должно создавать файлы резервных копий (нет проблем, если они создаются в других местах).
    Вопрос - Но позволят ли провайдеры виртуального хостинга это сделать?

  3. Я проверил различные пользовательские PHP-классы общего назначения, такие как phpmysqldump и т. Д., И не нашел использования решения на основе mysqldump с использованием системных команд для резервного копирования. Они делают что-то вроде SHOW CREATE TABLE и т. Д., Чтобы получить все данные о создании таблицы, запросах на вставку данных, а затем загружать их без фактического сохранения их в виде файла (так что никакой угрозы безопасности).
    Вопрос - Правильно ли я пришел к выводу, что они делают все это, не выполняя простого mysqldump, как указано в решении в первом пункте, поскольку это не может быть универсальным и безопасным решением?
    Вопрос - Кроме того, я читал, что нет хороших, которые работают хорошо. Я лично использовал только этот phpmysqldump , и он дает мне ошибки mysql, когда я пытаюсь восстановить базу данных с созданной резервной копией. Запросы в файле дампа также выглядят несколько иначе, чем запросы, созданные модулем экспорта PhpMyAdmin. Я также проверил несколько других бесплатных PHP классов. Похоже, что большинство из них не поддерживают InnoDb и поэтому внешние ограничения ключа, если они присутствуют в базе данных, отсутствуют в экспорте.
    Вопрос - Функциональность экспорта самого PhpMyAdmin, если он присутствует отдельно, может быть решением для меня, я думаю. Кто-нибудь знает какую-нибудь стабильную библиотеку, подобную этой?

Ответы [ 3 ]

2 голосов
/ 19 января 2011

Что я думаю, вы должны сделать:

Я думаю, вам следует установить phpmyadmin на ваш сервер, это позволит вам получить доступ к вашей базе данных из работы / школы / кафе / и т. Д. 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, просто запустите:

root@debian:~ # aptitude install phpmyadmin
root@arch:~ # pacman -S phpmyadmin

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

Рабочая среда MySQL . Его кроссплатформенность и прекрасно работает.

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

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

Автономный Perl-файл, который работает сразу после его настройки: (не проверено)

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);
0 голосов
/ 26 января 2011

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

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

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

0 голосов
/ 20 января 2011

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

...