Amarok: migrando de SQLite para MySQL
O Amarok usa o SQLite como gerenciador de banco de dados padrão, mas não satisfeito resolvi testar meu tocador de música digital favorito no MySQL. Este artigo descreve a solução para tal caso.
Parte 2: Fazendo o dump de collection.db
O primeiro passo será coletar todas as informações que estão no arquivo collection.db, para isto faça:
sqlite3 collection.db .dump > amarok.sql
Este comando criará um dump do banco de dados SQLite e direcionará o mesmo pelo sinal de maior ">" para o arquivo de texto "amarok.sql". Abra este arquivo com o editor e veja a estrutura completa da base de dados. No meu caso o arquivo ficou com pouco mais de 9MB e pouco mais de 100.000 linhas. Se você abrir o arquivo verá que a estrutura tem alguns parâmetros que o MySQL desconhece. Agora vamos remover as linhas desnecessárias e criar o arquivo com os dados.
cat amarok.sql | grep -v "INSERT INTO admin" | \
perl -pe 's/INSERT INTO \"(.*)\" VALUES/INSERT INTO \1 VALUES/' > amarok2.sql
$ cat amarok2.sql | \
grep -v "BEGIN TRANSACTION;" | \
grep -v "COMMIT;" | \
grep -v "CREATE TABLE" | \
grep -v "INSERT INTO directories VALUES" | \
grep -v "CREATE INDEX" | \
grep -v "CREATE UNIQUE INDEX" > amarok_dados.sql
Deste comando resultará um arquivo chamado "amarok_dados.sql", abra-o no editor de textos e verá que ele somente tem inserções, mas onde será inserido? As tabelas ainda não foram criadas! Para criar a estrutura do banco de dados passe o seguinte comando:
cat amarok.sql | \
grep -v "BEGIN TRANSACTION;" | \
grep -v "COMMIT;" | \
grep -v "INSERT INTO" > amarok_estrutura.sql
e o comando a seguir para evitar o erro: "ERROR 1071 (42000) at line 7: Specified key was too long; max key length is 1000 bytes":
replace "VARCHAR(1024)" "VARCHAR(996)" -- amarok_estrutura.sql
$ replace "VARCHAR(256)" "VARCHAR(255)" -- amarok_estrutura.sql
Agora abra o arquivo resultante do comando, o amarok_estrutura.sql, e todas as linhas que não iniciarem com CREATE UNIQUE INDEX, CREATE TABLE e CREATE INDEX você deve apagar, ou melhor dizendo, tudo que não iniciar com CREATE você deve apagar.
Salve o arquivo e estamos prontos para inserir a estrutura e os dados. Lembre-se que durante os passos de maneira alguma você pode ter iniciar o Amarok, senão ele criará a estrutura e então você terá algumas mensagens de erro.
sqlite3 collection.db .dump > amarok.sql
Este comando criará um dump do banco de dados SQLite e direcionará o mesmo pelo sinal de maior ">" para o arquivo de texto "amarok.sql". Abra este arquivo com o editor e veja a estrutura completa da base de dados. No meu caso o arquivo ficou com pouco mais de 9MB e pouco mais de 100.000 linhas. Se você abrir o arquivo verá que a estrutura tem alguns parâmetros que o MySQL desconhece. Agora vamos remover as linhas desnecessárias e criar o arquivo com os dados.
cat amarok.sql | grep -v "INSERT INTO admin" | \
perl -pe 's/INSERT INTO \"(.*)\" VALUES/INSERT INTO \1 VALUES/' > amarok2.sql
$ cat amarok2.sql | \
grep -v "BEGIN TRANSACTION;" | \
grep -v "COMMIT;" | \
grep -v "CREATE TABLE" | \
grep -v "INSERT INTO directories VALUES" | \
grep -v "CREATE INDEX" | \
grep -v "CREATE UNIQUE INDEX" > amarok_dados.sql
Deste comando resultará um arquivo chamado "amarok_dados.sql", abra-o no editor de textos e verá que ele somente tem inserções, mas onde será inserido? As tabelas ainda não foram criadas! Para criar a estrutura do banco de dados passe o seguinte comando:
cat amarok.sql | \
grep -v "BEGIN TRANSACTION;" | \
grep -v "COMMIT;" | \
grep -v "INSERT INTO" > amarok_estrutura.sql
e o comando a seguir para evitar o erro: "ERROR 1071 (42000) at line 7: Specified key was too long; max key length is 1000 bytes":
replace "VARCHAR(1024)" "VARCHAR(996)" -- amarok_estrutura.sql
$ replace "VARCHAR(256)" "VARCHAR(255)" -- amarok_estrutura.sql
Agora abra o arquivo resultante do comando, o amarok_estrutura.sql, e todas as linhas que não iniciarem com CREATE UNIQUE INDEX, CREATE TABLE e CREATE INDEX você deve apagar, ou melhor dizendo, tudo que não iniciar com CREATE você deve apagar.
Salve o arquivo e estamos prontos para inserir a estrutura e os dados. Lembre-se que durante os passos de maneira alguma você pode ter iniciar o Amarok, senão ele criará a estrutura e então você terá algumas mensagens de erro.