Exigences | Installation | Commencer | API | Paramètres | Paramètres AOP | À FAIRE | Licence | Crédits
Il s'agit d'une version php de mysqldump cli fournie avec MySQL, sans dépendances, sans compression de sortie et sans valeurs par défaut raisonnables.
Prêt à l'emploi, MySQLDump-PHP prend en charge la sauvegarde des structures de tables, des données elles-mêmes, des vues, des déclencheurs et des événements.
MySQLDump-PHP est la seule bibliothèque qui prend en charge :
A partir de la version 2.0, les connexions à la base de données s'effectuent à l'aide du DSN standard, documenté dans la chaîne de connexion PDO.
Utiliser Composer :
$ composer require ifsnop/mysqldump-php
Utiliser Curl pour toujours télécharger et décompresser la dernière version :
$ 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
Avec 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 ();
}
Du vieux PHP simple :
<?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 ' );
Reportez-vous au wiki pour quelques exemples et une comparaison entre les dumps mysqldump et mysqldump-php.
Vous pouvez enregistrer un appelable qui sera utilisé pour transformer les valeurs lors de l'exportation. Un exemple de cas d'utilisation consiste à supprimer les données sensibles des sauvegardes de base de données :
$ 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 ' );
Vous pouvez enregistrer un callable qui sera utilisé pour rendre compte de la progression du dump
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
Vous pouvez enregistrer des clauses « où » spécifiques à une table pour limiter les données par table. Ceux-ci remplacent le paramètre par défaut 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 '
));
Vous pouvez enregistrer des « limites » spécifiques à une table pour limiter les lignes renvoyées par table :
$ 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
pour ignorer toutes les tablesLes options suivantes sont désormais activées par défaut et il n'y a aucun moyen de les désactiver puisqu'elles doivent toujours être utilisées.
Pour dumper une base de données, vous avez besoin des privilèges suivants :
Utilisez SHOW GRANTS FOR user@host ; pour savoir de quels privilèges l'utilisateur dispose. Voir le lien suivant pour plus d'informations :
Quels sont les privilèges minimum requis pour obtenir une sauvegarde d'un schéma de base de données MySQL ?
Le code actuel pour les tests est un vilain hack. Il existe probablement de bien meilleures façons de les faire en utilisant PHPUnit, donc les relations publiques sont les bienvenues. Le script de test crée et remplit une base de données en utilisant tous les types de données possibles. Ensuite, il l'exporte en utilisant à la fois mysqldump-php et mysqldump et compare le résultat. Seulement si c'est identique, les tests sont OK. Après ce commit, certains tests sont effectués à l'aide de phpunit.
Certains tests sont ignorés si le serveur MySQL ne les prend pas en charge.
Quelques tests comparent uniquement le code SQL d'origine et le SQL généré par mysqldump-php, car certaines options ne sont pas disponibles dans mysqldump.
Après ce rapport de bug, un nouveau a été introduit. _binary est également ajouté lorsque l'option hex-blob est utilisée, si la valeur est vide.
mysqldump-php n'est pas rétrocompatible avec php 5.2 car il utilise des espaces de noms. Cependant, cela pourrait être corrigé de manière triviale si nécessaire.
Écrivez plus de tests, testez également avec mariadb.
Formatez tout le code selon les normes PHP-FIG. https://www.php-fig.org/
Ce projet est un logiciel open source sous licence GPL
Après plus de 8 ans, il ne reste presque plus rien du code source original, mais :
Basé à l'origine sur le script de James Elliott de 2009. https://code.google.com/archive/p/db-mysqldump/
Adapté et prolongé par Michael J. Calkins. https://github.com/clouddueling
Actuellement maintenu, développé et amélioré par Diego Torres. https://github.com/ifsnop