W liczbach
- 114 commitów w 4 dni
- 266 testów PHPUnit, 738 asercji
- 35 ticketów GitHub obsłużonych (20 zamkniętych, 15 otwartych z proponowanym rozwiązaniem)
- 12 nowych funkcji
- 0 regresji (wszystkie testy przechodzą)
Nowości
1. Pełna kompatybilność z MySQL 8.4
MySQL 8.4 usunął komendy SLAVE na rzecz REPLICA. PmaControl teraz automatycznie wykrywa fork (MariaDB vs MySQL) i używa właściwej składni:
| Akcja | MariaDB | MySQL 8.4+ |
|---|---|---|
| Zatrzymanie replikacji | STOP SLAVE 'conn' |
STOP REPLICA FOR CHANNEL 'conn' |
| Zmiana źródła | CHANGE MASTER TO ... |
CHANGE REPLICATION SOURCE TO ... |
| Wątki równoległe | slave_parallel_threads |
replica_parallel_workers |
| Status mastera | SHOW MASTER STATUS |
SHOW BINARY LOG STATUS |
| GTID | MASTER_USE_GTID = slave_pos |
SET PERSIST gtid_mode = ON (4 kroki) |
Włączenie GTID na MySQL wymaga progresywnej migracji (OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON) na masterze, a następnie na slave'ie. PmaControl obsługuje wszystko automatycznie, w tym SET PERSIST dla trwałości bez ingerencji w my.cnf.
2. Analiza binlogów
Nowe narzędzie do analizy binlogów dostępne ze strony replikacji każdego slave'a. Wybierz zakres czasowy, a PmaControl:
- Pobiera pliki binlog przez protokół MySQL (jak wątek IO)
- Parsuje eventy GTID (równoległość, rozmiary transakcji)
- Zlicza DML na tabelę (INSERT/UPDATE/DELETE)
- Oblicza wolumen na sekundę
- Wykrywa DDL (ALTER TABLE, DROP itp.)
- Generuje rekomendacje na podstawie rzeczywistej konfiguracji mastera i slave'a
Interaktywne wykresy:
- Wolumen KB/s + opóźnienie replikacji (podwójna oś Y, zsynchronizowany zoom)
- Transakcje/sekundę + threads_running na masterze i slave'ie
- Treemapy DML według bazy danych i tabeli (przeliczane przy zoomie)
- Tabela DDL kolorowana według typu (ALTER=pomarańczowy, DROP=czerwony, CREATE=zielony)
Inteligentne cachowanie: pobrane binlogi są przechowywane w data/binlog_analysis/{server_id}/ z TTL 30 dni. Analiza na tym samym zakresie czasowym jest niemal natychmiastowa.
Bezpieczeństwo: dane uwierzytelniające MySQL nie są już widoczne w ps aux — zamiast tego używany jest tymczasowy plik .my.cnf z chmod 0600.
3. Replikacja multi-source
Serwery MariaDB multi-source (jak production_all, który replikuje z production_fr, production_uk, production_ro) wyświetlają teraz:
- Karty: jedna na kanał replikacji + karta "+" do dodawania nowego źródła
- Formularz konfiguracji: kompletny CHANGE MASTER (host, port, user, password, GTID, SSL, replicate_do_db)
- Filtrowane wykresy: każda karta pokazuje tylko dane opóźnień swojego kanału
4. GeoIP IPv4 + IPv6
Flagi krajów na stronie serwerów działają teraz z adresami IPv6. Pełne zakresy GeoLite2 (650K IPv4 + 1,95M IPv6 = 2,6M zakresów) są importowane do MariaDB w celu zapytań SQL < 1ms.
5. Group Replication / InnoDB Cluster
Nowa strona w menu Architektura > Group Replication:
- Niezawodne wykrywanie roli PRIMARY/SECONDARY przez
performance_schema.replication_group_members - Wyświetlanie w grafie Dot3 (podgrupy: Primary na zielono / Replica na niebiesko)
- Stan ONLINE/RECOVERING/ERROR/OFFLINE z kolorami
6. Przeprojektowany dashboard
Strona główna wyświetla teraz:
- KPI: liczba serwerów, dostępność (%), replikacja (%), demony
- Alerty: lista niedostępnych serwerów (tylko monitorowanych)
- Rozkład: środowiska, klienci, wersje (poziome paski)
- Demony: kompaktowa siatka ze znacznikami running/stopped/error
7. Rola ReadOnly
Nowa rola ReadOnly (group_id=10) ze 134 jawnie dozwolonymi akcjami, bez wildcardów. Zabronione: wszelkie zapisy, kontrola replikacji, hasła, debug, ciężkie zapytania na information_schema, kontrola demonów.
8. Przeprojektowane strony
- Client/index: siatka kart z paskiem zdrowia, edycja inline, przełącznik monitorowania
- Architecture/index: nagłówek z ciemnoniebieskim gradientem, czysta siatka SVG
- Slave/show: karty multi-source, wykresy Chart.js 4.5.1 z zsynchronizowanym zoomem
Naprawione błędy
Bezpieczeństwo
- Sanityzacja
connection_nameprzeciwko SQL injection w 5 metodach - Whitelist edytowalnych pól w
Client::update() - Hasło ukryte w listach procesów (
--defaults-extra-filezamiast--password=)
Stabilność
- Partycje ts_value zdesynchronizowane między tabelami (fix: tworzenie per-table + dzisiaj uwzględniony)
Extraction2:sql_query_silentdla brakujących partycji- Analiza binlogów: wykrywanie zatrzymania zamiast stałego timeoutu (120s bez wzrostu = kill)
testAccessReplication(): dodanoBINLOG MONITORdla MariaDB 10.5+slave_connections_needed_for_purge=0przed czyszczeniem binlogów
UI
- Sparkline'y Chart.js zmigrowane z v2 do v4
- Kolizja Canvas ID na wykresach wielokanałowych
- "Load previous day" zawsze dekrementuje nawet bez danych
- Poprawione niestabilne tooltipy (tryb
nearestzamiastindex) - Tooltipy kolumn sys schema (ponad 100 kolumn udokumentowanych)
Roadmapa — co pozostaje
Otwarte tickety (35)
Instalator Debian 13 (7 ticketów):
- Przewidywalne hasła (#123)
- Dane uwierzytelniające w tekście jawnym w
/tmp/config.json(#117) - Prywatny klucz SSH w repozytorium (#114)
- Ignorowana wersja MariaDB (#120)
- Własność
/var/www(#119)
Analiza binlogów:
- Oś czasu Gantt wyrównana z wykresami (#106)
- Analiza uruchamiana podwójnie (#122)
- Nieatomowy cache zapisu dla logów MySQL (#121)
Jakość danych:
- Normalizacja opóźnienia NULL → 0 (#113)
- Stan SSL utracony w normalizacji MySQL 8 (#116)
- Dashboard: SingleStore klasyfikowany jako MySQL (#130), ponowne użycie PID (#129), seconds_behind_source (#126)
Legacy:
- Zmiana nazwy bazy danych z collation (#26)
- Kodowanie LDAP (#40)
- Nazwy tabel z myślnikami w Graphviz (#65)
- SqlFormatter — przestarzałe strlen (#72)
Planowane ulepszenia
- Agregacja szeregów czasowych: raw → 1min → 1hr → 1day z odchyleniem standardowym do wykrywania anomalii
- Alerting: powiadomienia Telegram/email o opóźnieniu, niedostępności serwera, miejscu na dysku
- System wtyczek: instalacja/deinstalacja z GitHub
- REST API: udostępnianie metryk do integracji zewnętrznej
Linki
- GitHub: github.com/PmaControl/PmaControl
- Telegram: t.me/pmacontrol
- Otwarte tickety: Issues
PmaControl jest narzędziem open-source do monitorowania MariaDB/MySQL. Wkład mile widziany.
Opublikowano (0)
Nieprawidłowy adres e-mail.
Autor