Это не будет работать для резервного копирования базы данных в виде сценария SQL, если только ваша база данных не является просто игрушечной базой данных, эквивалентной сценарию "hello world".
Этот сценарий ужасен. Вы не должны использовать его для резервного копирования базы данных. Этот скрипт был опубликован ранее: Скрипт дампов базы данных PHP - есть ли проблемы?
Нет проверки ошибок после mysql_connect () или mysql_queries (). Возможно, вы просто указали неверный пароль или что-то в этом роде, но никогда не узнаете, потому что скрипт не проверяет, что соединение было успешным.
Это не приведет к правильному утверждению INSERT, если ваша база данных содержит пустые значения.
Наборы символов не обрабатываются.
addlashes () - не подходит для экранирования данных.
Имена таблиц не разделены.
Не копирует представления, процедуры, функции или триггеры.
mysql_query () буферизует результаты, поэтому, если у вас есть таблица с тысячами строк или более, вы превысите предел памяти PHP. Фактически, скрипт объединяет ряд операторов INSERT в одну переменную PHP. Поэтому, прежде чем он завершится, ваша база данных вся будет представлена в памяти.
Никто никогда не должен использовать этот сценарий. Это полный мусор, и я не говорю это слегка.
Просто используйте shellexec () для запуска mysqldump.
@ Альваро Г. Викарио имеет хорошую точку зрения, вам даже не нужно использовать PHP для этой задачи. Я предполагал, что вам нужно сделать резервную копию из сценария PHP. Вот как я могу создать резервную копию из скрипта cron:
Создайте сценарий оболочки, он может называться как угодно, например, mymysqldump.sh. Вот как бы я это написал:
:
: ${BACKUP_HOST:="localhost"}
: ${BACKUP_DATABASE:="mydatabase"}
: ${BACKUP_DIR:="/opt/local/var/db/mysql5/backups"}
: ${BACKUP_FILE:="${DATABASE}-`date +%Y%m%d%H%M%S`"}
mysqldump -h ${BACKUP_HOST} ${BACKUP_DATABASE} > ${BACKUP_DIR}/${BACKUP_FILE}
Конечно, настройте значения переменных в соответствии с требованиями вашей среды.
Вы можете заметить, что имя пользователя и пароль не в этом файле. Пожалуйста, не помещайте пароли в сценарии в виде простого текста, чтобы каждый мог их прочитать. Вместо этого мы поместим их в файл опций, чтобы сделать его более безопасным.
Создайте специального пользователя операционной системы, который будет запускать резервное копирование из cron. Ваша система может иметь специального пользователя «mysql» или «_mysql» для запуска MySQL Server, но этот пользователь может быть настроен на отсутствие допустимого домашнего каталога. Вам нужен пользователь, у которого есть домашний каталог. Давайте назовем это «mybackup».
В домашнем каталоге этого пользователя создайте файл .my.cnf
со следующим содержимым:
[mysqldump]
user = alupto_backup
password = xyzzy
Где "alupto_backup" и "xyzzy" - это имя пользователя MySQL и его пароль (измените их для вашей среды). Установите владельца и режим для этого файла, чтобы его мог прочитать только его владелец:
chown mybackup .my.cnf
chmod 600 .my.cnf
Создайте каталог bin под домом этого пользователя и поместите в него наш сценарий оболочки.
mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin
Теперь вы можете запустить скрипт оболочки, чтобы проверить его:
sh ~mybackup/bin/mymysqldump
Теперь создайте файл cron для этого пользователя:
crontab -u mybackup
@daily ~mybackup/bin/mymysqldump
Так и должно быть.