MEM – mysql enterprice monitor. Это такая веб-админка, где можно посмотреть за работой базы mysql и понять, почему она тормозит или посмотреть другую статистику. По большому счёту это приложение на java, которое выгребает статистику из баз perfomance scheme и information scheme и предоставляют её в удобном виде. Так же, время от времени парсится и вывод show engine innodb status на предмет полезной информации.
Установка сервер и агентов протекает без сложностей, поэтому описывать этот процесс здесь не буду. Расскажу лишь некоторые нюансы и особенности.
При установке сервера, учтите, что по дефолту оно настраивается на https, и, если у вас самоподписный сертификат, то его нужно будет либо добавить в keystorage на каждом из клиентов либо настраивать клиент на подключение к http (и сервер соответственно тоже, ибо по умолчанию http -> https правится это в файле /opt/mysql/enterprise/monitor/apache-tomcat/conf/server.xml путём убирания опции redirectPort=”18443″)
При установке клиента рекомендую создать пользователей mem, memlim, собственно от имени которых и будут выполняться запросы в базу. Привилегии, которые они должны иметь:
mysql:(root@server) [mysql]>show grants for 'mem'@'localhost'; +--------------------------------------------------------------------------------------------------+ | Grants for mem@localhost | +--------------------------------------------------------------------------------------------------+ | GRANT SELECT, PROCESS, SHOW DATABASES, REPLICATION CLIENT, SHOW VIEW ON *.* TO 'mem'@'localhost' | | GRANT UPDATE ON `performance_schema`.`threads` TO 'mem'@'localhost' | +--------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql:(root@server) [mysql]>show grants for 'memlim'@'localhost'; +------------------------------------------------------------------------+ | Grants for memlim@localhost | +------------------------------------------------------------------------+ | GRANT SELECT, SHOW DATABASES, SHOW VIEW ON *.* TO 'memlim'@'localhost' | | GRANT UPDATE ON `performance_schema`.`threads` TO 'memlim'@'localhost' | +------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
Клиент добавляется очень просто: в процессе установке вы указывает адрес сервер и после запуска он сам подключается к нему и начинает мониторится. Нужно сказать об одной особенности по тому, как распознаёт сервер клиентов. А делает это он на основе uuid и hostid (поля из таблицы mysql.inventory). Если по какой-то причине одно из этих полей будет не уникально среди клиентов (а у меня как раз такая ситуация и возникла), то получим flap’ы в виде то сервер живой, то мёртвый.
Как же быть? Для начала разберёмся, что такое uuid и hostid. uuid – это случайное значение, которое генерирует mem client и записывает в базу, если его там нет. hostid – это fingerprint от ssh-ключей, которые лежат в /etc/ssh/ssh_host_[dsa|rsa].pub. В моём случае это оказался отпечаток ключа ssh_host_dsa_key.pub. Напомню, узнать fingerprint ssh-ключа можно так:
$ ssh-keygen -l -f ssh_host_dsa_key.pub
1024 12:fa:54:11:e3:15:44:87:e1:ab:4a:b2:4e:9e:9a:52 ssh_host_dsa_key.pub
Именно это значение и лежит в базе:
>select * from mysql.inventory; +--------+-------------------------------------------------------+ | name | value | +--------+-------------------------------------------------------+ | uuid | 81a44975-4739-65ae-a34c-8a4ad65bb2ca | | hostid | ssh:{12:fa:54:11:e3:15:44:87:e1:ab:4a:b2:4e:9e:9a:52} | +--------+-------------------------------------------------------+
И так, что бы избавится от старых значение, нужно
1) очистить таблицу mysql.inventory:
mysql:(root@server) [mysql]>TRUNCATE mysql.inventory;
Query OK, 0 rows affected (0.04 sec)
2) перегенерировать ssh-ключи (пример под Solaris):
# /lib/svc/method/sshd -c
3) перезапустить mem client:
# /etc/init.d/mysql-monitor-agent restart
Теперь проблем быть не должно.