Pulpit plazmy korzysta z akonadi, które w domyślnej konfiguracji używa własnej instancji mysql/mariadb. Amarok przechowuje informacje o naszej bibliotece (notowania, teksty, oceny) również w bazie mysql. W tym celu korzysta również z własnej instancji. DigiKam domyślnie przechowuje informacji o kolekcji obrazów w bazie sqlite. Przy większych kolekcjach, może okazać się, że wydajność sqlite jest niewystarczająca. Nic nie stoi na przeszkodzie, aby wszystkie bazy przenieść do systemowej instancji mariadb. Dzięki temu unikniemy dublowania instancji baz dla akonadi i amaroka oraz przyspieszymy działanie digiKama.
I krótka legenda dla kodów użytych w tym wpisie.Kody zaczynające się od:
- # – należy wykonać jako root
- $ – należy wykonać jako zwykły użytkownik
- > – należy wykonać w konsoli mysql/mariadb
Zanim zaczniemy migrować bazy, należy zainstalować serwer mysql/mariadb i uruchomić go:
# zypper in mariadb # systemctl enable mysql # systemctl start mysql
Akonadi
Upewniamy się, że akonadi działa:
$ akonadictl status
Tworzymy zrzut aktualnej bazy akonadi za pomocą:
$ mysqldump --socket=~/.local/share/akonadi/socket-$HOSTNAME/mysql.socket akonadi > ~/akonadi-backup.sql
Zatrzymujemy serwer akonadi:
$ akonadictl stop
Zmieniamy konfigurację bazy danych akonadi, tak aby korzystała z zewnętrznego serwera mysql. Możemy edytować plik ~/.config/akonadi/akonadiserverrc
by jego zawartość wyglądała następująco:
[%General] Driver=QMYSQL SizeThreshold=4096 ExternalPayload=false [QMYSQL] Name=akonadi Host=localhost Options= ServerPath=/usr/sbin/mysqld StartServer=false User=akonadi Password=akonadi [Debug] Tracer=null
Lub możemy uruchomić:
$ kcmshell4 akonadi
Odznaczamy ‚Używaj wewnętrznego serwera MySQL’ i uzupełniamy dane jak na rysunku poniżej.
Następnie konieczne jest dodanie bazy danych i użytkownika.
> CREATE USER 'akonadi'@'localhost' IDENTIFIED BY 'akonadi';> CREATE DATABASE `akonadi`;> GRANT ALL PRIVILEGES ON akonadi.* to 'akonadi'@'localhost' IDENTIFIED BY 'akonadi';
Następnie należy przywrócić nasz zrzut bazy akonadi za pomocą:
$ mysql akonadi < akonadi-backup.sql
Teraz pozostało nam już tylko uruchomić serwer akonadi za pomocą:
$ akonadictl start
Jeśli spotkamy się z błędem:
Sql error: Table 'akonadi.SchemaVersionTable' doesn't exist QMYSQL: Unable to execute query
należy zmienić nazwy table naszej bazy na format CamelCase.
> RENAME TABLE schemaversiontable TO SchemaVersionTable;> RENAME TABLE resourcetable TO ResourceTable;> RENAME TABLE collectionattributetable TO CollectionAttributeTable;> RENAME TABLE collectionmimetyperelation TO CollectionMimeTypeRelation;> RENAME TABLE collectionpimitemrelation TO CollectionPimItemRelation;> RENAME TABLE collectiontable TO CollectionTable;> RENAME TABLE flagtable TO FlagTable;> RENAME TABLE mimetypetable TO MimeTypeTable;> RENAME TABLE parttable TO PartTable;> RENAME TABLE pimitemflagrelation TO PimItemFlagRelation;> RENAME TABLE pimitemtable TO PimItemTable;
Od teraz akonadi będzie korzystało z systemowej instancji mysql/mariadb.
Możliwe są dalsze optymalizacje bazy danych, adekwatne do konfiguracji używanej przez dedykowaną instancję bazy.
Amarok
Zatrzymujemy serwer mysql/mariadb:
# systemctl stop mysql
Uruchamiamy serwer tylko z bazą amaroka:
$ cd ~/.kde4/share/apps/amarok $ /usr/sbin/mysqld --defaults-file=`pwd`/my.cnf --default-storage-engine=MyISAM --datadir=`pwd`/mysqle --socket=`pwd`/sock --skip-grant-tables
Teraz pozostaje utworzyć zrzut bazy amaroka:
$ mysqldump -S sock amarok > amarok.sql
Po wykonaniu zrzuty możemy już zatrzymać serwer z bazą amarok i uruchomić serwer z konfiguracją globalną.
# systemctl start mysql
Następnie konieczne jest utworzenie bazy danych, do której zaimportujemy dane z zrzutu.
Tworzymy bazę i użytkownika:
> CREATE USER 'amarok'@'localhost' IDENTIFIED BY 'amarok';> CREATE DATABASE `amarok`;> GRANT ALL PRIVILEGES ON amarok.* to 'amarok'@'localhost' IDENTIFIED BY 'amarok';
Importujemy zrzut do nowej bazy:
$ mysql -u amarok -p amarok < amarok.sql
Teraz pozostaje tylko skonfigurować amaroka, aby korzystał z zewnętrznej bazy danych. Dane muszą być oczywiście takie jakich użyliśmy przed chwilą.
digiKam
Zaczniemy od utworzenia 2 nowych baz dla digiKama i użytkownika dla tych baz.
> CREATE USER 'digikam'@'localhost' IDENTIFIED BY 'digikam';> CREATE DATABASE `digikam`;> CREATE DATABASE `thumbnails-digikam`;> GRANT ALL PRIVILEGES ON digikam.* to 'digikam'@'localhost' IDENTIFIED BY 'digikam';> GRANT ALL PRIVILEGES ON thumbnails-digikam.* to 'digikam'@'localhost' IDENTIFIED BY 'digikam';
Następnie korzystamy z wbudowanego w digiKam narzędzia do migracji bazy danych. W tym celu uruchamiamy digiKam i z menu Ustawienienia
wybieramy Migracja bazy danych
. W lewej części okna wybieramy sqlite i podajemy ścieżkę gdzie są aktualnie bazy przechowywane. Domyślnie jest to ~/Obrazy
. W prawej części okna uzupełniamy dane niezbędne do połączenia z bazą mysql/mariadb.
Pozostaje sprawdzić połączenie i zmigrować naszą bazę sqlite do mysql/mariadb przez naciśnięcie przycisku Migruj ->
.
Czas migracji zależny jest od wielkości naszej kolekcji oraz wydajności naszego sprzętu, zwłaszcza dysku twardego i procesora. Po migracji ostatnim krokiem jest skonfigurowanie digiKama, aby korzystał z bazy mysql/mariadb. Z menu Ustawienia
wybieramy Konfiguracja: digiKam...
i w sekcji Baza danych
należy wybrać MySQL i uzupełnić dane połączenia.
UWAGA! Jeśli z komputera korzysta kilku użytkowników, należy dla każdego użytkownika utworzyć osobną bazę. Jako nazwę dla baz, można użyć schematu $USER_akonadi
, $USER_amarok
i $USER_digikam
.