Repo ini berisi kelas yang mudah digunakan untuk membuang database menggunakan PHP. Saat ini MySQL, PostgreSQL, SQLite dan MongoDB didukung. Di belakang layar mysqldump
, pg_dump
, sqlite3
dan mongodump
digunakan.
Berikut adalah contoh sederhana cara membuat dump database dengan driver berbeda:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::buat() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
.
MongoDB
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.gz');
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Untuk membuang mysqldump
MySQL-db harus diinstal.
Untuk membuang pg_dump
PostgreSQL-db harus diinstal.
Untuk membuang sqlite3
SQLite-db harus diinstal.
Untuk membuang mongodump
MongoDB-db harus diinstal.
Untuk mengompresi file dump, gzip
dan/atau bzip2
harus diinstal.
Anda dapat menginstal paket melalui composer:
komposer memerlukan spatie/db-dumper
Ini adalah cara paling sederhana untuk membuat dump dari db MySql:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.sql');
Jika Anda bekerja dengan PostgreSQL, cukup gunakan dumper itu, sebagian besar metode tersedia di MySql. dan dumper PostgreSql.
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.sql');
Jika biner mysqldump
(atau pg_dump
) dipasang di lokasi non-default, Anda dapat memberi tahu paket dengan menggunakan fungsi setDumpBinaryPath()
-:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/kustom/lokasi') ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->dumpToFile('dump.sql');
Jika aplikasi Anda diterapkan dan Anda perlu mengubah host (defaultnya adalah 127.0.0.1), Anda dapat menambahkan fungsi setHost()
-:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->setHost($host) ->dumpToFile('dump.sql');
Saat membuat dump database, Anda mungkin perlu mengontrol penyertaan nilai AUTO_INCREMENT. Hal ini penting untuk menghindari konflik kunci primer atau untuk menjaga konsistensi ID saat mentransfer data antar lingkungan.
Untuk menghilangkan nilai AUTO_INCREMENT dari tabel di dump Anda, gunakan metode skipAutoIncrement. Hal ini sangat berguna untuk mencegah konflik ketika mengimpor dump ke database lain di mana nilai AUTO_INCREMENT tertentu mungkin sudah ada, atau ketika nilai sebenarnya tidak relevan.
SpatieDbDumperDatabasesMySql::create() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->lewatiPeningkatanOtomatis() ->dumpToFile('dump.sql');
Secara default, nilai AUTO_INCREMENT disertakan dalam dump. Namun, jika sebelumnya Anda menggunakan metode skipAutoIncrement dan ingin memastikan bahwa nilai AUTO_INCREMENT disertakan dalam dump berikutnya, gunakan metode dontSkipAutoIncrement untuk menyertakannya secara eksplisit.
SpatieDbDumperDatabasesMySql::create() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->janganLewatiPeningkatanOtomatis() ->dumpToFile('dump.sql');
Di beberapa aplikasi atau lingkungan, kredensial database disediakan sebagai URL, bukan sebagai komponen individual. Dalam hal ini, Anda dapat menggunakan metode setDatabaseUrl
alih-alih metode individual.
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
Saat memberikan URL, paket akan secara otomatis menguraikannya dan menyediakan masing-masing komponen ke dumper yang berlaku.
Misalnya, jika Anda memberikan URL mysql://username:password@hostname:3306/dbname
, dumper akan menggunakan hostname
host, berjalan pada port 3306
, dan akan terhubung ke dbname
dengan username
dan password
.
Menggunakan larik:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->termasukTabel(['tabel1', 'tabel2', 'tabel3']) ->dumpToFile('dump.sql');
Menggunakan string:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->includeTables('table1, table2, table3') ->dumpToFile('dump.sql');
Untuk menggunakan " --column-statistics=0 " sebagai opsi dalam perintah mysqldump Anda dapat menggunakan metode doNotUseColumnStatistics() .
Jika Anda telah menginstal mysqldump 8 , ia akan menanyakan tabel kolom_statika default di database information_schema . Di beberapa versi lama MySql (layanan) seperti 5.7, tabel ini tidak ada. Jadi Anda bisa mendapatkan pengecualian selama eksekusi mysqldump. Untuk menghindari hal ini, Anda dapat menggunakan metode doNotUseColumnStatistics() .
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->janganGunakanStatistikKolom() ->dumpToFile('dump.sql');
Anda dapat mengecualikan tabel dari dump dengan menggunakan array:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->excludeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
Atau dengan menggunakan string:
SpatieDbDumperDatabasesMySql::create() ->setDbName($namadatabase) ->setNamaPengguna($NamaPengguna) ->setPassword($kata sandi) ->excludeTables('tabel1, tabel2, tabel3') ->dumpToFile('dump.sql');
Anda dapat menggunakan doNotCreateTables
untuk mencegah penulisan pernyataan buat.
$dumpCommand = MySql::buat() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credentials.txt');
Anda dapat menggunakan doNotDumpData
untuk mencegah penulisan data baris.
$dumpCommand = MySql::buat() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
Jika Anda ingin menambahkan opsi arbitrer ke perintah dump, Anda dapat menggunakan addExtraOption
$dumpCommand = MySql::buat() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->tambahkanOpsi Ekstra('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
Jika Anda bekerja dengan MySql, Anda dapat mengatur nama database menggunakan --databases
sebagai opsi tambahan. Hal ini sangat berguna bila digunakan bersama dengan opsi --add-drop-database
mysqldump
(lihat dokumen mysqldump).
$dumpCommand = MySql::buat() ->setUserName('nama pengguna') ->setPassword('kata sandi') ->tambahkanExtraOption('--nama db database') ->tambahkanOpsi Ekstra('--tambahkan-jatuhkan-database') ->getDumpCommand('dump.sql', 'credentials.txt');
Dengan MySql, Anda juga memiliki opsi untuk menggunakan opsi tambahan --all-databases
. Ini berguna ketika Anda ingin menjalankan pencadangan penuh semua database di koneksi MySQL yang ditentukan.
$dumpCommand = MySql::buat() ->setUserName('nama pengguna') ->setPassword('kata sandi') ->tambahkanExtraOption('--semua-database') ->getDumpCommand('dump.sql', 'credentials.txt');
Harap dicatat bahwa menggunakan ->addExtraOption('--databases dbname')
atau ->addExtraOption('--all-databases')
akan mengganti nama database yang ditetapkan pada panggilan ->setDbName()
sebelumnya.
Jika Anda ingin file keluaran dikompresi, Anda dapat menggunakan kelas kompresor.
Ada dua kompresor yang dikeluarkan dari kotaknya:
GzipCompressor
- Ini akan memampatkan db dump Anda dengan gzip
. Pastikan gzip
diinstal pada sistem Anda sebelum menggunakan ini.
Bzip2Compressor
- Ini akan mengompresi db dump Anda dengan bzip2
. Pastikan bzip2
diinstal pada sistem Anda sebelum menggunakan ini.
$dumpCommand = MySql::buat() ->setDbName('namadb') ->setUserName('nama pengguna') ->setPassword('kata sandi') ->useCompressor(new GzipCompressor()) // atau `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Anda dapat membuat kompresor Anda sendiri dengan mengimplementasikan antarmuka Compressor
. Berikut tampilan antarmukanya:
namespace SpatieDbDumperCompressors;kompresor antarmuka {fungsi publik useCommand(): string;fungsi publik useExtension(): string; }
useCommand
seharusnya mengembalikan perintah kompresi tempat db dump akan dipompa. Berikut implementasi GzipCompression
.
namespace SpatieDbDumperCompressors;kelas GzipCompressor mengimplementasikan Kompresor {fungsi publik useCommand(): string{return 'gzip'; }fungsi publik useExtension(): string{return 'gz'; } }
$ tes komposer
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Silakan lihat KONTRIBUSI untuk rinciannya.
Harap tinjau kebijakan keamanan kami tentang cara melaporkan kerentanan keamanan.
Freek Van der Herten
Semua Kontributor
Dukungan awal PostgreSQL disumbangkan oleh Adriano Machado. Dukungan SQLite disumbangkan oleh Peter Matseykanets.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.