Este repositorio contiene una clase fácil de usar para volcar una base de datos usando PHP. Actualmente se admiten MySQL, PostgreSQL, SQLite y MongoDB. Detrás de escena se utilizan mysqldump
, pg_dump
, sqlite3
y mongodump
.
A continuación se muestran ejemplos sencillos de cómo crear un volcado de base de datos con diferentes controladores:
mysql
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperBases de datosPostgreSql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperBases de datosSqlite::create() ->setDbName($rutaAlArchivoBaseDeDatos) ->dumpToFile('dump.sql');
includeTables
.
MongoDB
SpatieDbDumperBases de datosMongoDb::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.gz');
Invertimos muchos recursos en la creación de los mejores paquetes de código abierto. Puedes apoyarnos comprando uno de nuestros productos pagos.
Apreciamos mucho que nos envíe una postal desde su ciudad natal, mencionando cuál de nuestros paquetes está utilizando. Encontrarás nuestra dirección en nuestra página de contacto. Publicamos todas las postales recibidas en nuestro muro virtual de postales.
Para volcar, se debe instalar mysqldump
de MySQL-db.
Para volcar se debe instalar pg_dump
de PostgreSQL-db.
Para volcar SQLite-db, se debe instalar sqlite3
.
Para volcar, se debe instalar mongodump
de MongoDB-db.
Para comprimir archivos de volcado, se debe instalar gzip
y/o bzip2
.
Puede instalar el paquete a través del compositor:
el compositor requiere spatie/db-dumper
Esta es la forma más sencilla de crear un volcado de una base de datos MySql:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.sql');
Si está trabajando con PostgreSQL, simplemente use ese volcado, la mayoría de los métodos están disponibles tanto en MySql. y PostgreSql-dumper.
SpatieDbDumperBases de datosPostgreSql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.sql');
Si el binario mysqldump
(o pg_dump
) está instalado en una ubicación no predeterminada, puede informarle al paquete usando la función setDumpBinaryPath()
:
SpatieDbDumperBases de datosMySql::create() ->setDumpBinaryPath('/personalizado/ubicación') ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->dumpToFile('dump.sql');
Si su aplicación está implementada y necesita cambiar el host (el valor predeterminado es 127.0.0.1), puede agregar la función setHost()
:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->setHost($host) ->dumpToFile('dump.sql');
Al crear un volcado de base de datos, es posible que necesite controlar la inclusión de valores AUTO_INCREMENT. Esto puede ser crucial para evitar conflictos de clave principal o para mantener la coherencia de ID al transferir datos entre entornos.
Para omitir los valores AUTO_INCREMENT de las tablas en su volcado, use el método skipAutoIncrement. Esto es particularmente útil para evitar conflictos al importar el volcado a otra base de datos donde esos valores AUTO_INCREMENT específicos podrían ya existir, o cuando los valores exactos no son relevantes.
SpatieDbDumperBases de datosMySql::create() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->omitirIncrementoAutomático() ->dumpToFile('dump.sql');
De forma predeterminada, los valores AUTO_INCREMENT se incluyen en el volcado. Sin embargo, si anteriormente utilizó el método skipAutoIncrement y desea asegurarse de que los valores AUTO_INCREMENT se incluyan en un volcado posterior, utilice el método dontSkipAutoIncrement para incluirlos explícitamente.
SpatieDbDumperBases de datosMySql::create() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->dontSkipAutoIncrement() ->dumpToFile('dump.sql');
En algunas aplicaciones o entornos, las credenciales de la base de datos se proporcionan como URL en lugar de componentes individuales. En este caso, puede utilizar el método setDatabaseUrl
en lugar de los métodos individuales.
SpatieDbDumperBases de datosMySql::create() ->setDatabaseUrl($base de datosUrl) ->dumpToFile('dump.sql');
Al proporcionar una URL, el paquete la analizará automáticamente y proporcionará los componentes individuales al volcador correspondiente.
Por ejemplo, si proporciona la URL mysql://username:password@hostname:3306/dbname
, el dumper utilizará el hostname
host, ejecutándose en el puerto 3306
, y se conectará a dbname
con username
y password
.
Usando una matriz:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->includeTables(['tabla1', 'tabla2', 'tabla3']) ->dumpToFile('dump.sql');
Usando una cadena:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->includeTables('tabla1, tabla2, tabla3') ->dumpToFile('dump.sql');
Para utilizar " --column-statistics=0 " como opción en el comando mysqldump, puede utilizar el método doNotUseColumnStatistics() .
Si ha instalado mysqldump 8 , consulta de forma predeterminada la tabla column_statics en la base de datos information_schema . En alguna versión antigua de MySql (servicio) como 5.7, esta tabla no existe. Entonces podría tener una excepción durante la ejecución de mysqldump. Para evitar esto, puede utilizar el método doNotUseColumnStatistics() .
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->no usar estadísticas de columna() ->dumpToFile('dump.sql');
Puede excluir tablas del volcado utilizando una matriz:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->excludeTables(['tabla1', 'tabla2', 'tabla3']) ->dumpToFile('dump.sql');
O usando una cadena:
SpatieDbDumperBases de datosMySql::create() ->setDbName($nombrebasedatos) ->setUserName($nombredeusuario) ->establecerContraseña($contraseña) ->excludeTables('tabla1, tabla2, tabla3') ->dumpToFile('dump.sql');
Puede utilizar doNotCreateTables
para evitar escribir declaraciones de creación.
$dumpCommand = MySql::crear() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->noCrearTablas() ->getDumpCommand('dump.sql', 'credenciales.txt');
Puede utilizar doNotDumpData
para evitar escribir datos de fila.
$dumpCommand = MySql::crear() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->noDumpData() ->getDumpCommand('dump.sql', 'credenciales.txt');
Si desea agregar una opción arbitraria al comando de volcado, puede usar addExtraOption
$dumpCommand = MySql::crear() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->añadirExtraOption('--xml') ->getDumpCommand('dump.sql', 'credenciales.txt');
Si está trabajando con MySql, puede configurar el nombre de la base de datos usando --databases
como opción adicional. Esto es particularmente útil cuando se usa junto con la opción --add-drop-database
mysqldump
(consulte los documentos de mysqldump).
$dumpCommand = MySql::crear() ->setUserName('nombre de usuario') ->setPassword('contraseña') ->addExtraOption('--bases de datos nombrebd') ->addExtraOption('--agregar-eliminar-base de datos') ->getDumpCommand('dump.sql', 'credenciales.txt');
Con MySql, también tienes la opción de utilizar la opción adicional --all-databases
. Esto es útil cuando desea ejecutar una copia de seguridad completa de todas las bases de datos en la conexión MySQL especificada.
$dumpCommand = MySql::crear() ->setUserName('nombre de usuario') ->setPassword('contraseña') ->addExtraOption('--todas-las-bases de datos') ->getDumpCommand('dump.sql', 'credenciales.txt');
Tenga en cuenta que el uso de ->addExtraOption('--databases dbname')
o ->addExtraOption('--all-databases')
anulará el nombre de la base de datos establecido en una llamada anterior ->setDbName()
.
Si desea comprimir el archivo de salida, puede utilizar una clase de compresor.
Son dos compresores que salen de la caja:
GzipCompressor
: esto comprimirá su volcado de base de datos con gzip
. Asegúrese de que gzip
esté instalado en su sistema antes de usarlo.
Bzip2Compressor
: esto comprimirá su volcado de base de datos con bzip2
. Asegúrese de que bzip2
esté instalado en su sistema antes de usarlo.
$dumpCommand = MySql::crear() ->setDbName('nombrebd') ->setUserName('nombre de usuario') ->setPassword('contraseña') ->useCompressor(new GzipCompressor()) // o `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Puede crear su propio compresor implementando la interfaz Compressor
. Así es como se ve esa interfaz:
espacio de nombres SpatieDbDumperCompressors;compresor de interfaz {función pública useCommand(): cadena; función pública useExtension(): cadena; }
El useCommand
simplemente debería devolver el comando de compresión al que se bombeará el volcado de base de datos. Aquí está la implementación de GzipCompression
.
espacio de nombres SpatieDbDumperCompressors;clase GzipCompressor implementa Compressor {función pública useCommand(): cadena{return 'gzip'; }función pública useExtension(): string{return 'gz'; } }
$ prueba de compositor
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte CONTRIBUCIÓN para obtener más detalles.
Revise nuestra política de seguridad sobre cómo informar vulnerabilidades de seguridad.
Freek Van der Herten
Todos los contribuyentes
Adriano Machado contribuyó con el soporte inicial de PostgreSQL. Peter Matseykanets contribuyó con el soporte de SQlite.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.