Persyaratan | Menginstal | Memulai | API | Pengaturan | Pengaturan PDO | TODO | Lisensi | Kredit
Ini adalah versi php dari mysqldump cli yang hadir dengan MySQL, tanpa ketergantungan, kompresi keluaran, dan default yang wajar.
MySQLDump-PHP mendukung pencadangan struktur tabel, data itu sendiri, tampilan, pemicu, dan peristiwa.
MySQLDump-PHP adalah satu-satunya perpustakaan yang mendukung:
Mulai versi 2.0, koneksi ke database dibuat menggunakan DSN standar, yang didokumentasikan dalam string koneksi PDO.
Menggunakan Komposer:
$ composer require ifsnop/mysqldump-php
Menggunakan Curl untuk selalu mengunduh dan mendekompresi rilis terbaru:
$ curl --silent --location https://api.github.com/repos/ifsnop/mysqldump-php/releases | grep -i tarball_url | head -n 1 | cut -d '"' -f 4 | xargs curl --location --silent | tar xvz
Dengan Pemuat Otomatis/Komposer:
<?php
use Ifsnop Mysqldump as IMysqldump ;
try {
$ dump = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
} catch ( Exception $ e ) {
echo ' mysqldump-php error: ' . $ e -> getMessage ();
}
PHP lama biasa:
<?php
include_once ( dirname ( __FILE__ ) . ' /mysqldump-php-2.0.0/src/Ifsnop/Mysqldump/Mysqldump.php ' );
$ dump = new Ifsnop Mysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
Lihat wiki untuk beberapa contoh dan perbandingan antara dump mysqldump dan mysqldump-php.
Anda dapat mendaftarkan callable yang akan digunakan untuk mengubah nilai selama ekspor. Contoh kasus penggunaan untuk ini adalah menghapus data sensitif dari dump database:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTransformTableRowHook ( function ( $ tableName , array $ row ) {
if ( $ tableName === ' customers ' ) {
$ row [ ' social_security_number ' ] = ( string ) rand ( 1000000 , 9999999 );
}
return $ row ;
});
$ dumper -> start ( ' storage/work/dump.sql ' );
Anda dapat mendaftarkan callable yang akan digunakan untuk melaporkan kemajuan dump
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
Anda dapat mendaftarkan klausa 'di mana' khusus tabel untuk membatasi data per tabel. Ini mengesampingkan pengaturan where
pembuangan default:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableWheres ( array (
' users ' => ' date_registered > NOW() - INTERVAL 3 MONTH AND deleted=0 ' ,
' logs ' => ' date_logged > NOW() - INTERVAL 1 DAY ' ,
' posts ' => ' isLive=1 '
));
Anda dapat mendaftarkan 'batas' khusus tabel untuk membatasi baris yang dikembalikan berdasarkan per tabel:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableLimits ( array (
' users ' => 300 ,
' logs ' => 50 ,
' posts ' => 10
));
/**
* Constructor of Mysqldump. Note that in the case of an SQLite database
* connection, the filename must be in the $db parameter.
*
* @param string $dsn PDO DSN connection string
* @param string $user SQL account username
* @param string $pass SQL account password
* @param array $dumpSettings SQL database settings
* @param array $pdoSettings PDO configured attributes
*/
public function __construct(
$ dsn = '' ,
$ user = '' ,
$ pass = '' ,
$ dumpSettings = array (),
$ pdoSettings = array ()
)
$ dumpSettingsDefault = array (
' include-tables ' => array (),
' exclude-tables ' => array (),
' compress ' => Mysqldump:: NONE ,
' init_commands ' => array (),
' no-data ' => array (),
' if-not-exists ' => false ,
' reset-auto-increment ' => false ,
' add-drop-database ' => false ,
' add-drop-table ' => false ,
' add-drop-trigger ' => true ,
' add-locks ' => true ,
' complete-insert ' => false ,
' databases ' => false ,
' default-character-set ' => Mysqldump:: UTF8 ,
' disable-keys ' => true ,
' extended-insert ' => true ,
' events ' => false ,
' hex-blob ' => true , /* faster than escaped content */
' insert-ignore ' => false ,
' net_buffer_length ' => self :: MAXLINESIZE ,
' no-autocommit ' => true ,
' no-create-db ' => false ,
' no-create-info ' => false ,
' lock-tables ' => true ,
' routines ' => false ,
' single-transaction ' => true ,
' skip-triggers ' => false ,
' skip-tz-utc ' => false ,
' skip-comments ' => false ,
' skip-dump-date ' => false ,
' skip-definer ' => false ,
' where ' => '' ,
/* deprecated */
' disable-foreign-keys-check ' => true
);
$ pdoSettingsDefaults = array (
PDO :: ATTR_PERSISTENT => true ,
PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ,
PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY => false
);
// missing settings in constructor will be replaced by default options
$ this -> _pdoSettings = self :: array_replace_recursive ( $ pdoSettingsDefault , $ pdoSettings );
$ this -> _dumpSettings = self :: array_replace_recursive ( $ dumpSettingsDefault , $ dumpSettings );
true
untuk mengabaikan semua tabelOpsi berikut ini sekarang diaktifkan secara default, dan tidak ada cara untuk menonaktifkannya karena opsi tersebut harus selalu digunakan.
Untuk membuang database, Anda memerlukan hak istimewa berikut:
Gunakan TAMPILKAN HIBAH UNTUK pengguna@host; untuk mengetahui hak istimewa apa yang dimiliki pengguna. Lihat tautan berikut untuk informasi lebih lanjut:
Apa hak istimewa minimum yang diperlukan untuk mendapatkan cadangan skema database MySQL?
Kode saat ini untuk pengujian adalah peretasan yang buruk. Mungkin ada cara yang lebih baik untuk melakukannya menggunakan PHPUnit, jadi PR dipersilakan. Skrip pengujian membuat dan mengisi database menggunakan semua tipe data yang mungkin. Kemudian mengekspornya menggunakan mysqldump-php dan mysqldump, dan membandingkan hasilnya. Hanya jika tesnya identik, tidak masalah. Setelah komit ini, beberapa tes dilakukan menggunakan phpunit.
Beberapa tes dilewati jika server mysql tidak mendukungnya.
Beberapa tes hanya membandingkan antara kode sql asli dan sql yang dihasilkan mysqldump-php, karena beberapa opsi tidak tersedia di mysqldump.
Setelah laporan bug ini, yang baru telah diperkenalkan. _binary ditambahkan juga ketika opsi hex-blob digunakan, jika nilainya kosong.
mysqldump-php tidak kompatibel dengan php 5.2 karena kami menggunakan namespace. Namun, hal ini dapat diperbaiki dengan mudah jika diperlukan.
Tulis lebih banyak tes, uji juga dengan mariadb.
Format semua kode ke standar PHP-FIG. https://www.php-fig.org/
Proyek ini adalah perangkat lunak sumber terbuka yang dilisensikan di bawah lisensi GPL
Setelah lebih dari 8 tahun, hampir tidak ada yang tersisa dari kode sumber aslinya, namun:
Awalnya berdasarkan skrip James Elliott dari tahun 2009. https://code.google.com/archive/p/db-mysqldump/
Diadaptasi dan diperluas oleh Michael J. Calkins. https://github.com/clouddueling
Saat ini dipelihara, dikembangkan dan ditingkatkan oleh Diego Torres. https://github.com/ifsnop