Konsolidacja baz mysql dla aplikacji KDE w openSUSE

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.

akonadi-system-mariadb

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ą.

Konfiguracja amaroka i zewnętrznej bazy

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.

Migracja sqlite do mariadb w digiKam

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.

Konfiguracja mysql w digiKam

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.

comments powered by Disqus