Conversão MySQL para SQlite [fechado]


120

É possível converter do MySQL para SQLite com uma ferramenta gratuita no Windows?


Respostas:


78

Existe um script mysql2sqlite.sh no GitHub

Conforme descrito no cabeçalho, o script pode ser usado assim:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternativas


8
Funciona como charme! Aqui está um pouco da documentação: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

O script apenas puxa argumentos da linha de comando e os passa para o mysqldump, para que você possa descobrir sobre a configuração de portas personalizadas, etc. com man mysqlouman mysqldump
Devin Howard

2
É importante notar que esse script foi substituído por um sucessor mantido aqui: github.com/dumblob/mysql2sqlite
drzax

Ainda melhor para jogar com caracteres não-ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

Aqui está uma lista de conversores . ( instantâneo em archive.today )


Um método alternativo que funcionaria mesmo no Windows, mas que raramente é mencionado, é: use uma classe ORM que abstraia diferenças específicas do banco de dados para você. por exemplo, você os obtém em PHP ( RedBean ), Python (camada ORM do Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), cacau ( CoreData ) etc.

ou seja, você pode fazer isso:

  1. Carregue dados do banco de dados de origem usando a classe ORM.
  2. Armazene dados na memória ou serialize em disco.
  3. Armazene dados no banco de dados de destino usando a classe ORM.

43

Sequel (Ruby ORM) possui uma ferramenta de linha de comando para lidar com bancos de dados; você deve ter o ruby ​​instalado e:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
Não se esqueça gem install mysqlegem install sqlite3
Nick

1
e gem install pgse você deseja converter de ou para um banco de dados do postgres, a sequela deve ter adaptadores para os principais bancos de dados.
Macario

2
substituir mysqlcom mysql2se você estiver usandomysql2
Carlosin

1
Nota: Você precisará do ruby-devpacote para criar esses pacotes de gemas nativos.
Panda

1
Teve que usar "gem install sequel mysql2 sqlite3" e depois "sequel mysql2: // usuário: senha @ host / banco de dados -C sqlite: //db.sqlite" PERFECT
unom

17

Nem todo esquema de banco de dados pode ser convertido. O MySQL é mais complexo e rico em recursos que o SQLite. No entanto, se seu esquema for bastante simples, você poderá despejá-lo em um arquivo SQL e tentar importá-lo / carregá-lo em um banco de dados SQLite.


Após despejar seu banco de dados MySQL em um arquivo, você pode usar este script para convertê-lo para SQLite github.com/dumblob/mysql2sqlite (conforme mencionado na resposta de @David_LeBauer).
Paul Rougieux 22/01

7

Eu enfrentei o mesmo problema há cerca de 2 dias atrás, quando tive que converter um banco de dados MySQL de 20 GB + para SQLite. Não foi de forma alguma uma tarefa fácil e acabei escrevendo este pacote Python que faz o trabalho.

A vantagem de ser escrito em Python é que ele é multiplataforma (diferente de um script shell / bash) e pode ser facilmente instalado usando pip install(mesmo no Windows). Ele usa geradores e fragmentação dos dados que estão sendo processados ​​e, portanto, é muito eficiente em termos de memória.

Também fiz um esforço para traduzir corretamente a maioria dos tipos de dados do MySQL para SQLite .

A ferramenta também é exaustivamente testada e funciona em Python 2.7 e 3.5+ .

É invocável via linha de comando, mas também pode ser usada como uma classe padrão do Python, que você pode incluir em alguma orquestração maior do Python.

Veja como você o usa:

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.

1
Hey @techouse, isso parece ótimo! Existe alguma maneira de funcionar com um .sqlarquivo de despejo ou requer conexão com um banco de dados MySQL instalado?
Vortek

Ei! Ummm, não, isso requer um banco de dados MySQL funcionando. Se você tem um dump sem um servidor real, sua melhor aposta é alterar o arquivo manualmente, se você souber o que está fazendo.
Klemen Tušar 15/04/19

@arkadianriver eu sugiro que você use sempre ambientes virtuais com Python 😎
Klemen Tušar


4

Maneira mais simples de converter MySql DB em Sqlite:

1) Gere o arquivo sql dump para seu banco de dados MySql.

2) Carregue o arquivo no conversor online RebaseData aqui

3) Um botão de download aparecerá na página para baixar o banco de dados no formato Sqlite


4

Eu encontrei a solução perfeita

Primeiro, você precisa deste script (coloque-o em um arquivo chamado 'mysql-to-sqlite.sh'):

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

Em seguida, despeje uma cópia do seu banco de dados:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

E agora, execute a conversão:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

E se tudo correr bem, agora você deve ter um dumpfile.db que pode ser usado via sqlite3.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states

3

Existem diferentes maneiras de fazer isso. Eu também tive esse problema e pesquisei bastante e, em seguida, consegui uma maneira simples de converter o MySQL para SQLite.

Siga esses passos:

  1. Primeiro você precisa instalar o SQLite DB Browser (muito pequeno e rápido para visualizar tabelas e dados)

  2. Abra seu arquivo MySQL no bloco de notas ou seria ótimo se você abrir no bloco de notas ++

  3. Remover as primeiras linhas extras contém informações ou consultas e salve-as.

  4. Abra o Navegador de banco de dados SQLite, crie banco de dados e, em seguida, tabelas e os mesmos tipos do banco de dados MySQL.

  5. Na barra de menus do navegador SQLite DB, selecione Arquivo-> e depois importe os dados do arquivo MySQL que você salvou.

Ele será facilmente convertido em SQLite após o diálogo de aviso.

Se houver erro, remova mais linhas extras se o seu arquivo MySQL tiver.

Você também pode instalar o MySQL to SQLite Converter Software na base de avaliação, mas as informações que estou fornecendo para conversão são o tempo de vida.


Isso funcionou bem se seus dados não tiverem caráter de apóstrofo. Por exemplo "Este é o livro de Pedro" em sql dumb será 'Este é o livro de Pedro'. Isso fará com que o DB Browser jogue um erro; para dados grandes, é difícil remover. Mas se você importar os dados do phpAdmin como CSV para o Navegador DB, essa importação será bem-sucedida. Espero que essa ajuda seja #
Seunope 19/12

1

Minha solução para esse problema executando um Mac foi

  1. Instale Ruby e sequela de forma semelhante à resposta de Macario. Eu segui este link para ajudar na configuração do desenvolvimento Ruby, mysql e sqlite3 Ruby on Rails para Mac OSX
  2. Instalar sequela

    $ gem install sequel

    Se ainda for necessário

    % gem install mysql sqlite3

    em seguida, usou o seguinte com base no documento Sequel bin_sequel.rdoc (consulte Copiar banco de dados)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

Um usuário do Windows pode instalar o Ruby e o Sequel para uma solução do Windows.


Como posso copiar apenas uma tabela do banco de dados não inteiro do banco de dados mysql?
Atul Vaibhav

Para uma única tabela no passado, eu fiz isso, mas pode haver uma maneira melhor. Exporte a tabela como csv com os nomes das colunas na primeira linha marcada. Em seguida, usando o DB Browser for SQLite, importe a tabela para meu banco de dados sqlite existente usando a opção import table from csv. Você provavelmente precisará entrar e alterar os campos para o tipo necessário, pois acredito que todos os campos serão definidos como TEXTO. No projeto em que estava trabalhando, desenvolvemos um processo em que fizemos uma chamada de API para retornar todos os dados em uma tabela e depois inserimos / substituímos os dados no banco de dados de aplicativos.
Grant Sorte

Parece que está funcionando. No entanto, não consigo encontrar onde está o arquivo de saída. Pode me ajudar?
Pontios 2/11

1

Eu tentei vários métodos nesse segmento, mas nada funcionou para mim. Então, aqui está uma nova solução, que também achei muito simples:

  1. Instale o RazorSQL . Funciona para Mac, Windows e Linux.
  2. No RazorSQL, conecte-se ao seu banco de dados, no host local, por exemplo. A conversão não funciona com arquivos sql dump.
  3. Clique com o botão direito do mouse em seu banco de dados -> Conversão de Banco de Dados -> selecione SQLite. Isso salvará um arquivo txt com todas as sqliteconsultas necessárias para criar esse banco de dados.
  4. Instale um gerenciador de banco de dados SQLite, como o DB Browser for SQLite . Funciona em qualquer sistema operacional.
  5. Crie um banco de dados vazio, vá para a guia Executar SQL e cole o conteúdo da etapa 3.

É isso aí, agora você tem seu banco de dados SQLite.


O RazorSQL parece apenas criar um arquivo * .sql "comum" com definições de tabela e informações de inserção de dados, mas nada particularmente específico do SQLite. Não exportou Views, o que é um grande sinal de menos. O cliente mysqldump que vem com o MySql também exporta visualizações, mas também produz muitas coisas condicionais, etc. o que o SQLite não digerirá.
dalilander

0

Se você tiver experiência, escreva scripts simples por Perl \ Python \ etc e converta o MySQL para SQLite. Leia os dados do Mysql e escreva-os no SQLite.


0

Gosto do SQLite2009 Pro Enterprise Manager sugerido por Jfly. Contudo:

  • O tipo de dados MySQL INT não é convertido no tipo de dados SQlite INTEGER (funciona com DBeaver)

  • Ele não importa constaints de chave estrangeira do MySQL (não foi possível encontrar nenhuma ferramenta que suporte a transferência de restrições de chave estrangeira do MySQL para SQlite.)


0

Na lista de ferramentas de conversão, encontrei o Kexi . É uma ferramenta de interface do usuário para importar de vários servidores de banco de dados (incluindo MySQL) para o SQLite. Ao importar algum banco de dados (digamos do MySQL), ele o armazena no formato Kexi. O formato Kexi é o formato SQLite 'nativo'. Então, basta copiar o arquivo kexi e ter seus dados no formato sqlite


0

Se você recebeu um arquivo de banco de dados e não instalou o servidor correto (SQLite ou MySQL), tente esta ferramenta: https://dbconvert.com/sqlite/mysql/ A versão de teste permite converter os 50 primeiros registros de cada tabela , o restante dos dados possui marca d'água. Este é um programa do Windows e pode despejar em um servidor de banco de dados em execução ou despejar a saída em um arquivo .sql

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.