sql >> Database >  >> RDS >> MariaDB

Hoe te installeren, beveiligen en prestatieafstemming van MariaDB Database Server

Een databaseserver is een essentieel onderdeel van de netwerkinfrastructuur die nodig is voor de hedendaagse toepassingen. Zonder de mogelijkheid om gegevens op te slaan, op te halen, bij te werken en te verwijderen (indien nodig), wordt het nut en de reikwijdte van web- en desktop-apps zeer beperkt.

Bovendien is het een essentiële vaardigheid die elke systeembeheerder moet hebben om te weten hoe een databaseserver moet worden geïnstalleerd, beheerd en geconfigureerd (zodat deze werkt zoals verwacht).

In dit artikel zullen we kort bespreken hoe u een MariaDB-databaseserver installeert en beveiligt en vervolgens legt u uit hoe u deze configureert.

Een MariaDB-server installeren en beveiligen

In CentOS 7.x , MariaDB verving MySQL, dat nog steeds te vinden is in de Ubuntu (samen met MariaDB). Hetzelfde geldt voor openSUSE .

Kortheidshalve gebruiken we alleen MariaDB in deze tutorial, maar houd er rekening mee dat naast het hebben van verschillende namen en ontwikkelingsfilosofieën, beide Relationele DataBase Management Systemen (RDBMS'en kortweg) zijn bijna identiek.

Dit betekent dat de opdrachten aan de clientzijde hetzelfde zijn op beide MySQL en MariaDB , en de configuratiebestanden hebben dezelfde naam en bevinden zich op dezelfde plaatsen.

Ga als volgt te werk om MariaDB te installeren:

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
$ sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
# zypper update && zypper install mariadb mariadb-tools # openSUSE

Merk op dat in Ubuntu , wordt u gevraagd een wachtwoord in te voeren voor de RDBMS-rootgebruiker.

Nadat de bovenstaande pakketten zijn geïnstalleerd, moet u ervoor zorgen dat de databaseservice actief is en is geactiveerd om te starten bij het opstarten (in CentOS en openSUSE u moet deze bewerking handmatig uitvoeren, terwijl in Ubuntu het installatieproces heeft dit al voor u geregeld):

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
# systemctl start mysql && systemctl enable mysql

Voer vervolgens de mysql_secure_installation script. Met dit proces kunt u:

  1. stel / reset het wachtwoord voor de RDBMS root gebruiker
  2. verwijder anonieme aanmeldingen (zodat alleen gebruikers met een geldige account zich kunnen aanmelden bij het RDBMS)
  3. root-toegang uitschakelen voor andere machines dan localhost
  4. verwijder de testdatabase (waartoe iedereen toegang heeft)
  5. activeer de wijzigingen die zijn gekoppeld aan 1 t/m 4.

Voor een meer gedetailleerde beschrijving van dit proces, kun je de sectie Post-installatie raadplegen in MariaDB-database installeren in RHEL/CentOS/Fedora en Debian/Ubuntu.

MariaDB-server configureren

De standaardconfiguratie-opties worden in de gegeven volgorde uit de volgende bestanden gelezen:/etc/mysql/my.cnf , /etc/my.cnf , en ~/.my.cnf .

Meestal alleen /etc/my.cnf bestaat. In dit bestand zullen we de serverbrede instellingen instellen (die kunnen worden overschreven met dezelfde instellingen in ~/.my.cnf voor elke gebruiker).

Het eerste dat we moeten opmerken over my.cnf is dat instellingen zijn georganiseerd in categorieën (of groepen) waarbij elke categorienaam tussen vierkante haken staat.

Serversysteemconfiguraties worden gegeven in de [mysqld] sectie, waar u doorgaans alleen de eerste twee instellingen in de onderstaande tabel aantreft. De rest zijn andere veelgebruikte opties (waar aangegeven, zullen we de standaardwaarde wijzigen met een aangepaste naar keuze):

Instelling en beschrijving Standaardwaarde
datadir is de map waar de gegevensbestanden zijn opgeslagen. datadir=/var/lib/mysql
socket geeft de naam en locatie aan van het socketbestand dat wordt gebruikt voor lokale clientverbindingen. Houd er rekening mee dat een socketbestand een hulpmiddel is dat wordt gebruikt om informatie tussen applicaties door te geven. socket=/var/lib/mysql/mysql.sock
bind_address is het adres waarop de databaseserver luistert naar TCP/IP-verbindingen. Als u wilt dat uw server op meer dan één IP-adres luistert, laat u deze instelling over (0.0.0.0, wat betekent dat hij luistert op alle IP-adressen die aan deze specifieke host zijn toegewezen).

We zullen dit veranderen om de service te instrueren om alleen naar het hoofdadres te luisteren (192.168.0.13):

bind_address=192.168.0.13

bind_address=0.0.0.0
poort vertegenwoordigt de poort waar de databaseserver zal luisteren.

We zullen de standaardwaarde (3306) vervangen door 20500 (maar we moeten ervoor zorgen dat niets anders die poort gebruikt):
port=20500

Hoewel sommige mensen zullen beweren dat beveiliging door onduidelijkheid geen goede gewoonte is, is het veranderen van de standaard applicatiepoorten voor hogere een rudimentaire, maar effectieve methode om poortscans te ontmoedigen.

poort=3306
innodb_buffer_pool_size is de bufferpool (in bytes) geheugen die is toegewezen voor gegevens en indexen die vaak worden geopend bij gebruik van Innodb (wat de standaard is in MariaDB) of XtraDB als opslagengine.

We zullen de standaardwaarde vervangen door 256 MB:

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728
skip_name_resolve geeft aan of hostnamen al dan niet worden omgezet bij inkomende verbindingen. Indien ingesteld op 1, zoals we zullen doen in deze handleiding, alleen IP-adressen.

Tenzij u hostnamen nodig heeft om machtigingen te bepalen, is het raadzaam deze variabele uit te schakelen (om verbindingen en zoekopdrachten te versnellen) door de waarde in te stellen op 1:

skip_name_resolve=1

skip_name_resolve=0
query_cache_size vertegenwoordigt de grootte (in bytes) die beschikbaar is voor de querycache op schijf, waar de resultaten van SELECT-query's worden opgeslagen voor toekomstig gebruik wanneer een identieke query (naar dezelfde database en met hetzelfde protocol en dezelfde tekenset) wordt uitgevoerd.

U moet een querycachegrootte kiezen die overeenkomt met uw behoeften op basis van 1) het aantal repetitieve zoekopdrachten en 2) het geschatte aantal records dat deze repetitieve zoekopdrachten naar verwachting zullen retourneren. We zetten deze waarde voorlopig op 100 MB:

query_cache_size=100M

query_cache_size=0 (wat betekent dat het standaard is uitgeschakeld)
max_connections is het maximale aantal gelijktijdige clientverbindingen met de server. We stellen deze waarde in op 30:
max_connections=30Elke verbinding gebruikt een thread en verbruikt dus geheugen. Houd hier rekening mee bij het instellen van max_connections.
max_connections=151
thread_cache_size geeft het aantal threads aan dat de server toewijst voor hergebruik nadat een client de verbinding verbreekt en thread(s) vrijgeeft die eerder in gebruik waren. In deze situatie is het goedkoper (qua prestaties) om een ​​thread opnieuw te gebruiken dan een nieuwe te maken.

Nogmaals, dit hangt af van het aantal verbindingen dat u verwacht. We kunnen deze waarde veilig instellen op de helft van het aantal max_connections:

thread_cache_size=15

thread_cache_size=0 (standaard uitgeschakeld)

In CentOS , zullen we SELinux . moeten vertellen om MariaDB toe te staan om te luisteren op een niet-standaard poort (20500 ) voordat u de service opnieuw start:

# yum install policycoreutils-python
# semanage port -a -t mysqld_port_t -p tcp 20500

Start vervolgens de MariaDB-service opnieuw.

MariaDB-prestaties afstemmen

Om ons te helpen bij het controleren en afstemmen van de configuratie volgens onze specifieke behoeften, kunnen we mysqltuner installeren (een script dat suggesties geeft om de prestaties van onze databaseserver te verbeteren en de stabiliteit te vergroten):

# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xzf master

Verander vervolgens de map in de map die uit de tarball is gehaald (de exacte versie kan in uw geval verschillen):

# cd major-MySQLTuner-perl-7dabf27

en voer het uit (u wordt gevraagd om de gegevens van uw administratieve MariaDB-account in te voeren)

# ./mysqltuner.pl

De uitvoer van het script is op zich erg interessant, maar laten we naar beneden gaan waar de aan te passen variabelen worden weergegeven met de aanbevolen waarde:

De query_cache_type instelling geeft aan of de querycache is uitgeschakeld (0) of ingeschakeld (1) . In dit geval, mysqltuner adviseert ons om het uit te schakelen.

Dus waarom wordt ons geadviseerd om het nu te deactiveren? De reden is dat de querycache vooral nuttig is in scenario's met veel lezen / weinig schrijven (wat niet het geval is, aangezien we zojuist de databaseserver hebben geïnstalleerd).

WAARSCHUWING :Voordat u wijzigingen aanbrengt in de configuratie van een productieserver, wordt u ten zeerste aangeraden een deskundige databasebeheerder te raadplegen om ervoor te zorgen dat een aanbeveling van mysqltuner geen negatieve invloed heeft op een bestaande instelling.

Samenvatting

In dit artikel hebben we uitgelegd hoe u een MariaDB-databaseserver configureert nadat we deze hebben geïnstalleerd en beveiligd. De configuratievariabelen die in de bovenstaande tabel worden vermeld, zijn slechts enkele instellingen die u in overweging kunt nemen bij het voorbereiden van de server voor gebruik of bij het later afstemmen. Raadpleeg altijd de officiële MariaDB-documentatie voordat u wijzigingen aanbrengt of raadpleeg onze MariaDB Performance tuning-tips:

Niet doen t juffrouw: 15 handige tips voor het afstemmen en optimaliseren van MariaDB-prestaties

Zoals altijd, aarzel niet om ons te laten weten als je vragen of opmerkingen hebt over dit artikel. Zijn er nog andere serverinstellingen die u graag gebruikt? Voel je vrij om te delen met de rest van de community via het onderstaande reactieformulier.

Word een Linux-gecertificeerde systeembeheerder
  1. mysql - een mechanisme maken dat lijkt op de reeksen van Oracle

  2. 3 functies die de dag, de maand en het jaar uit een datum halen in PostgreSQL

  3. MySQL:Hoe rijen te kopiëren, maar een paar velden te wijzigen?

  4. COUNT(*) selecteren met DISTINCT