MySQL na Ubuntu 20.04 (verzija 8.0) obično se instalira preko apt za par minuta; odmah pokrenite mysql_secure_installation, promenite root lozinku i podesite bind-address na 127.0.0.1 za lokalne servise. Primeri pokazuju da zaboravljena konfiguracija omogućava nepoželjan pristup, zato zatvorite port 3306 u firewallu i napravite redovne bekape baze podataka.
Priprema sistema za instalaciju MySQL
Pre početka instalacije MySQL proverite minimalne zahteve kernela, arhitekturu (x86_64 vs ARM) i dostupnost repozitorijuma na ciljanom Linux sistemu, kao i verzije glibc i OpenSSL; nedostatak kompatibilnosti može onemogućiti pokretanje servera ili dovesti do sigurnosnih propusta.
Provera kompatibilnosti Linux distribucije za MySQL
Proverite da li distribucija (npr. Ubuntu 20.04/22.04, Debian 11/12, CentOS 7/8, AlmaLinux 8) zvanično podržava izabranu verziju MySQL; obratite pažnju na datume isteka podrške, verzije paketa, dostupnost binarnih repozitorijuma i kompatibilnost sa systemd te verzijom glibc za stabilan rad.
Ažuriranje sistema i potrebnih paketa za MySQL
Ažurirajte paketne liste i instalirajte obavezne zavisnosti pre instalacije MySQL: na Debian/Ubuntu koristite apt, na RHEL/CentOS/AlmaLinux dnf/yum; proverite slobodan prostor (>1 GB za osnovnu instalaciju), postojanje rezervnih kopija i firewall pravila koja mogu blokirati port 3306.
Konkretnije komande: na Debian/Ubuntu sudo apt update && sudo apt upgrade -y i sudo apt install wget gnupg2 libaio1 ca-certificates -y; na RHEL/CentOS/AlmaLinux sudo yum update -y i sudo yum install wget lsb-release libaio -y. Pre nadogradnje proverite disk sa df -h i napravite snapshot/backup konfiguracija.
Proces instalacije MySQL servera
Na Debian/Ubuntu koristite zvanični MySQL APT repo ili paket iz repozitorijuma distribucije; komande: sudo dpkg -i mysql-apt-config, sudo apt update, sudo apt install mysql-server. Na RHEL/CentOS/Fedora dodajte MySQL YUM/DNF repo i instalirajte sudo dnf install mysql-server. Proverite GPG potpis paketa i verziju (npr. MySQL 8.0.x) pre instalacije.
Konfiguracija početnog podešavanja MySQL
Pokrenite mysql_secure_installation za uklanjanje test baze, deaktivaciju anonimnih naloga i postavljanje root lozinke; ako je root podešen na auth_socket, promenite autentifikaciju naredbom ALTER USER ili kreiranjem novog administrativnog naloga. Restartujte servis: sudo systemctl restart mysql i proverite status systemctl status mysql.
Da omogućite pristup aplikacijama, izmenite /etc/mysql/*/mysqld.cnf i podesite bind-address na 0.0.0.0 samo uz firewall i ograničenje po IP; kreirajte korisnika: CREATE USER ‘app’@’%’ IDENTIFIED BY ‘snažna_lozinka’; GRANT ALL ON db.* TO ‘app’@’%’; FLUSH PRIVILEGES;. Otvaranje porta 3306 bez ograničenja predstavlja bezbednosni rizik — koristite SSL/TLS i ograničite pristup putem UFW/iptables.
Upravljanje MySQL korisnicima i privilegijama
MySQL upravljanje korisnicima obuhvata kreiranje naloga, podešavanje autentifikacije (npr. caching_sha2_password u MySQL 8) i vezivanje hosta; tipične komande su CREATE USER, ALTER USER i DROP USER. Praktičan primer: CREATE USER ‘app’@’localhost’ IDENTIFIED BY ‘S3cureP@ss’; — izbegavati globalne host wildcards i slabе lozinke.
Kreiranje i uređivanje korisničkih naloga
CREATE USER ‘backup’@’192.168.1.5’ IDENTIFIED BY ‘Primjer123’; ALTER USER ‘backup’@’192.168.1.5’ PASSWORD EXPIRE INTERVAL 90 DAY; korisnike testirati sa SHOW GRANTS FOR ‘backup’@’192.168.1.5’; izbegavati ‘%’-host osim ako je apsolutno neophodno jer otvara pristup.
Postavljanje odgovarajućih privilegija (MySQL)
GRANT SELECT, INSERT ON prod_db.* TO ‘app’@’localhost’; REVOKE DELETE ON prod_db.* FROM ‘app’@’localhost’; koristiti SHOW GRANTS za verifikaciju; izmena direktno u mysql.user zahteva FLUSH PRIVILEGES, dok GRANT automatski primenjuje promene.
Napredne prakse: koristiti role (CREATE ROLE ‘readonly’; GRANT SELECT ON prod_db.* TO ‘readonly’; GRANT ‘readonly’ TO ‘report’@’localhost’), ograničenja resursa (CREATE USER … WITH MAX_QUERIES_PER_HOUR 1000) i polise lozinki; izbegavati GRANT ALL ON *.* za aplikacije i dokumentovati sve GRANT/REVOKE operacije u procedurama za incident odgovor.
Optimizacija performansi MySQL servera
MySQL performanse se poboljšavaju kombinacijom pravilnog keširanja, IO podešavanja i monitoring strategije; postavite innodb_buffer_pool_size na ~60–80% dostupne memorije za posvećeni DB server, smanjite swap i pratite CPU i disk latencije—IOPS preko 2000 može ukazivati na usko grlo. Testovi pokazuju 2–5× poboljšanje pri ispravnom balansu memorije i log veličina.
Konfiguracija ključnih parametara u my.cnf za MySQL
U my.cnf optimizujte innodb_buffer_pool_size, innodb_log_file_size (128M–1G), max_connections (realno 200–500 uz connection pooling), tmp_table_size i table_open_cache. Postavite innodb_flush_method=O_DIRECT za smanjenje dvostrukog keširanja i sync_binlog=1 samo ako trebate ACID; inače koristite veće performanse sa relaxovanijim sync podešavanjima.
Praćenje i analiza performansi MySQL
Koristite performance_schema i sys schema za metrika; uključite slow_query_log sa long_query_time=1s i analizirajte sa pt-query-digest ili mysqldumpslow. Na sistemskom nivou pratite iostat, vmstat i top; visok broj Threads_connected ili stalno rasteći swap su jasni signali za intervenciju.
Dodatno, redovno izvršavajte komande: SHOW GLOBAL STATUS LIKE ‘Queries’, SHOW GLOBAL STATUS LIKE ‘Threads_connected’ i SHOW ENGINE INNODB STATUS za zaključavanja; analizirajte najsporije upite iz /var/log/mysql/slow.log sa pt-query-digest /var/log/mysql/slow.log. Postavite alerting za CPU>70%, disk i/o čekanje >50ms i swap activity >0.1s kako biste brzo detektovali regresije performansi.
Obavezno održavanje i sigurnosne prakse za MySQL
MySQL zahteva stalnu proceduru: kombinacija automatizovanih backup-a, pravila pristupa i redovnih ažuriranja minimizira rizik. Primena politike zadržavanja (npr. 7 dnevnih, 4 nedeljna, 12 mesečnih) zajedno sa periodičnim test-restorima smanjuje šansu za trajni gubitak; praćenje binarnih logova i performansi omogućava brzu detekciju anomalija i vraćanje baze u tačku pre incidenta.
Redovno pravljenje rezervnih kopija za MySQL
Koristiti kombinaciju alata: mysqldump za manje baze, Percona XtraBackup za velike, ili LVM snapshot za konzistentnost na nivou sistema. Automatizovati cron zadatke, sinhronizovati kopije offsite (S3/rsync), i čuvati metapodatke o backup-u; testirati restauraciju najmanje jednom mesečno kako bi se potvrdila integritet kopija i procedura vraćanja.
Primena zaštitnih mehanizama i ažuriranja MySQL
Omogućiti TLS (require_secure_transport=ON), onemogućiti udaljeni root pristup i koristiti najmanje privilegije po korisniku; pratiti sigurnosne advisore i primenjivati kritične zakrpe unutar 48–72h. Aktivirati binlog i audit logging, konfigurisanjem rotacije log-a kako bi se izbegao prevelik prostor i olakšalo forenzičko ispitivanje.
Za ažuriranja, testirati nove pakete u staging okruženju pre produkcije, jer major verzije mogu zahtevati mysql_upgrade i migraciju šema. Koristiti distribucijski paket manager (apt/yum/zypper) za sigurnosne zakrpe, ali držati automatizaciju pod kontrolom—automatizovano instaliranje major verzija bez verifikacije može dovesti do prekida servisa; održavati beleške o verzijama i rollback planove.
Zaključak
MySQL treba testirati nakon instalacije: pokrenite systemctl enable --now mysql
i proverite status, koristite mysql_secure_installation
da onemogućite daljinski root i postavite složenu lozinku; standardni port je 3306. Za performanse podesite innodb_buffer_pool_size na ~70–80% RAM-a za posvećen server i pratite latenciju; za oporavak redovno pravite mysqldump rezervne kopije i čuvajte binarne logove. Testirano na Ubuntu 20.04 i CentOS 8, ovi koraci značajno smanjuju rizik i poboljšavaju stabilnost.