Posts tagged ‘mysql’

Как включить логи запросов и error-лог в MySQL

mysqlВ файл /etc/my.cnf добавляем следующие строки (CentOS, Debian, Ubuntu, везде одинаково)

[mysqld]
...
log-queries-not-using-indexes
log=/var/log/mysql-queries.log
log-error=/var/log/mysql-errors.log
log-slow-queries=/var/log/mysql-slow-queries.log
...

Создаем файлы и назначаем права, MySQL почему-то сам этого не делает:

touch /var/log/mysql-queries.log
touch /var/log/mysql-errors.log
touch /var/log/mysql-slow-queries.log
chown mysql:mysql /var/log/mysql*
chmod 640 /var/log/mysql*

Перезапускаем сервис:

service mysqld restart

Как узнать как вы подключились к MySQL (status)

Сегодня столкнулся с такой проблемой: есть чужой скрипт который при запуске дает доступ к MySQL консоли, но доступа к этому скрипту нет и я не могу узнать, ни под каким пользователем я залогинился в MySQL, ни по какому адресу, ни к какому порту я вообще подключился (на сервере работает несколько копий MySQL на разных портах).

Спасибо добрым людям, все нужную информацию можно узнать прямо в MySQL:

status;

Выдаст полную информацию о соединении:

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.5.8, for Win32 (x86)
 
Connection id:          1
Current database:       test
Current user:           ODBC@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.8 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 7 min 16 sec
 
Threads: 1  Questions: 21  Slow queries: 0  Opens: 33  Flush tables: 1  Open tables: 26  Queries per second avg: 0.48
--------------

Или с помощью отдельных SQL-команд:

mysql> SHOW VARIABLES WHERE Variable_name = 'port';
mysql> SHOW VARIABLES WHERE Variable_name = 'hostname';
mysql> select user();

Очень медленные коннекты к MySQL (skip-name-resolve)

…или зачем прописывать Web-сервера в хосты сервера БД

Сегодня столкнулся с тем что после переноса сервера БД (MySQL) на отдельный сервер приложение стало работать значительно медленнее, страниза приходила с задержкой 5-30 секунд. Проверив все возможные компоненты (iptable, nginx, php-fpm) с удивление обнаружил что тормозят запросы к MySQL серверу, удивление было вызвано тем что на сервере как-никак 16 ядер, 12 Гб памяти и 1Gb LAN.

Диагностика

Начав отладку, обнаружил что 95% задержки приходилось на соединение с MySQL сервером, а не запросы к нему. После поисков в Google обнаружил что у MySQL есть параметр skip-name-resolve, который отвечает за ресолвинг имен соединяющихся серверов. Т.к. в сети не было DNS сервера для локальных серверов а в хосты сервер я не прописал, каждый DNS запрос довольно долго отваливался по таймауту, что и приводило к значительным задержкам.

  • Запрос SHOW PROCESSLIST к MySQL выдает много запросов с состоянием “connect from …”
  • Выполнить команду:
    telnet 10.10.10.1 3306

    Где вместо 10.10.10.1 будет IP вашего сервера БД, если вы получаете ответ не мгновенно, то у вас возможно та же прблема

Решение

В итоге проблема решается или добавлением строки skip-name-resolve в my.cnf или в опции запуска MySQL (–skip-name-resolve) либо, что я считаю более правильным, добавлением в hosts записей обо всех веб серверах. Правильным я считаю это потому что при отладке MySQL запросов, в выводе команды SHOW PROCESSLIST, вы будете видть имя хоста с которого выполняется запрос, что иногда крайне полезно.

Вопрос: Производительность MySQL Cluster

Коллеги, нужна помощь.
Поставил MySQL Cluster состоящий из двух нод, конфигурация почти стандартная, еще ничего не тюнил.

Сравниваю производительность одиночного MySQL и двух нод MySQL Cluster, получаю разницу в производительности в ~8 раз, не в пользу кластера.
Между data-нодами, реальный гигабит, сетевой активности во время теста почти нет (