sql >> Database >  >> RDS >> Mysql

Waarom werkt mijn databaseback-upscript niet in php?

Dit zal niet werken om een ​​back-up van uw database te maken als een SQL-script, tenzij uw database slechts een speelgoeddatabase is, het equivalent van een "hello world"-script.

Dat script is verschrikkelijk. Gebruik het niet om een ​​back-up van een database te maken. Dat script is eerder gepost:PHP-database Dumpscript - zijn er problemen?

  • Geen foutcontrole na mysql_connect() of mysql_queries(). Je hebt waarschijnlijk gewoon een verkeerd wachtwoord gegeven of zoiets, maar je zou het nooit weten omdat het script niet verifieert dat de verbinding succesvol was.

  • Het zal niet het juiste INSERT-statement produceren als uw database NULL's bevat.

  • Tekensets worden niet behandeld.

  • addlashes() is niet geschikt voor het ontsnappen van gegevens.

  • Tabelnamen zijn niet gescheiden.

  • Maakt geen back-up van weergaven, procedures, functies of triggers.

  • mysql_query() buffert resultaten, dus als je een tabel hebt met duizenden rijen of meer, overschrijdt je je PHP-geheugenlimiet. In feite voegt het script de reeks INSERT-instructies samen tot één enkele PHP-variabele. Dus voordat het klaar is, heb je je gehele database vertegenwoordigd in het geheugen.

Niemand zou dat script ooit moeten gebruiken. Het is volslagen onzin, en dat zeg ik niet lichtvaardig.

Gebruik gewoon shellexec() om mysqldump uit te voeren.

@Álvaro G. Vicario heeft een goed punt, je hoeft voor deze taak zelfs geen PHP te gebruiken. Ik ging ervan uit dat je een back-up moet maken van een PHP-script. Hier is hoe ik een back-up zou maken van een cron-script:

Maak een shellscript, het kan worden genoemd wat je wilt, b.v. mijnmysqldump.sh. Zo zou ik het schrijven:

:
: ${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}

Pas de waarden van de variabelen natuurlijk naar behoefte aan voor uw omgeving.

U merkt misschien dat de gebruikersnaam en het wachtwoord niet . zijn in dit bestand. Zet alstublieft geen wachtwoorden in scripts in platte tekst, zodat iedereen ze kan lezen. In plaats daarvan plaatsen we ze in een optiebestand om het veiliger te maken.

Maak een speciale gebruiker van het besturingssysteem die de back-up vanuit cron gaat uitvoeren. Uw systeem heeft mogelijk een speciale gebruiker "mysql" of "_mysql" om de MySQL-server uit te voeren, maar deze gebruiker kan zijn geconfigureerd om geen geldige thuismap te hebben. U hebt een gebruiker nodig die een homedirectory heeft. Laten we het "mijnback-up" noemen.

Maak in de homedirectory van die gebruiker een bestand .my.cnf met de volgende inhoud:

[mysqldump]
user = alupto_backup
password = xyzzy

Waar "alupto_backup" en "xyzzy" de MySQL-gebruikersnaam en het bijbehorende wachtwoord zijn (wijzig deze voor uw omgeving). Stel het eigendom en de modus van dit bestand zo in dat alleen de eigenaar het kan lezen:

chown mybackup .my.cnf
chmod 600 .my.cnf

Maak een bin-map onder de home van deze gebruiker en plaats ons shellscript erin.

mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin

Nu kunt u het shellscript uitvoeren om het te testen:

sh ~mybackup/bin/mymysqldump

Maak nu een cron-bestand voor deze gebruiker:

crontab -u mybackup

@daily ~mybackup/bin/mymysqldump

Dat zou het moeten zijn.



  1. Door komma's gescheiden tekenreeks ontleden om IN Lijst met tekenreeksen in de Where-component te maken

  2. 6 manieren om een ​​tekenreeks en een getal samen te voegen in SQL Server

  3. Hoe de laatst ingevoegde id te krijgen?

  4. Hoe werkt de 'in'-clausule in orakel