Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо моят скрипт за архивиране на база данни не работи в php?

Това няма да работи за архивиране на вашата база данни като SQL скрипт, освен ако вашата база данни не е просто база данни играчки, еквивалент на скрипт „здравей свят“.

Този сценарий е ужасяващ. Не трябва да го използвате за архивиране на база данни. Този скрипт е бил публикуван преди:PHP база данни Изхвърляне на скрипт – има ли проблеми?

  • Няма проверка на грешки след mysql_connect() или mysql_queries(). Вероятно просто сте дали грешна парола или нещо подобно, но никога няма да разберете, защото скриптът не потвърждава, че връзката е била успешна.

  • Той няма да произведе правилния израз INSERT, ако вашата база данни съдържа NULL.

  • Наборите от знаци не се обработват.

  • addslashes() е не е подходящ за екраниране на данни.

  • Имената на таблиците не са разделени.

  • Не архивира изгледи, процедури, функции или тригери.

  • mysql_query() буферира резултатите, така че ако имате таблица с хиляди редове или повече, ще надхвърлите лимита на вашата PHP памет. Всъщност скриптът обединява поредицата от оператори INSERT в една PHP променлива. Така че преди да приключи, ще имате цялото база данни, представена в паметта.

Никой никога не трябва да използва този скрипт. Това е пълен боклук и не го казвам лекомислено.

Просто използвайте shellexec(), за да стартирате mysqldump.

@Álvaro G. Vicario има добра точка, няма нужда дори да използвате 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 сървъра, но този потребител може да е конфигуриран да няма валидна домашна директория. Имате нужда от потребител, който има домашна директория. Нека го наречем „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

Това трябва да е.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ефективно наблюдение на MySQL с табла за управление на SCUMM:част 3

  2. SELECT / GROUP BY - сегменти от време (10 секунди, 30 секунди и т.н.)

  3. MYSQL връща дублиращи се редове

  4. Entity Framework + генериране на клас MySQL

  5. Най-лесният начин да конвертирате Blob в масив от байтове