MariaDB / MySQL w AIS
Opis ten ma charakter edukacyjny
Podobnie jak w przypadku Node-RED, PostgreSQL, InfluxDB i innych rzeczy, które można instalować na bramce, nie jest to coś, co w AI-Speaker rekomendujemy czy wspieramy.
Jeśli instalujesz bazę danych na bramce to pamiętaj, że jesteś jej administratorem i sam dbasz o ilość danych które są generowane w Twoim systemie i zapisywane w Twojej bazie.
Historia MariaDB
MariaDB to fork(kopia kodu) MySQL.
Michael Monty Widenius (założyciel MySQL) zdecydował się na fork MySQL i stworzenie dla niego firmy o nazwie Monty Program AB. Po tym jak MySQL został przejęty przez Sun Microsystems w 2008 roku. Następnie Oracle nabył Sun Microsystems w 2010 roku wraz z MySQL.
Tak narodziła się MariaDB (Maria to imię drugiej córki Michaela Monty Wideniusa).
W grudniu 2012 r. utworzono fundację MariaDB, aby uniknąć przejęcia firmy, jak miało to miejsce w przeszłości w przypadku MySQL.
MariaDB ma nowe interesujące funkcje: lepsze testowanie, ulepszenia wydajności i poprawki błędów, które nie są dostępne w MySQL. Wiele optymalizacji w MariaDB pochodzi z firm które używają tej bazy - z Google, Facebooka, Twittera i tak dalej.
Instalacja MariaDB na bramce AIS
Binarkę MariaDB mamy w naszym repozytorium apt, instalacja sprowadza się do wykonania w konsoli komendy:
apt install mariadb
Uruchomienie bazy MariaDB jako usługi
Za każdym razem, gdy chcemy uzyskać dostęp do bazy danych MySQL ręcznie za pomocą wiersza poleceń lub za pomocą jakiegoś programu (aplikacji internetowej), musimy uruchomić serwer MySQL poleceniem:
mysqld_safe
Zatrzymanie bazy
jeżeli uruchomiliśmy serwer w konsoli poleceniem mysqld_safe
to żeby go zatrzymać możemy zabić proces bazy danych poleceniem:
killall mysqld mysqld_safe
następnie odczekać 10 sekund i upewnić się, że proces nie działa w tle, polecniem:
ps aux | grep mysqld
jeżeli nadal będzie widać więcej procesów niż tylko jedna linijka ( uruchomienie powyższej komendy) to możemy do polecenia killall dodać flagę -9 to powinno zatrzymać proces bazy:
killall -9 mysqld mysqld_safe*
Uruchomienie bazy MariaDB jako usługi
Żeby serwer MySQL był automatycznie uruchamiany podczas startu systemu dodamy skrypt uruchamiający do managera procesów PM2.
Tworzymy najpierw w folderze AIS
plik/skrypt bash uruchamiający bazę:
nano ~/AIS/start_mysql_db.sh
w pliku dodajemy ma takie dwie linijki:
echo "Start Bazy Danych"
mysqld_safe
następnie dodajemy uprawnienie do uruchamiania tego pliku, komendą
chmod +x ~/AIS/start_mysql_db.sh
Żeby serwer MySQL był automatycznie uruchamiany podczas startu systemu dodajemy skrypt uruchamiający do managera procesów PM2:
pm2 start ~/AIS/start_mysql_db.sh --name mysql --output /dev/null --error /dev/null --restart-delay=150000
następnie zapisujemy stan procesów poleceniem:
pm2 save
Tworzenie nowej bazy
Teraz dodamy nową bazę, nowego użytkownika i temu nowemu użytkownikowi nadamy pełny dostęp do tej nowej bazy.
W tym celu na początek logujemy się do serwera bazodanowego na swoją nazwą użytkownika w AIS.
Jaką mamy nazwę użytkownika w systemie Linux można sprawdzić komendą:
id -un
albo
whoami
Czyli logujemy się taką komendą:
mysql -u $(whoami)
Po zalogowaniu się do serwera MySQL tworzymy nową bazę z odpowiednim kodowaniem, poleceniem:
CREATE DATABASE ha CHARACTER SET utf8;
następnie dodajemy nowego użytkownika bazodanowego:
CREATE USER 'ais'@'localhost' IDENTIFIED BY 'dom';
i nadajemy mu uprawnienia do bazy ha:
GRANT ALL PRIVILEGES ON ha.* TO 'ais'@'localhost';
robimy exit
i kontrolnie logujemy się do nowej bazy ha
już jako użytkownik ais
z hasłem dom
:
mysql -h 127.0.0.1 -u ais -pdom ha
Włączenie zapisu zdarzeń do lokalnej bazy MySQL
Instalujemy jeszcze pakiet pythona do komunikacji z bazą MySQL / MariaDB:
pip install pymysql
Teraz w aplikacji możemy skonfigurować bazę na bramce jako bazę do zapisu zdarzeń:
Oczywiście lepiej nie przesadzać z ilością dni - szczególnie na bramkach DEV1.
Żeby system przełączył się na zapis do nowej bazy restartujemy proces ais
:
pm2 restart ais
Po ponownym uruchomieniu procesu ais
w bazie zostaną utworzone tabele do których system będzie zapisywał zdarzenia.
Możemy to sprawdzić, łączymy się do bazy:
mysql -h 127.0.0.1 -u ais -pdom ha
i uruchamiamy komendę:
SHOW TABLES;
zmieniamy jeszcze kodowanie tabel żeby nie było problemu z polskimi znakami:
ALTER TABLE states CONVERT TO CHARACTER SET utf8;
ALTER TABLE events CONVERT TO CHARACTER SET utf8;
Możemy też sprawdzić ile mamy rekordów w tabelach itd…