Ce dépôt contient une classe facile à utiliser pour vider une base de données à l'aide de PHP. Actuellement MySQL, PostgreSQL, SQLite et MongoDB sont pris en charge. En coulisses, mysqldump
, pg_dump
, sqlite3
et mongodump
sont utilisés.
Voici des exemples simples de création d'un dump de base de données avec différents pilotes :
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
.
MongoDB
SpatieDbDumperDatabasesMongoDb :: create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.gz');
Nous investissons beaucoup de ressources dans la création des meilleurs packages open source de leur catégorie. Vous pouvez nous soutenir en achetant l'un de nos produits payants.
Nous apprécions grandement que vous nous envoyiez une carte postale de votre ville natale, mentionnant le(s) forfait(s) que vous utilisez. Vous trouverez notre adresse sur notre page contact. Nous publions toutes les cartes postales reçues sur notre mur virtuel de cartes postales.
Pour le dumping, mysqldump
de MySQL-db doit être installé.
Pour le dumping, pg_dump
de PostgreSQL-db doit être installé.
Pour le dumping, sqlite3
de SQLite-db doit être installé.
Pour le dumping, mongodump
de MongoDB-db doit être installé.
Pour compresser les fichiers de dump, gzip
et/ou bzip2
doivent être installés.
Vous pouvez installer le package via composer :
le compositeur nécessite spatie/db-dumper
C'est le moyen le plus simple de créer un dump d'une base de données MySql :
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.sql');
Si vous travaillez avec PostgreSQL, utilisez simplement ce dumper, la plupart des méthodes sont disponibles sur MySql. et PostgreSql-dumper.
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.sql');
Si le binaire mysqldump
(ou pg_dump
) est installé dans un emplacement autre que celui par défaut, vous pouvez en informer le package en utilisant la fonction setDumpBinaryPath()
:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/custom/location') ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->dumpToFile('dump.sql');
Si votre application est déployée et que vous devez changer d'hôte (la valeur par défaut est 127.0.0.1), vous pouvez ajouter la fonction setHost()
:
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->setHost($hôte) ->dumpToFile('dump.sql');
Lors de la création d'un vidage de base de données, vous devrez peut-être contrôler l'inclusion des valeurs AUTO_INCREMENT. Cela peut être crucial pour éviter les conflits de clés primaires ou pour maintenir la cohérence des ID lors du transfert de données entre environnements.
Pour omettre les valeurs AUTO_INCREMENT des tables de votre dump, utilisez la méthode skipAutoIncrement. Ceci est particulièrement utile pour éviter les conflits lors de l'importation du dump dans une autre base de données où ces valeurs AUTO_INCREMENT spécifiques peuvent déjà exister, ou lorsque les valeurs exactes ne sont pas pertinentes.
SpatieDbDumperDatabasesMySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->skipAutoIncrement() ->dumpToFile('dump.sql');
Par défaut, les valeurs AUTO_INCREMENT sont incluses dans le dump. Toutefois, si vous avez déjà utilisé la méthode skipAutoIncrement et souhaitez vous assurer que les valeurs AUTO_INCREMENT sont incluses dans un vidage ultérieur, utilisez la méthode dontSkipAutoIncrement pour les inclure explicitement.
SpatieDbDumperDatabasesMySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->dontSkipAutoIncrement() ->dumpToFile('dump.sql');
Dans certaines applications ou environnements, les informations d'identification de la base de données sont fournies sous forme d'URL plutôt que de composants individuels. Dans ce cas, vous pouvez utiliser la méthode setDatabaseUrl
au lieu des méthodes individuelles.
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
Lors de la fourniture d'une URL, le package l'analysera automatiquement et fournira les composants individuels au dumper applicable.
Par exemple, si vous fournissez l'URL mysql://username:password@hostname:3306/dbname
, le dumper utilisera le hostname
hôte host, exécuté sur le port 3306
, et se connectera à dbname
avec username
et password
.
Utiliser un tableau :
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->includeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
Utiliser une chaîne :
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->includeTables('table1, table2, table3') ->dumpToFile('dump.sql');
Afin d'utiliser " --column-statistics=0 " comme option dans la commande mysqldump, vous pouvez utiliser la méthode doNotUseColumnStatistics() .
Si vous avez installé mysqldump 8 , il interroge par défaut la table column_statics dans la base de données information_schema . Dans certaines anciennes versions de MySql (service) comme la 5.7, cette table n'existe pas. Vous pourriez donc avoir une exception lors de l'exécution de mysqldump. Pour éviter cela, vous pouvez utiliser la méthode doNotUseColumnStatistics() .
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
Vous pouvez exclure des tables du dump en utilisant un tableau :
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->exclureTableaux(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
Ou en utilisant une chaîne :
SpatieDbDumperDatabasesMySql::create() ->setDbName ($databaseName) ->setUserName($userName) ->setPassword($mot de passe) ->exclureTableaux('table1, table2, table3') ->dumpToFile('dump.sql');
Vous pouvez utiliser doNotCreateTables
pour empêcher l'écriture d'instructions de création.
$dumpCommand = MySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credentials.txt');
Vous pouvez utiliser doNotDumpData
pour empêcher l'écriture de données de ligne.
$dumpCommand = MySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
Si vous souhaitez ajouter une option arbitraire à la commande dump, vous pouvez utiliser addExtraOption
$dumpCommand = MySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->ajouterOptionExtra('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
Si vous travaillez avec MySql, vous pouvez définir le nom de la base de données en utilisant --databases
comme option supplémentaire. Ceci est particulièrement utile lorsqu'il est utilisé conjointement avec l'option --add-drop-database
mysqldump
(voir la documentation mysqldump).
$dumpCommand = MySql::create() ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->addExtraOption('--nom de base de données des bases de données') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credentials.txt');
Avec MySql, vous avez également la possibilité d'utiliser l'option supplémentaire --all-databases
. Ceci est utile lorsque vous souhaitez exécuter une sauvegarde complète de toutes les bases de données de la connexion MySQL spécifiée.
$dumpCommand = MySql::create() ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->addExtraOption('--toutes les bases de données') ->getDumpCommand('dump.sql', 'credentials.txt');
Veuillez noter que l'utilisation de ->addExtraOption('--databases dbname')
ou ->addExtraOption('--all-databases')
remplacera le nom de base de données défini lors d'un précédent appel ->setDbName()
.
Si vous souhaitez que le fichier de sortie soit compressé, vous pouvez utiliser une classe de compression.
Il y a deux compresseurs qui sortent de la boîte :
GzipCompressor
- Cela compressera votre dump de base de données avec gzip
. Assurez-vous gzip
est installé sur votre système avant de l'utiliser.
Bzip2Compressor
- Cela compressera votre dump de base de données avec bzip2
. Assurez-vous que bzip2
est installé sur votre système avant de l'utiliser.
$dumpCommand = MySql::create() ->setDbName('nom de base de données') ->setUserName('nom d'utilisateur') ->setPassword('mot de passe') ->useCompressor(new GzipCompressor()) // ou `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Vous pouvez créer votre propre compresseur en implémentant l’interface Compressor
. Voici à quoi ressemble cette interface :
espace de noms SpatieDbDumperCompressors; compresseur d'interface {fonction publique useCommand() : chaîne ; fonction publique useExtension() : chaîne ; }
La useCommand
doit simplement renvoyer la commande de compression vers laquelle le vidage de base de données sera pompé. Voici l'implémentation de GzipCompression
.
espace de noms SpatieDbDumperCompressors ; classe GzipCompressor implémente Compressor {fonction publique useCommand() : string{return 'gzip'; }fonction publique useExtension() : string{return 'gz'; } }
$ test du compositeur
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
Veuillez consulter CONTRIBUER pour plus de détails.
Veuillez consulter notre politique de sécurité pour savoir comment signaler les vulnérabilités de sécurité.
Freek Van der Herten
Tous les contributeurs
Le support initial de PostgreSQL a été apporté par Adriano Machado. Le support SQLite a été fourni par Peter Matseykanets.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.