From Amarok Wiki


Contents

Configurazione

Aggiunta del Supporto in amaroK

amaroK 1.2 supporta un database MySQL in aggiunta al supporto integrao con il database SQLite. Per avere in supporto a MySQL, basta specificare "--enable-mysql" come parametro di configurazione e far ricompilare il pacchetto "make install" da root. La tua linea di configurazione probabilmente sarà qualcosa tipo:

$ ./configure --enable-mysql

Inoltre assicurati di avere installato sul tuo sistema le librerie libmysqlclient, con le development headers (-dev packages) installate.

Setup di MySQL

Anzitutto bisogna creare una password per MySQL, se tu non ne hai già una.

$ mysql -u root 
set password for root@localhost = password('xxxxxxx'); 
flush privileges; 
quit; 

Chiaramente cambia xxxxxx con la password che vuoi.

Dopo avere impostato la password, bisogna creare un database per amaroK attraverso il classico metodo. Basta semplicemente usare il comando "mysql": (questo ti chiederà la password per l'utente root di MySQL - impostata prima)

$ mysql -p -u root
CREATE DATABASE amarokdb;
USE mysql;
GRANT select, insert, alter, update, delete, create, drop, create temporary tables, index 
ON amarokdb.* TO amarok@localhost IDENTIFIED BY 'PASSWORD_UTENTE';
FLUSH PRIVILEGES;

Nell'esempio sopra, è stato creato un database chiamato "amarokdb", e un utente chiamato "amarok" che può accedere il locale localhost" usando la password "PASSWORD_UTENTE". Se vuoi usare la funzione per il backup automatico con mysqldump, cambia la stringa GRANT con GRANT ALL

Nota: Di default amarok usa un database chiamato "amarok" e non "amarokdb".

Ora che il database esiste, è sufficiente aprire il pannello di configurazione di amaroK (si trova nel menu Impostazioni), e andare nella sezione Collezione. Qui bisogna cambiare nel menu a tendina SQLite e selezionare MySQL. Probabilmente bisognerà specificare un hostname (il nome del computer, o meglio localhost), la porta (di default la 3306), il nome del database che hai creato per amaroK (nell'esempio precedente "amarokdb") e il nome dell'utente che ha accesso (e che abbia anche i privilegi di scrittura) al database con relativa password (nell'esempio sopra l'utente è "amarok" e la password è "PASSWORD_UTENTE").

Usare il supporto di MySQL da remoto: La maggior parte delle installazioni, usano il demone MySQL configurato per le connessioni in locale (localhost) di default.

Perciò può capitare di avere un errore del tipo "Impossibile connettersi al server o al database" (errori che comunque non sono legati alla password sbagliata). Per risolvere tali problemi bisogna editare il file my.cnf sulla macchina col database (/etc/mysql/my.cnf) e decommentare la variabile "bind_address" e riavviare il mysql. Per quanto ne so, non c'è motivo di impostare anche l'interfaccia della scheda di rete e la porta in ascolto. Nel caso comunque andrebbe aggiornato il firewall con i dati di connessione.

Convertire i Database

Da SQLite -> MySQL

Uno (sconsigliato) metodo per trasferire il tuo database SQLite3 a MySQL è:

cd ~/.kde/share/apps/amarok && \
sqlite3 collection.db .dump | \ 
grep -v "BEGIN TRANSACTION;" | \
grep -v "COMMIT;" | \
perl -ne 's/INSERT INTO \"(.*)\" VALUES/INSERT INTO \1 VALUES/; print' | \
perl -ne 's/VARCHAR\(256\)/VARCHAR\(255\)/; print' | \
mysql -u root -p amarokdb

Io ho visto che questo metodo non funzionava, potevo importare i dati da SQLite

così:

  • Lanciare amaroK, cambiare il database a mysql, e creare il database (senza far partire nessuna canzone)
  • Scaricare SQLite Database Browser
  • Esportare tutti i dati in un file temporaneo, per es. amarok_dump.sql
  • Rimuovere tutti i comandi sql, BEGIN TRANSACTION, COMMIT e CREATE
  • Importare il file usando MySQL:
cat amarok_dump.sql | mysql -u root -p amarokdb

Nel caso dia qualche errore, è possibile che tu abbia fatto partire qualche canzone e che il programma abbia scritto delle stringhe riguardo quel particolare file nel database. In questo caso, basta editare il file amarok_dump.sql, e cercare la linea con i dati della canzone; trovatala basta rimuovere TUTTO prima di questa(poichè quei comandi sono già stati eseguiti da MySQL -- si riceverà un errore) Se vuoi contiunuare a usare questa stringa, si può rimpiazzare INSERT INTO con REPLACE INTO. e rilanciare la stringa di comando sopra.

Da MySQL -> SQLite

Un modo (non supportata) di trasferire il database da MySQL a SQLite3 è:

cd ~/.kde/share/apps/amarok && \
mv collection.db collection.db.old && \
mysqldump -uroot -p -n -t amarok | sed -e "s/\\\'/\'\'/g" | sed -e "s/\\\\\"/\"\"/g" > amarokdb.sql && \
sqlite3 collection.db

Una volta lanciato SQLite, nel prompt "sqlite>" copia e incolla queste righe per creare le tabelle:

CREATE TABLE album (id INTEGER PRIMARY KEY ,name VARCHAR(255) );
CREATE TABLE artist (id INTEGER PRIMARY KEY ,name VARCHAR(255) );
CREATE TABLE directories (dir VARCHAR(255) UNIQUE,changedate INTEGER );
CREATE TABLE genre (id INTEGER PRIMARY KEY ,name VARCHAR(255) );
CREATE TABLE images (path VARCHAR(255),artist VARCHAR(255),album VARCHAR(255) );
CREATE TABLE related_artists (artist VARCHAR(255),suggestion VARCHAR(255),changedate INTEGER );
CREATE TABLE statistics (url VARCHAR(255) UNIQUE,createdate INTEGER,accessdate INTEGER,percentage FLOAT,playcounter INTEGER);
CREATE TABLE tags (url VARCHAR(255),dir VARCHAR(255),createdate INTEGER,album INTEGER,artist INTEGER,genre INTEGER,title VARCHAR(255),year INTEGER,comment VARCHAR(255),track NUMERIC(4),bitrate INTEGER,length INTEGER,samplerate INTEGER,sampler BOOL );
CREATE TABLE year (id INTEGER PRIMARY KEY ,name VARCHAR(4) );
CREATE INDEX album_idx ON album( name );
CREATE INDEX album_tag ON tags( album );
CREATE INDEX artist_idx ON artist( name );
CREATE INDEX artist_tag ON tags( artist );
CREATE INDEX directories_dir ON directories( dir );
CREATE INDEX genre_idx ON genre( name );
CREATE INDEX genre_tag ON tags( genre );
CREATE INDEX images_album ON images( album );
CREATE INDEX images_artist ON images( artist );
CREATE INDEX percentage_stats ON statistics( percentage );
CREATE INDEX playcounter_stats ON statistics( playcounter );
CREATE INDEX related_artists_artist ON related_artists( artist );
CREATE INDEX sampler_tag ON tags( sampler );
CREATE INDEX url_stats ON statistics( url );
CREATE INDEX url_tag ON tags( url );
CREATE INDEX year_idx ON year( name );
CREATE INDEX year_tag ON tags( year );

e importa il file mysqldump tramite il prompt di "sqlite>" con:

.read amarokdb.sql

Backup Automatico

Effettuare il backup della vostra collezione in modo automatico è un lavoretto facile usando il demone cron. E' sufficiente creare un script(SH) a copiarlo nella cartella /etc/cron.weekly.

#!/bin/sh
# Backup del database MySQL di amaroK
dir=`date +%Y-%m-%d`
if [ -d /home/backup/amarok ]; then
       mkdir /home/backup/amarok/$dir
       mysqldump -u amarok -pPASSWORD amarokdb > 

/home/backup/amarok/$dir/amarokdb.mysql

fi

Questo scripit creerà una cartella con la data corrente in /home/backup nella quale copierà il file con il backup. Lo script usa il nome utente "amarok" e usa il database "amarokdb" (nota: il nome del database e quello dell'utente devono essere gli stessi che usa amaroK per accedere a mysql. Rimpiazza inoltre la password (PASSWORD) con la password associata all'utente per il database. Per poter effettuare il backup del database l'utente deve tutti i permessi sul database impostabile con la variabile GRANT ALL.