Esquema de exportação do MySQL sem dados

491

Estou usando um banco de dados MySql com um programa Java, agora quero dar o programa a outra pessoa.

Como exportar a estrutura do banco de dados MySql sem os dados, apenas a estrutura?

Darth Blue Ray
fonte

Respostas:

962

Você pode fazer com a --no-dataopção com o comando mysqldump

mysqldump -u root -p --no-data dbname > schema.sql
Daric
fonte
11
IMHO, mysqldumpé a melhor resposta. O MySQL Administrator foi abandonado e o MySQL Workbench ainda é bastante problemático.
Álvaro González
49
Considere também usar a --single-transactionopção se você não quiser ou não puder fazer bloqueios de tabela.
Jim
47
-d é --no-data para abreviar.
marstone
36
Considere também adicionando --routines Se você é banco de dados armazenado procedimentos / funções
crafterm
15
Por padrão, isso não inclui o CREATE DATABASEcomando. Para incluir, substitua dbnamepor --databases dbname(abreviação:) -B dbname. Em seguida, para importar em outro servidor, usemysql -u root -p < schema.sql
Sean
88

Sim, você pode usar mysqldumpcom a --no-dataopção:

mysqldump -u user -h localhost --no-data -p database > database.sql
onteria_
fonte
4
Estou surpreso que esta não seja a resposta aceita, apesar de ter sido postada dez segundos antes e sendo mais completa, se não idêntica à resposta aceita.
User5532169
1
@ zypA13510, aparentemente dez segundos podem ser uma diferença de 749 votos positivos.
emallove
17

você também pode extrair uma tabela individual com a --no-dataopção

mysqldump -u user -h localhost --no-data -p database tablename > table.sql
PodTech.io
fonte
6

Você pode usar a opção -d com o comando mysqldump

mysqldump -u root -p -d databasename > database.sql
Rahul Chipad
fonte
6

Despejar sem usar saída.

mysqldump --no-data <database name> --result-file=schema.sql
Anders B
fonte
4

Cuidado, porém, que a opção --no-data não incluirá a definição de exibição. Portanto, se você teve uma visualização como a seguir, crie a view v1 select a. idAS id, a. created_dateAS created_date de t1; com a opção --no-data, a definição da visualização será alterada para a seguinte criação da visualização v1, selecione 1 AS id, 1 AScreated_date

Mamta Satoor
fonte
2

Caso esteja usando o IntelliJ, você pode ativar a visualização Banco de Dados (Exibir -> Janela Ferramentas -> Banco de Dados)

Dentro dessa visão, conecte-se ao seu banco de dados. Em seguida, clique com o botão direito do mouse no banco de dados e selecione "Copiar DDL". Outros IDEs podem oferecer uma função semelhante.

IntelliJ DDL

Ant1Zykl0n
fonte
2
Eu dei-lhe uma tentativa, ele não contém quaisquer gatilhos (e deus sabe que mais não)
phil294
2

Se você deseja despejar todas as tabelas de todos os bancos de dados e sem dados (apenas estruturas de banco de dados e tabela), você pode usar:

mysqldump -P port -h hostname_or_ip -u username -p --no-data --all-databases > db_backup.sql

Isso produzirá um arquivo .sql que você pode carregar em um servidor mysql para criar um novo banco de dados. Casos de uso para isso não são muitos em um ambiente de produção, mas faço isso semanalmente para redefinir servidores que estão vinculados a sites de demonstração; portanto, o que os usuários fazem durante a semana, nas noites de domingo, tudo volta para "novo": )

Javier Larroulet
fonte
1

Para obter um script de criação de uma tabela individual:
- selecione toda a tabela (com tecla Shift)
- clique com o botão direito do mouse no nome da tabela e clique em Copiar para a área de transferência> Criar instrução.

mias
fonte
0

shell> mysqldump --no-data - rotinas - eventos teste> dump-defs.sql

user13012757
fonte
1
Bem-vindo ao StackOverflow. Você pode dar uma ótima resposta com isso se der um pouco mais de informações e restrições.
Janhoo 5/03
0

Adicione as opções --rotines e --events para também incluir definições de rotina e eventos armazenadas

mysqldump -u <user> -p --no-data --routines --events test > dump-defs.sql
Ranga
fonte
-1

Você pode usar o seguinte método

mysqldump -d <database name> > <filename.sql> // -d : without data

Espero que ajude você

Fénix
fonte
6
Esta resposta não acrescenta nada que outra resposta ainda não tenha dito.
Daniel