Více instancí MariaDB na jednom serveru
1. Proč izolovat starší databázi?
ISPConfig a současné weby používají hlavní službu MariaDB na portu 3306. Starší aplikace může vyžadovat tolerantní chování SQL, které se nehodí pro administrační panel ani pro ostatní weby. Druhá služba zabrání kompromisu v globální konfiguraci.
2. Rozložení instancí
| Vlastnost | Hlavní instance | Starší instance |
|---|---|---|
| Účel | ISPConfig a běžné weby | Pouze starší aplikace |
| Naslouchání TCP | 3306 | 127.0.0.1:3307 |
| Služba | mariadb.service | mariadb-charming.service |
| Konfigurace | Konfigurace distribuce | /etc/mysql/mariadb-charming.cnf |
| Datový adresář | Výchozí adresář MariaDB | /var/lib/mysql-charming |
| Režim SQL | Běžná výchozí pravidla | Prázdný, jen tam, kde to vyžaduje kompatibilita |
Použité řešení: databázová služba pro starší aplikaci záměrně není veřejná. Aplikace se připojují přes 127.0.0.1:3307 nebo přes vyhrazený unixový socket.
3. Omezení ISPConfig
ISPConfig používejte pro běžnou službu na portu 3306. Ke starší službě se připojujte výslovně na 127.0.0.1:3307. Nepoužívejte localhost, pokud není výslovně nastavený jeho socket, protože by se mohla vybrat hlavní instance.
4. Konfigurace druhé instance
Neměňte globální sql_mode hlavní instance. Vytvořte samostatný konfigurační soubor s jiným portem, socketem, souborem PID, datovým adresářem a cestou k logům.
[mariadbd]
port = 3307
bind-address = 127.0.0.1
socket = /run/mysqld/mariadb-charming.sock
pid-file = /run/mysqld/mariadb-charming.pid
datadir = /var/lib/mysql-charming
log-error = /var/log/mysql/mariadb-charming.err
sql_mode =
[client]
port = 3307
socket = /run/mysqld/mariadb-charming.sockVyhrazený datový adresář inicializujte nástrojem MariaDB odpovídajícím nainstalované verzi a nastavte jeho vlastníka na uživatele mysql. Adresář nesmí být dostupný uživatelům webu.
5. Samostatná služba v systemd
Druhá instance se spouští nezávisle, takže se hlavní databáze dá běžně provozovat, aniž by se měnilo chování starší aplikace.
[Unit]
Description=MariaDB legacy application instance
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/sbin/mariadbd --defaults-file=/etc/mysql/mariadb-charming.cnf
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now mariadb-charming.service
systemctl --no-pager status mariadb-charming.service
ss -lntp | grep 3307Nastavení zabezpečení přizpůsobte konvencím služby v balíčku vaší distribuce. Než se na ni v produkci spolehnete, vyzkoušejte restart služby i obnovu databáze.
6. Vlastní uživatelé a oprávnění
Účty aplikací vytvářejte jen ve starší instanci. Omezte je na 127.0.0.1, přidělte jen nezbytná databázová oprávnění a hesla uchovávejte mimo tento dokument.
mariadb --protocol=TCP --host=127.0.0.1 --port=3307 -u root -p
CREATE DATABASE legacy_application CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'legacy_app'@'127.0.0.1' IDENTIFIED BY 'use-a-password-manager';
GRANT ALL PRIVILEGES ON legacy_application.* TO 'legacy_app'@'127.0.0.1';
FLUSH PRIVILEGES;Jako databázový hostitel aplikace nastavte výslovně 127.0.0.1 a jako port 3307. Při použití localhost se může vybrat unixový socket a aplikace se omylem připojí k hlavní instanci.
7. Přidejte jasně označené připojení v phpMyAdminu
phpMyAdmin může nabízet druhý záznam serveru pro lokální starší službu. Označte ho výrazně, použijte hostitele na lokální smyčce a port 3307 a nepovolujte libovolné vzdálené hostitele.
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3307';
$cfg['Servers'][$i]['verbose'] = 'Legacy MariaDB (3307)';
$cfg['Servers'][$i]['auth_type'] = 'cookie';Použijte strukturu konfigurace a lokální include, které dodává nainstalovaný balíček phpMyAdminu. Po aktualizaci balíčků otestujte oba záznamy.
8. Zálohy, monitoring a kontrola při převzetí
- Zálohujte obě instance zvlášť a obnovu ověřujte na neprodukčním místě.
- Sledujte obě služby v systemd, volné místo na disku, chybové logy a dokončení záloh.
- Pomocí
ss -lntpověřte, že port3307naslouchá jen na lokální smyčce. - Ověřte, že hlavní instance má dál původní nastavení režimu SQL.
- Po každé změně otestujte starší aplikaci s výslovně zadaným hostitelem a portem.
mariadb --protocol=TCP -h 127.0.0.1 -P 3307 -e "SELECT @@port, @@sql_mode;"
mariadb -e "SELECT @@port, @@sql_mode;"
systemctl is-active mariadb mariadb-charmingCílem jsou dvě nezávisle provozovatelné služby: zabezpečená hlavní MariaDB pro ISPConfig a běžné weby a oddělená kompatibilní služba pro starší aplikaci.
Nic tu není.
Zatím sem nebyl vložen žádný komentář.