Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa skrip cadangan basis data saya tidak berfungsi di php?

Ini tidak akan berfungsi untuk mencadangkan database Anda sebagai skrip SQL, kecuali database Anda hanyalah database mainan, yang setara dengan skrip "hello world".

Skrip itu mengerikan. Anda tidak boleh menggunakannya untuk membuat cadangan database. Skrip tersebut telah diposting sebelumnya:Basis Data PHP Skrip Dump - apakah ada masalah?

  • Tidak ada pemeriksaan kesalahan setelah mysql_connect() atau mysql_queries(). Anda mungkin hanya memberikan sandi yang salah atau apa, tetapi Anda tidak akan pernah tahu karena skrip tidak memverifikasi bahwa koneksi berhasil.

  • Itu tidak akan menghasilkan pernyataan INSERT yang benar jika database Anda berisi NULL.

  • Kumpulan karakter tidak ditangani.

  • addlashes() adalah tidak cocok untuk melarikan diri dari data.

  • Nama tabel tidak dibatasi.

  • Tidak mencadangkan tampilan, prosedur, fungsi, atau pemicu.

  • mysql_query() buffer hasil, jadi jika Anda memiliki tabel dengan ribuan baris atau lebih, Anda akan melebihi batas memori PHP Anda. Faktanya, skrip menggabungkan rangkaian pernyataan INSERT ke dalam satu variabel PHP. Jadi sebelum selesai, Anda akan memiliki seluruh database direpresentasikan dalam memori.

Tidak seorang pun boleh menggunakan skrip itu. Ini benar-benar sampah, dan saya tidak mengatakannya dengan enteng.

Cukup gunakan shellexec() untuk menjalankan mysqldump.

@Álvaro G. Vicario memiliki poin bagus, Anda bahkan tidak perlu menggunakan PHP untuk tugas ini. Saya berasumsi Anda perlu membuat cadangan dari skrip PHP. Inilah cara saya membuat cadangan dari skrip cron:

Buat skrip Shell, itu bisa disebut apa pun yang Anda inginkan, mis. mymysqldump.sh. Begini cara saya menulisnya:

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

Tentu saja, sesuaikan nilai variabel sesuai kebutuhan untuk lingkungan Anda.

Anda mungkin memperhatikan bahwa nama pengguna dan sandi bukan dalam berkas ini. Tolong jangan memasukkan kata sandi ke dalam skrip dalam teks biasa sehingga semua orang dapat membacanya. Sebagai gantinya, kami akan memasukkannya ke dalam file opsi untuk membuatnya lebih aman.

Buat pengguna sistem operasi khusus yang akan menjalankan cadangan dari cron. Sistem Anda mungkin memiliki pengguna khusus "mysql" atau "_mysql" untuk menjalankan Server MySQL, tetapi pengguna ini mungkin dikonfigurasi untuk tidak memiliki direktori home yang valid. Anda memerlukan pengguna yang memiliki direktori home. Sebut saja "mybackup".

Di bawah direktori home pengguna itu, buat file .my.cnf dengan isi sebagai berikut:

[mysqldump]
user = alupto_backup
password = xyzzy

Di mana "alupto_backup" dan "xyzzy" adalah nama pengguna MySQL dan kata sandinya (ubah ini untuk lingkungan Anda). Setel kepemilikan dan mode file ini sehingga hanya pemiliknya yang dapat membacanya:

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

Buat direktori bin di bawah rumah pengguna ini dan masukkan skrip shell kita ke dalamnya.

mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin

Sekarang Anda dapat menjalankan skrip shell untuk mengujinya:

sh ~mybackup/bin/mymysqldump

Sekarang buat file cron untuk pengguna ini:

crontab -u mybackup

@daily ~mybackup/bin/mymysqldump

Seharusnya begitu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa lapisan abstraksi basis data yang layak untuk Python

  2. Mengapa terjadi kesalahan saat saya mengirim beberapa kueri ke mysqli_query?

  3. Mengapa password_verify kembali salah?

  4. Catatan android/php tidak dimasukkan ke mysql

  5. cara mudah untuk memilih baris dari semua tabel