Requisitos | Instalación | Empezando | API | Configuración | Configuración de DOP | TODO | Licencia | Créditos
Esta es una versión PHP de mysqldump cli que viene con MySQL, sin dependencias, compresión de salida y valores predeterminados sensatos.
Desde el primer momento, MySQLDump-PHP admite copias de seguridad de estructuras de tablas, los datos en sí, vistas, activadores y eventos.
MySQLDump-PHP es la única biblioteca que admite:
A partir de la versión 2.0, las conexiones a la base de datos se realizan utilizando el DSN estándar, documentado en la cadena de conexión PDO.
Usando el compositor:
$ composer require ifsnop/mysqldump-php
Usar Curl para descargar y descomprimir siempre la última versión:
$ 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
Con cargador automático/compositor:
<?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 simple y antiguo:
<?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 ' );
Consulte la wiki para ver algunos ejemplos y una comparación entre los volcados de mysqldump y mysqldump-php.
Puede registrar un invocable que se utilizará para transformar valores durante la exportación. Un caso de uso de ejemplo para esto es eliminar datos confidenciales de volcados de bases de datos:
$ 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 ' );
Puede registrar un invocable que se utilizará para informar sobre el progreso del volcado.
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
Puede registrar cláusulas 'dónde' específicas de la tabla para limitar los datos por tabla. Estos anulan la configuración de where
predeterminada:
$ 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 '
));
Puede registrar 'límites' específicos de la tabla para limitar las filas devueltas por tabla:
$ 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
para ignorar todas las tablasLas siguientes opciones ahora están habilitadas de forma predeterminada y no hay forma de deshabilitarlas ya que siempre deben usarse.
Para volcar una base de datos, necesita los siguientes privilegios:
Utilice MOSTRAR SUBVENCIONES PARA usuario@host; para saber qué privilegios tiene el usuario. Consulte el siguiente enlace para obtener más información:
¿Cuáles son los privilegios mínimos necesarios para obtener una copia de seguridad de un esquema de base de datos MySQL?
El código actual para realizar pruebas es un truco feo. Probablemente haya formas mucho mejores de hacerlo usando PHPUnit, por lo que las relaciones públicas son bienvenidas. El script de prueba crea y completa una base de datos utilizando todos los tipos de datos posibles. Luego lo exporta usando mysqldump-php y mysqldump y compara el resultado. Sólo si son pruebas idénticas están bien. Después de esta confirmación, se realizan algunas pruebas usando phpunit.
Algunas pruebas se omiten si el servidor MySQL no las admite.
Un par de pruebas solo comparan entre el código SQL original y el SQL generado por mysqldump-php, porque algunas opciones no están disponibles en mysqldump.
Después de este informe de error, se introdujo uno nuevo. _binary también se agrega cuando se usa la opción hex-blob, si el valor está vacío.
mysqldump-php no es compatible con versiones anteriores de php 5.2 porque usa espacios de nombres. Sin embargo, podría solucionarse trivialmente si fuera necesario.
Escribe más pruebas, prueba también con mariadb.
Formatee todo el código según los estándares PHP-FIG. https://www.php-fig.org/
Este proyecto es un software de código abierto con licencia GPL.
Después de más de 8 años, apenas queda nada del código fuente original, pero:
Basado originalmente en el guión de James Elliott de 2009. https://code.google.com/archive/p/db-mysqldump/
Adaptado y ampliado por Michael J. Calkins. https://github.com/clouddueling
Actualmente mantenido, desarrollado y mejorado por Diego Torres. https://github.com/ifsnop