Requisitos | Instalando | Primeiros passos | API | Configurações | Configurações DOP | FAZER | Licença | Créditos
Esta é uma versão php do mysqldump cli que vem com o MySQL, sem dependências, compactação de saída e padrões sensatos.
Pronto para uso, o MySQLDump-PHP oferece suporte ao backup de estruturas de tabelas, dos próprios dados, visualizações, gatilhos e eventos.
MySQLDump-PHP é a única biblioteca que suporta:
A partir da versão 2.0, as conexões com o banco de dados são feitas utilizando o DSN padrão, documentado na string de conexão do PDO.
Usando o compositor:
$ composer require ifsnop/mysqldump-php
Usando Curl para sempre baixar e descompactar a versão mais recente:
$ 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
Com 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 ();
}
PHP simples e antigo:
<?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 o wiki para alguns exemplos e uma comparação entre os dumps mysqldump e mysqldump-php.
Você pode registrar um callable que será usado para transformar valores durante a exportação. Um exemplo de caso de uso para isso é a remoção de dados confidenciais de dumps de banco de dados:
$ 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 ' );
Você pode registrar um callable que será usado para relatar o progresso do dump
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
Você pode registrar cláusulas 'where' específicas da tabela para limitar os dados por tabela. Eles substituem a configuração padrão de dump where
:
$ 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 '
));
Você pode registrar 'limites' específicos da tabela para limitar as linhas retornadas por tabela:
$ 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 as tabelasAs opções a seguir agora estão habilitadas por padrão e não há como desativá-las, pois devem ser sempre usadas.
Para despejar um banco de dados, você precisa dos seguintes privilégios:
Use SHOW GRANTS FOR user@host; para saber quais privilégios o usuário possui. Consulte o link a seguir para obter mais informações:
Quais são os privilégios mínimos necessários para obter um backup de um esquema de banco de dados MySQL?
O código atual para teste é um hack feio. Provavelmente existem maneiras muito melhores de fazer isso usando PHPUnit, então PRs são bem-vindos. O script de teste cria e preenche um banco de dados usando todos os tipos de dados possíveis. Em seguida, ele exporta usando mysqldump-php e mysqldump e compara a saída. Somente se forem testes idênticos estão OK. Após esse commit, alguns testes são realizados utilizando o phpunit.
Alguns testes são ignorados se o servidor mysql não os suportar.
Alguns testes estão apenas comparando entre o código sql original e o sql gerado pelo mysqldump-php, porque algumas opções não estão disponíveis no mysqldump.
Após este relatório de bug, um novo foi introduzido. _binary também é anexado quando a opção hex-blob é usada, se o valor estiver vazio.
mysqldump-php não é compatível com versões anteriores do php 5.2 porque ele usa namespaces. No entanto, poderia ser corrigido trivialmente, se necessário.
Escreva mais testes, teste também com mariadb.
Formate todo o código para os padrões PHP-FIG. https://www.php-fig.org/
Este projeto é um software de código aberto licenciado sob a licença GPL
Depois de mais de 8 anos, quase não sobrou nada do código-fonte original, mas:
Originalmente baseado no script de James Elliott de 2009. https://code.google.com/archive/p/db-mysqldump/
Adaptado e ampliado por Michael J. Calkins. https://github.com/clouddueling
Atualmente mantido, desenvolvido e aprimorado por Diego Torres. https://github.com/ifsnop