Anforderungen | Installieren | Erste Schritte | API | Einstellungen | PDO-Einstellungen | TODO | Lizenz | Credits
Dies ist eine PHP-Version von mysqldump cli, die mit MySQL geliefert wird, ohne Abhängigkeiten, Ausgabekomprimierung und vernünftige Standardeinstellungen.
MySQLDump-PHP unterstützt standardmäßig die Sicherung von Tabellenstrukturen, den Daten selbst, Ansichten, Triggern und Ereignissen.
MySQLDump-PHP ist die einzige Bibliothek, die Folgendes unterstützt:
Ab Version 2.0 werden Verbindungen zur Datenbank über den Standard-DSN hergestellt, der in der PDO-Verbindungszeichenfolge dokumentiert ist.
Verwenden von Composer:
$ composer require ifsnop/mysqldump-php
Curl verwenden, um immer die neueste Version herunterzuladen und zu dekomprimieren:
$ 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
Mit Autoloader/Composer:
<?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 ();
}Einfaches altes PHP:
<?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 ' );Im Wiki finden Sie einige Beispiele und einen Vergleich zwischen mysqldump- und mysqldump-php-Dumps.
Sie können ein Callable registrieren, das zum Transformieren von Werten während des Exports verwendet wird. Ein Beispielanwendungsfall hierfür ist das Entfernen sensibler Daten aus Datenbank-Dumps:
$ 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 ' );Sie können ein Callable registrieren, das zur Meldung des Dump-Fortschritts verwendet wird
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
}); Sie können tabellenspezifische „Where“-Klauseln registrieren, um die Daten pro Tabelle zu begrenzen. Diese überschreiben die Standardeinstellung where Dump“:
$ 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 '
));Sie können tabellenspezifische „Limits“ registrieren, um die zurückgegebenen Zeilen pro Tabelle zu begrenzen:
$ 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 , um alle Tabellen zu ignorierenDie folgenden Optionen sind jetzt standardmäßig aktiviert und können nicht deaktiviert werden, da sie immer verwendet werden sollten.
Um eine Datenbank zu sichern, benötigen Sie die folgenden Berechtigungen:
Verwenden Sie SHOW GRANTS FOR user@host; um zu wissen, welche Privilegien der Benutzer hat. Weitere Informationen finden Sie unter folgendem Link:
Welche Mindestberechtigungen sind erforderlich, um ein Backup eines MySQL-Datenbankschemas zu erhalten?
Der aktuelle Code zum Testen ist ein hässlicher Hack. Wahrscheinlich gibt es mit PHPUnit viel bessere Möglichkeiten, dies zu tun, daher sind PRs willkommen. Das Testskript erstellt und füllt eine Datenbank mit allen möglichen Datentypen. Dann exportiert es es sowohl mit mysqldump-php als auch mit mysqldump und vergleicht die Ausgabe. Nur wenn es identisch ist, sind Tests in Ordnung. Nach diesem Commit werden einige Tests mit phpunit durchgeführt.
Einige Tests werden übersprungen, wenn der MySQL-Server sie nicht unterstützt.
Einige Tests vergleichen nur den ursprünglichen SQL-Code mit dem von mysqldump-php generierten SQL, da einige Optionen in mysqldump nicht verfügbar sind.
Nach diesem Fehlerbericht wurde ein neuer eingeführt. _binary wird auch angehängt, wenn die Hex-Blob-Option verwendet wird, wenn der Wert leer ist.
mysqldump-php ist nicht abwärtskompatibel mit PHP 5.2, da es Namespaces verwendet. Es könnte jedoch bei Bedarf trivial behoben werden.
Schreiben Sie weitere Tests, testen Sie auch mit Mariadb.
Formatieren Sie den gesamten Code gemäß den PHP-FIG-Standards. https://www.php-fig.org/
Bei diesem Projekt handelt es sich um Open-Source-Software, die unter der GPL-Lizenz lizenziert ist
Nach über 8 Jahren ist vom ursprünglichen Quellcode kaum noch etwas übrig, aber:
Ursprünglich basierend auf dem Drehbuch von James Elliott aus dem Jahr 2009. https://code.google.com/archive/p/db-mysqldump/
Angepasst und erweitert von Michael J. Calkins. https://github.com/clouddueling
Derzeit von Diego Torres gepflegt, weiterentwickelt und verbessert. https://github.com/ifsnop