Оптимизация на mysql сървър за Fedora OS при cloud и наети сървъри

За пълноценното функциониране на днешните динамични WEB приложения, изключителна важна роля има mysql сървъра. Той се грижи за това да извлича информацията, която ни трябва от базите данни, да вмъква нова такава в тях, както и да извършва други операции като ъпдейт, изтриване и т.н. За да ускорим и оптимизираме работата на mysql сървъра , той се нуждае от допълнителни настрой ки, които му позволяват да работи по-бързо и  безпроблемно. Колкото по-бързо вашият myslq сървър, свърши своята работа, толкова по-бързо работи вашето динамично приложение.

Оптимизацията на mysql сървъра е процес, който не може да се опише с няколко думи, дори и в няколко страници. Всяко едно приложение в зависимост от изискванията, които има и вида на базите данни, които използва има свои изисквания.  За перфектно оптимизиране и прецизиране на работата на сървъра е необходимо да се подходи индивидуално.

Разбира се има основни параметри и опции, които зададени като минимални стойности е по-добре отколкото да са изключени. За съжаление при началната инсталация на mysql сървър на вашата виртуална машина, при някой дистрибуции на Linux, mysql сървърът стартира с минимални параметри и дори изключени такива, което от своя странна може да доведе до бавна функционалност на вашето динамично приложение.

Важно е да се разбере, че оптимизацията на mysql сървъра е процес, към който трябва да се подходи индивидуално за всяко едно приложение, но ние ще се опитаме да покажем няколко основни принципа и един инструмент, с който ще можете да направите първите стъпки към процеса оптимизация, което със сигурност ще доведе до повишаване на функционалността на Вашето динамично приложение

Да започнем и със самата оптимизация! FriendlyGeeks екипът на ICN.Bg ви препоръчва един страхотен perl скрипт, който ще провери  статуса на вашия mysql сървър, извършвайки необходимите проверки вместо вас. Като резултат от проверката, скриптът ще ви покаже кои са параметрите, които е необходимо да бъдат коригирани.

 

Информация за perl скрипта може да намерите тук:

https://github.com/major/MySQLTuner-perl

Необходимо е да имате няколко допълнителни софтуера, с които да извършите изтеглянето на zip архива от github, след което да го разархивирате.

Логвате се в системата като root с командата:

$ su -

# yum install -y wget

 

Ако го имате инсталиран wget, ще видите надпис, че wget е вече инсталиран:

wget is already the newest version

В противен случай wget ще се инсталира. Трябва да инсталирате и unzip, тъй като ще ви е необходим за да разархивирате master.zip файла, който ще изтеглите.

 

# yum  install -y  unzip

 

Изтегляте perl скрипта от github, но преди това е добре да отидете в /opt 

# cd /opt

# wget https://github.com/major/MySQLTuner-perl/archive/master.zip

 

Изходът трябва да е подобен на долопосочения:

2014-07-04 13:02:34 (198 KB/s) - “master.zip” saved [26513]

 

След, което разархивирате master.zip файла:

# unzip master.zip

 

Влизате в папката където се намира скрипта

# cd MySQLTuner-perl-master/

 

Листвате съдържанието на папката със следната команда

# ls

 

В нея трябва да откриете следните файлове: LICENSE  mysqltuner.pl  README.md

Можете да разлгедате внимателно README.md файла. На нас ни е необходим файла mysqltuner.pl. Преди да продължите нататък, за да можете всеки път да изпълнявате скрипта без да е необходимо въвеждане на root паролата за mysql сървъра, ще направим малък трик.  Копираме mysqltuner.pl в /root

 

# cp mysqltuner.pl /root

 

Влизате в /root директорията.

# cd /root

 

Създавате файл .my.cnf

# nano .my.cnf

 

и в него въвеждате следното съдържание:

[client]
user=root

password=(тук, веднага след знака „=“ и без скобите въведете вашата парола за mysql)

 

Запаметяваме с ctrl+x -> yes. Променяме правата на файла, за да e видими само за root потребителя.

# chmod 600 .my.cnf

 

Въпреки, че файлът би трябвало да е executable, за всеки случай може да потворите.

# chmod +x mysqltuner.pl

Вече сте готови да изпълните скрипта.

# ./mysqltuner.pl

 

Резултатът трябва да изглежда по следния начин:

# ./mysqltuner.pl

 

 >>  MySQLTuner 0.9.8 - Major Hayden <major@mhtx.net>

 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/

 >>  Run with '--help' for additional options and output filtering

Please enter your MySQL administrative login:<-- root

Please enter your MySQL administrative password:<-- yourrootsqlpassword

 

-------- General Statistics --------------------------------------------------

[--] Skipped version check for MySQLTuner script

[!!] Your MySQL version 4.1.11-Debian_etch1-log is EOL software!  Upgrade soon!

[OK] Operating on 32-bit architecture with less than 2GB RAM

 

-------- Storage Engine Statistics -------------------------------------------

[--] Status: +Archive -BDB -Federated +InnoDB +ISAM -NDBCluster

[--] Data in MyISAM tables: 301M (Tables: 2074)

[--] Data in HEAP tables: 379K (Tables: 9)

[!!] InnoDB is enabled but isn't being used

[!!] ISAM is enabled but isn't being used

[!!] Total fragmented tables: 215

 

-------- Performance Metrics -------------------------------------------------

[--] Up for: 12d 18h 33m 30s (1B q [1K qps], 185K conn, TX: 3B, RX: 377M)

[--] Reads / Writes: 78% / 22%

[--] Total buffers: 2.6M per thread and 58.0M global

[OK] Maximum possible memory usage: 320.5M (20% of installed RAM)

[OK] Slow queries: 0% (17/1B)

[OK] Highest usage of available connections: 32% (32/100)

[OK] Key buffer size / total MyISAM indexes: 16.0M/72.3M

[OK] Key buffer hit rate: 99.9%

[OK] Query cache efficiency: 99.9%

[!!] Query cache prunes per day: 47549

[OK] Sorts requiring temporary tables: 0%

[!!] Temporary tables created on disk: 28%

[OK] Thread cache hit rate: 99%

[!!] Table cache hit rate: 0%

[OK] Open file limit used: 12%

[OK] Table locks acquired immediately: 99%

[!!] Connections aborted: 20%

 

-------- Recommendations -------------------------------------------------

General recommendations:

    Add skip-innodb to MySQL configuration to disable InnoDB

    Add skip-isam to MySQL configuration to disable ISAM

    Run OPTIMIZE TABLE to defragment tables for better performance

    Enable the slow query log to troubleshoot bad queries

    When making adjustments, make tmp_table_size/max_heap_table_size equal

    Reduce your SELECT DISTINCT queries without LIMIT clauses

    Increase table_cache gradually to avoid file descriptor limits

    Your applications are not closing MySQL connections properly

Variables to adjust:

    query_cache_size (> 16M)

    tmp_table_size (> 32M)

    max_heap_table_size (> 16M)

    table_cache (> 64)

 

Важните неща, на които трябва да обърнете внимание, се намират oт Recommendations надолу, като настройките, които трябва да се променят са от „Variables to adjust:“ надолу. Настройките се задават в конфигурационния файл на myslq, който достъпвате със следната команда: /etc/my.cnf

Важно е да обърнете внимание: Преди да напраите каквито и да е настройки по този файл, е добре да направите един backup.

Отивате в директорията:

# cd /etc/ и правите копие:

# cp my.cnf my.cnf.backup

 

Отваряте файла с текстови редактор

# nano my.cnf

 

И там след реда [mysqld] трябва да откирете следните стойности:

 query_cache_size (> 16M)
    tmp_table_size (> 32M)  

max_heap_table_size (> 16M)
    table_cache (> 64)

 

Стойностите трябва да са зададени със знак “=”. Знак  <  или > не може да има в този файл! След като откриете горепосочените сойности, задавате стойносите по начина, по който които ги дава скрипта.

Имайте предвид, че ако базата ви данни не е добре направена, колкото и да увеличавате стойността на join_buffer_size, винаги ще иска повече и повече, но проблема:

[!!] Joins performed without indexes: 16751,
винаги ще е наличен. Така че не прекалявайте с увеличаването на тази стойност.

Стойносите се задават по този начин:

query_cache_size = 64М

tmp_table_size     = 32М

 

След като коригирате парамeтрите записвате файла със същото имe ( при nano ctrl+x ,след това yes ) и задължително трябва да рестартирате mysql, като е хубаво преди това да се спре web сървъра.

 

#/etc/init.d/httpd stop

изчаквате да спре

#/etc/init.d/mysqld   restart

изчаквате да видите следния резултат:

 

Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

 

Ако mysql сървърът даде [failed], не се безпокойте,тъй като лесно и бързо можете да върнете файла, който сте backup-нали по-рано:

# cp my.cnf.backup my.cnf

и отново стартираме:

# /etc/init.d/mysqld start

)

 

Пусакте отново web сървъра:

# /etc/init.d/httpd start

 

Проверявате дали приложението работи!

Можете да стартирате # ./mysqltuner.pl колкото пъти желаете докато не достигнете жеалните от вас резултати.

ВАЖЕН СЪВЕТ! Наблюдавайте този параметър:

[OK] Maximum possible memory usage: 320.5M (20% of installed RAM)
Той не трябва да надвишава 70%. Все пак вашия сървър има нужда от RAM памет за да другите процеси. 

Публикувано на

В случай, че имате нужда от техническа помощ или по-детайлна информация свързана с темата от помощната статия, молим да изпратите запитване.

Пусни запитване

Нашият Friendly Geeks техничеки екип с радост ще Ви съдейства денонощно и на:

  • Национален телефон: 0700 300 70 (на цената на един градски разговор)
  • Тел.: +359 2 491 8877