Toto nebude fungovat při zálohování vaší databáze jako SQL skriptu, pokud vaše databáze není pouze databází hraček, ekvivalentem skriptu „ahoj světe“.
Ten scénář je otřesný. Neměli byste jej používat k zálohování databáze. Tento skript byl zveřejněn již dříve:PHP databáze Dump Script – jsou nějaké problémy?
-
Žádná kontrola chyb po mysql_connect() nebo mysql_queries(). Pravděpodobně jste právě zadali špatné heslo nebo tak něco, ale to se nikdy nedozvíte, protože skript neověřuje, zda bylo připojení úspěšné.
-
Pokud vaše databáze obsahuje nějaké hodnoty NULL, nevytvoří správný příkaz INSERT.
-
Znakové sady se nezpracovávají.
-
addlashes() je nevhodné pro únik dat.
-
Názvy tabulek nejsou odděleny.
-
Nezálohuje pohledy, procedury, funkce ani spouštěče.
-
mysql_query() ukládá výsledky do vyrovnávací paměti, takže pokud máte tabulku s tisíci řádky nebo více, překročíte limit paměti PHP. Ve skutečnosti skript zřetězí řadu příkazů INSERT do jediné proměnné PHP. Než tedy skončí, budete mít celé databáze zastoupená v paměti.
Nikdo by tento skript nikdy neměl používat. Je to naprostý odpad a neříkám to lehce.
Pro spuštění mysqldump stačí použít shellexec().
@Álvaro G. Vicario má dobrý názor, pro tento úkol není třeba ani používat PHP. Předpokládal jsem, že potřebujete vytvořit zálohu z PHP skriptu. Zde je návod, jak bych vytvořil zálohu ze skriptu cron:
Vytvořte si shellový skript, může se jmenovat jak chcete, např. mymysqldump.sh. Napsal bych to takto:
:
: ${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}
Samozřejmě přizpůsobte hodnoty proměnných podle potřeby pro vaše prostředí.
Můžete si všimnout, že uživatelské jméno a heslo není v tomto souboru. Prosím, nevkládejte hesla do skriptů v prostém textu, aby si je mohl přečíst každý. Místo toho je vložíme do souboru voleb, aby byl bezpečnější.
Vytvořte speciálního uživatele operačního systému, který bude spouštět zálohu z cronu. Váš systém může mít speciálního uživatele "mysql" nebo "_mysql" pro spuštění serveru MySQL, ale tento uživatel může být nakonfigurován tak, aby neměl platný domovský adresář. Potřebujete uživatele, který má domovský adresář. Říkejme tomu „moje záloha“.
V domovském adresáři tohoto uživatele vytvořte soubor .my.cnf
s následujícím obsahem:
[mysqldump]
user = alupto_backup
password = xyzzy
Kde "alupto_backup" a "xyzzy" jsou uživatelské jméno MySQL a jeho heslo (změňte je pro vaše prostředí). Nastavte vlastnictví a režim tohoto souboru tak, aby jej mohl číst pouze jeho vlastník:
chown mybackup .my.cnf
chmod 600 .my.cnf
Vytvořte adresář bin pod domovem tohoto uživatele a vložte do něj náš shell skript.
mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin
Nyní můžete spustit skript shellu a otestovat jej:
sh ~mybackup/bin/mymysqldump
Nyní vytvořte soubor cron pro tohoto uživatele:
crontab -u mybackup
@daily ~mybackup/bin/mymysqldump
To by mělo být ono.