sql >> Databáze >  >> RDS >> Mysql

Proč můj skript zálohování databáze nefunguje v php?

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.



  1. Laravel Výmluvný dotaz JSON sloupec s Where In?

  2. Jak mohu vstoupit do SQL Server uloženého procesu z mého kódu C#?

  3. Objekt nelze zrušit, protože na něj odkazuje omezení FOREIGN KEY - SQL Server / Výukový program TSQL, část 74

  4. Jak upgradovat MySQL na CentOS