To nie zadziała w przypadku tworzenia kopii zapasowej bazy danych jako skryptu SQL, chyba że Twoja baza danych jest tylko bazą danych zabawek, odpowiednikiem skryptu „hello world”.
Ten scenariusz jest przerażający. Nie należy go używać do tworzenia kopii zapasowych bazy danych. Ten skrypt został opublikowany wcześniej:Baza danych PHP Skrypt zrzutu — czy są jakieś problemy?
-
Brak sprawdzania błędów po mysql_connect() lub mysql_queries(). Prawdopodobnie po prostu podałeś złe hasło lub coś, ale nigdy się nie dowiesz, ponieważ skrypt nie sprawdza, czy połączenie się powiodło.
-
Nie wygeneruje prawidłowej instrukcji INSERT, jeśli Twoja baza danych zawiera jakiekolwiek wartości NULL.
-
Zestawy znaków nie są obsługiwane.
-
addslashes() jest nieodpowiednie do ucieczki danych.
-
Nazwy tabel nie są rozdzielane.
-
Nie tworzy kopii zapasowych widoków, procedur, funkcji ani wyzwalaczy.
-
mysql_query() buforuje wyniki, więc jeśli masz tabelę z tysiącami wierszy lub więcej, przekroczysz limit pamięci PHP. W rzeczywistości skrypt łączy serię instrukcji INSERT w jedną zmienną PHP. Więc zanim się skończy, będziesz mieć swoje całe baza danych reprezentowana w pamięci.
Nikt nie powinien nigdy używać tego skryptu. To kompletna bzdura i nie mówię tego lekko.
Wystarczy użyć shellexec() do uruchomienia mysqldump.
@Álvaro G. Vicario ma rację, nie musisz nawet używać PHP do tego zadania. Zakładałem, że musisz zrobić kopię zapasową ze skryptu PHP. Oto jak utworzyłbym kopię zapasową ze skryptu cron:
Stwórz skrypt powłoki, można go nazwać jak chcesz, np. mymysqldump.sh. Oto jak bym to napisał:
:
: ${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}
Oczywiście dostosuj wartości zmiennych zgodnie z potrzebami swojego środowiska.
Możesz zauważyć, że nazwa użytkownika i hasło nie w tym pliku. Prosimy nie umieszczać haseł w skryptach w postaci zwykłego tekstu, aby każdy mógł je przeczytać. Zamiast tego umieścimy je w pliku opcji, aby był bezpieczniejszy.
Utwórz specjalnego użytkownika systemu operacyjnego, który będzie uruchamiał kopię zapasową z poziomu crona. Twój system może mieć specjalnego użytkownika "mysql" lub "_mysql" do uruchamiania serwera MySQL, ale ten użytkownik może być skonfigurowany tak, aby nie mieć prawidłowego katalogu domowego. Potrzebujesz użytkownika, który ma katalog domowy. Nazwijmy to „moja kopia zapasowa”.
W katalogu domowym tego użytkownika utwórz plik .my.cnf
o następującej treści:
[mysqldump]
user = alupto_backup
password = xyzzy
Gdzie "alupto_backup" i "xyzzy" to nazwa użytkownika MySQL i jego hasło (zmień je dla swojego środowiska). Ustaw własność i tryb tego pliku tak, aby tylko jego właściciel mógł go odczytać:
chown mybackup .my.cnf
chmod 600 .my.cnf
Utwórz katalog bin w domu tego użytkownika i umieść w nim nasz skrypt powłoki.
mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin
Teraz możesz uruchomić skrypt powłoki, aby go przetestować:
sh ~mybackup/bin/mymysqldump
Teraz utwórz plik cron dla tego użytkownika:
crontab -u mybackup
@daily ~mybackup/bin/mymysqldump
To powinno być.