Este repositório contém uma classe fácil de usar para despejar um banco de dados usando PHP. Atualmente MySQL, PostgreSQL, SQLite e MongoDB são suportados. Nos bastidores mysqldump
, pg_dump
, sqlite3
e mongodump
são usados.
Aqui estão exemplos simples de como criar um dump de banco de dados com drivers diferentes:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabaseSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
.
MongoDB
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.gz');
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Para despejar mysqldump
do MySQL-db deve ser instalado.
Para despejar pg_dump
do PostgreSQL-db deve ser instalado.
Para despejar o SQLite-db do sqlite3
deve ser instalado.
Para despejar mongodump
do MongoDB-db deve ser instalado.
Para compactar arquivos de despejo, gzip
e/ou bzip2
devem ser instalados.
Você pode instalar o pacote via compositor:
compositor requer spatie/db-dumper
Esta é a maneira mais simples de criar um dump de um banco de dados MySql:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.sql');
Se você estiver trabalhando com PostgreSQL, basta usar esse dumper, a maioria dos métodos estão disponíveis no MySql. e postgreSql-dumper.
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.sql');
Se o binário mysqldump
(ou pg_dump
) estiver instalado em um local não padrão, você pode informar o pacote usando a função setDumpBinaryPath()
:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/custom/local') ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->dumpToFile('dump.sql');
Se seu aplicativo estiver implementado e você precisar alterar o host (o padrão é 127.0.0.1), você poderá adicionar a função setHost()
:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->setHost($host) ->dumpToFile('dump.sql');
Ao criar um dump de banco de dados, talvez seja necessário controlar a inclusão de valores AUTO_INCREMENT. Isto pode ser crucial para evitar conflitos de chave primária ou para manter a consistência de ID ao transferir dados entre ambientes.
Para omitir os valores AUTO_INCREMENT das tabelas em seu dump, use o método skipAutoIncrement. Isto é particularmente útil para evitar conflitos ao importar o dump para outro banco de dados onde esses valores AUTO_INCREMENT específicos já possam existir ou quando os valores exatos não forem relevantes.
SpatieDbDumperDatabasesMySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->skipAutoIncrement() ->dumpToFile('dump.sql');
Por padrão, os valores AUTO_INCREMENT são incluídos no dump. No entanto, se você usou anteriormente o método skipAutoIncrement e deseja garantir que os valores AUTO_INCREMENT sejam incluídos em um dump subsequente, use o método dontSkipAutoIncrement para incluí-los explicitamente.
SpatieDbDumperDatabasesMySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->nãoSkipAutoIncrement() ->dumpToFile('dump.sql');
Em alguns aplicativos ou ambientes, as credenciais do banco de dados são fornecidas como URLs em vez de componentes individuais. Nesse caso, você pode usar o método setDatabaseUrl
em vez dos métodos individuais.
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
Ao fornecer uma URL, o pacote irá analisá-la automaticamente e fornecer os componentes individuais ao dumper aplicável.
Por exemplo, se você fornecer a URL mysql://username:password@hostname:3306/dbname
, o dumper usará o hostname
host, rodando na porta 3306
, e se conectará ao dbname
com username
e password
.
Usando uma matriz:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->includeTabelas(['tabela1', 'tabela2', 'tabela3']) ->dumpToFile('dump.sql');
Usando uma string:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->includeTabelas('tabela1,tabela2,tabela3') ->dumpToFile('dump.sql');
Para usar " --column-statistics=0 " como opção no comando mysqldump você pode usar o método doNotUseColumnStatistics() .
Se você instalou o mysqldump 8 , ele consulta por padrão a tabela column_statics no banco de dados information_schema . Em algumas versões antigas do MySql (serviço) como 5.7, esta tabela não existe. Então você poderia ter uma exceção durante a execução do mysqldump. Para evitar isso, você pode usar o método doNotUseColumnStatistics() .
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
Você pode excluir tabelas do dump usando um array:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->excludeTabelas(['tabela1', 'tabela2', 'tabela3']) ->dumpToFile('dump.sql');
Ou usando uma string:
SpatieDbDumperDatabasesMySql::create() ->setDbName($nomeBancoDeDados) ->setNomeUsuário($NomeUsuário) ->setPassword($senha) ->excludeTabelas('tabela1,tabela2,tabela3') ->dumpToFile('dump.sql');
Você pode usar doNotCreateTables
para evitar a gravação de instruções de criação.
$dumpCommand=MySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credenciais.txt');
Você pode usar doNotDumpData
para evitar a gravação de dados de linha.
$dumpCommand=MySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credenciais.txt');
Se você quiser adicionar uma opção arbitrária ao comando dump, você pode usar addExtraOption
$dumpCommand=MySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->addExtraOption('--xml') ->getDumpCommand('dump.sql', 'credenciais.txt');
Se estiver trabalhando com MySql, você pode definir o nome do banco de dados usando --databases
como uma opção extra. Isto é particularmente útil quando usado em conjunto com a opção --add-drop-database
mysqldump
(veja a documentação do mysqldump).
$dumpCommand=MySql::create() ->setUserName('nomedeusuario') ->setPassword('senha') ->addExtraOption('--nome do banco de dados') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credenciais.txt');
Com MySql, você também tem a opção de usar a opção extra --all-databases
. Isto é útil quando você deseja executar um backup completo de todos os bancos de dados na conexão MySQL especificada.
$dumpCommand=MySql::create() ->setUserName('nomedeusuario') ->setPassword('senha') ->addExtraOption('--todos-bancos') ->getDumpCommand('dump.sql', 'credenciais.txt');
Observe que usar ->addExtraOption('--databases dbname')
ou ->addExtraOption('--all-databases')
substituirá o nome do banco de dados definido em uma chamada anterior ->setDbName()
.
Se quiser que o arquivo de saída seja compactado, você pode usar uma classe compressora.
Existem dois compressores que saem da caixa:
GzipCompressor
- Isso compactará seu dump de banco de dados com gzip
. Certifique-se de que gzip
esteja instalado em seu sistema antes de usá-lo.
Bzip2Compressor
- Isso compactará seu dump de banco de dados com bzip2
. Certifique-se de que bzip2
esteja instalado em seu sistema antes de usá-lo.
$dumpCommand=MySql::create() ->setDbName('nomedobd') ->setUserName('nomedeusuario') ->setPassword('senha') ->useCompressor(new GzipCompressor()) // ou `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
Você pode criar seu próprio compressor implementando a interface Compressor
. Esta é a aparência dessa interface:
namespace SpatieDbDumperCompressors;compressor de interface {função pública useCommand(): string; função pública useExtension(): string; }
O useCommand
deve simplesmente retornar o comando de compactação para o qual o dump do banco de dados será bombeado. Aqui está a implementação de GzipCompression
.
namespace SpatieDbDumperCompressors;classe GzipCompressor implementa Compressor {função pública useCommand(): string{return 'gzip'; }função pública useExtension(): string{return 'gz'; } }
$ teste do compositor
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte CONTRIBUINDO para obter detalhes.
Revise nossa política de segurança sobre como relatar vulnerabilidades de segurança.
Freek Van der Herten
Todos os colaboradores
O suporte inicial do PostgreSQL foi contribuído por Adriano Machado. O suporte SQlite foi contribuído por Peter Matseykanets.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.