Dieses Repo enthält eine einfach zu verwendende Klasse zum Sichern einer Datenbank mit PHP. Derzeit werden MySQL, PostgreSQL, SQLite und MongoDB unterstützt. Hinter den Kulissen kommen mysqldump
, pg_dump
, sqlite3
und mongodump
zum Einsatz.
Hier sind einfache Beispiele für die Erstellung eines Datenbank-Dumps mit verschiedenen Treibern:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
ist die SQLite-Version 3.32.0 erforderlich.
MongoDB
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.gz');
Wir investieren viele Ressourcen in die Erstellung erstklassiger Open-Source-Pakete. Sie können uns unterstützen, indem Sie eines unserer kostenpflichtigen Produkte kaufen.
Wir freuen uns sehr, dass Sie uns eine Postkarte aus Ihrer Heimatstadt schicken und erwähnen, welches unserer Pakete Sie verwenden. Unsere Adresse finden Sie auf unserer Kontaktseite. Wir veröffentlichen alle erhaltenen Postkarten auf unserer virtuellen Postkartenwand.
Für das Dumping sollte mysqldump
von MySQL-db installiert sein.
Für das Dumping sollte pg_dump
von PostgreSQL-db installiert sein.
Für das Dumping sollte SQLite-db's sqlite3
installiert sein.
Für das Dumping von MongoDB-db sollte mongodump
installiert sein.
Zum Komprimieren von Dump-Dateien sollten gzip
und/oder bzip2
installiert sein.
Sie können das Paket über Composer installieren:
Komponist benötigt Spatie/DB-Dumper
Dies ist der einfachste Weg, einen Dump einer MySql-Datenbank zu erstellen:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
Wenn Sie mit PostgreSQL arbeiten, verwenden Sie einfach diesen Dumper. Die meisten Methoden sind sowohl auf MySql verfügbar. und PostgreSql-Dumper.
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
Wenn die Binärdatei mysqldump
(oder pg_dump
) an einem nicht standardmäßigen Speicherort installiert ist, können Sie das Paket mit der Funktion setDumpBinaryPath()
darüber informieren:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/custom/location') ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
Wenn Ihre Anwendung bereitgestellt wird und Sie den Host ändern müssen (Standard ist 127.0.0.1), können Sie die Funktion setHost()
hinzufügen:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->setHost($host) ->dumpToFile('dump.sql');
Beim Erstellen eines Datenbank-Dumps müssen Sie möglicherweise die Einbeziehung von AUTO_INCREMENT-Werten steuern. Dies kann entscheidend sein, um Primärschlüsselkonflikte zu vermeiden oder die ID-Konsistenz bei der umgebungsübergreifenden Datenübertragung aufrechtzuerhalten.
Um die AUTO_INCREMENT-Werte aus den Tabellen in Ihrem Dump wegzulassen, verwenden Sie die Methode „skipAutoIncrement“. Dies ist besonders nützlich, um Konflikte beim Importieren des Dumps in eine andere Datenbank zu vermeiden, in der diese spezifischen AUTO_INCREMENT-Werte möglicherweise bereits vorhanden sind, oder wenn die genauen Werte nicht relevant sind.
SpatieDbDumperDatabasesMySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->skipAutoIncrement() ->dumpToFile('dump.sql');
Standardmäßig sind die AUTO_INCREMENT-Werte im Dump enthalten. Wenn Sie jedoch zuvor die Methode „skipAutoIncrement“ verwendet haben und sicherstellen möchten, dass die AUTO_INCREMENT-Werte in einem nachfolgenden Dump enthalten sind, verwenden Sie die Methode „dontSkipAutoIncrement“, um sie explizit einzuschließen.
SpatieDbDumperDatabasesMySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->dontSkipAutoIncrement() ->dumpToFile('dump.sql');
In einigen Anwendungen oder Umgebungen werden Datenbankanmeldeinformationen als URLs und nicht als einzelne Komponenten bereitgestellt. In diesem Fall können Sie anstelle der einzelnen Methoden die Methode setDatabaseUrl
verwenden.
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
Wenn Sie eine URL angeben, analysiert das Paket diese automatisch und stellt die einzelnen Komponenten dem entsprechenden Dumper zur Verfügung.
Wenn Sie beispielsweise die URL mysql://username:password@hostname:3306/dbname
angeben, verwendet der Dumper den hostname
host, läuft auf Port 3306
und stellt mit username
und password
eine Verbindung zu dbname
her.
Verwenden eines Arrays:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->includeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
Verwendung einer Zeichenfolge:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->includeTables('table1, table2, table3') ->dumpToFile('dump.sql');
Um „ --column-statistics=0 “ als Option im mysqldump-Befehl zu verwenden, können Sie die Methode doNotUseColumnStatistics() verwenden.
Wenn Sie mysqldump 8 installiert haben, fragt es standardmäßig die Tabelle „column_statics“ in der Datenbank „information_schema“ ab. In einigen alten Versionen von MySql (Dienst) wie 5.7 existiert diese Tabelle nicht. Daher könnte es während der Ausführung von mysqldump zu einer Ausnahme kommen. Um dies zu vermeiden, können Sie die Methode doNotUseColumnStatistics() verwenden.
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
Mithilfe eines Arrays können Sie Tabellen vom Dump ausschließen:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->excludeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
Oder indem Sie eine Zeichenfolge verwenden:
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->excludeTables('table1, table2, table3') ->dumpToFile('dump.sql');
Sie können doNotCreateTables
verwenden, um das Schreiben von create-Anweisungen zu verhindern.
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credentials.txt');
Sie können doNotDumpData
verwenden, um das Schreiben von Zeilendaten zu verhindern.
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
Wenn Sie dem Dump-Befehl eine beliebige Option hinzufügen möchten, können Sie addExtraOption
verwenden
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->addExtraOption('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
Wenn Sie mit MySql arbeiten, können Sie den Datenbanknamen mit --databases
als zusätzliche Option festlegen. Dies ist besonders nützlich, wenn es in Verbindung mit der mysqldump
Option --add-drop-database
verwendet wird (siehe die Mysqldump-Dokumente).
$dumpCommand = MySql::create() ->setUserName('Benutzername') ->setPassword('password') ->addExtraOption('--databases dbname') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credentials.txt');
Bei MySql haben Sie auch die Möglichkeit, die Zusatzoption --all-databases
zu verwenden. Dies ist nützlich, wenn Sie eine vollständige Sicherung aller Datenbanken in der angegebenen MySQL-Verbindung durchführen möchten.
$dumpCommand = MySql::create() ->setUserName('Benutzername') ->setPassword('password') ->addExtraOption('--all-databases') ->getDumpCommand('dump.sql', 'credentials.txt');
Bitte beachten Sie, dass die Verwendung von ->addExtraOption('--databases dbname')
oder ->addExtraOption('--all-databases')
den Datenbanknamen überschreibt, der bei einem vorherigen ->setDbName()
-Aufruf festgelegt wurde.
Wenn Sie möchten, dass die Ausgabedatei komprimiert wird, können Sie eine Kompressorklasse verwenden.
Im Lieferumfang sind zwei Kompressoren enthalten:
GzipCompressor
– Dadurch wird Ihr Datenbank-Dump mit gzip
komprimiert. Stellen Sie sicher, dass gzip
auf Ihrem System installiert ist, bevor Sie es verwenden.
Bzip2Compressor
– Dadurch wird Ihr Datenbank-Dump mit bzip2
komprimiert. Stellen Sie sicher, dass bzip2
auf Ihrem System installiert ist, bevor Sie es verwenden.
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('Benutzername') ->setPassword('password') ->useCompressor(new GzipCompressor()) // oder `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Sie können Ihren eigenen Kompressor erstellen, indem Sie die Compressor
Schnittstelle implementieren. So sieht diese Schnittstelle aus:
Namespace SpatieDbDumperCompressors;Schnittstelle Kompressor {public function useCommand(): string;public function useExtension(): string; }
Der useCommand
sollte einfach den Komprimierungsbefehl zurückgeben, auf den der Datenbank-Dump gepumpt wird. Hier ist die Implementierung von GzipCompression
.
Namespace SpatieDbDumperCompressors; Klasse GzipCompressor implementiert Kompressor {public function useCommand(): string{return 'gzip'; }public function useExtension(): string{return 'gz'; } }
$ Composer-Test
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
Weitere Informationen finden Sie unter BEITRAGEN.
Bitte lesen Sie unsere Sicherheitsrichtlinie zum Melden von Sicherheitslücken.
Freek Van der Herten
Alle Mitwirkenden
Die anfängliche PostgreSQL-Unterstützung wurde von Adriano Machado beigesteuert. Die SQLite-Unterstützung wurde von Peter Matseykanets beigesteuert.
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.