Показаны сообщения с ярлыком MySQL. Показать все сообщения
Показаны сообщения с ярлыком MySQL. Показать все сообщения

четверг, 20 апреля 2017 г.

Мониторинг MySQL нод кластера с балансировщика Haproxy (один из вариантов)

При включении на haproxy мониторинга состояния нод MySQL методом без имени пользователя, хосты в мониторинге будут в UP'е, но не долго, так как не осуществляется корректное закрытие сессии. При этом просто добавить пользователя (без пароля!!!) сходу не получится.
Предварительно необходимо внести изменения в структуру БД.

ALTER TABLE mysql.user MODIFY COLUMN `ssl_cipher` BLOB NULL;
ALTER TABLE mysql.user MODIFY COLUMN `x509_issuer` BLOB NULL;
ALTER TABLE mysql.user MODIFY COLUMN `x509_subject` BLOB NULL;
ALTER TABLE mysql.user MODIFY COLUMN `authentication_string` TEXT NULL;

после этих операций можно добавить нужного пользователя с указанием хостов кластера (имена FQDN), который будет проверять состояние сервиса MySQL

INSERT INTO user (Host,User) values ('ru1mysqlfr01.domain.local','mysqlcheck');
INSERT INTO user (Host,User) values ('ru1mysqlfr02.domain.local','mysqlcheck');
flush privileges;

правим конфиг haproxy. В результате получаем что-то вроде такого:
sudo vi /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
listen ru1mysqlvip_220_3306
        bind *:3306
        mode tcp
        timeout client  10800s
        timeout server  10800s
        balance leastconn
        option mysql-check user mysqlcheck # Будет идти проверка
        default-server port 3307 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
        server ru1mysqlfr01 192.168.196.241:3307 check
        server ru1mysqlfr02 192.168.196.237:3307 check



Отдельно для мониторинга состояния сервисов:
listen stats :9000  # Listen on localhost:9000
mode http
stats enable  # Enable stats page
stats hide-version  # Hide HAProxy version
stats realm Haproxy\ Statistics  # Title text for popup window
stats uri /haproxy_stats  # Stats URI
stats auth login:password  # Authentication credentials

вторник, 11 апреля 2017 г.

Удаленный вход для MySQL v.5.7.17 (в кластере v.7.5.5) (remote login MySQL)

Смотрим на прослушиваемые сервисы:
netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1054/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      1054/sshd
tcp6       0      0 :::3306                 :::*                    LISTEN      1866/mysqld

при попытке зайти удаленно получаем отлуп:
mysqladmin -h _ip_or_hostname_ version
mysqladmin: connect to server at 'ip' failed
error: 'Host 'hostname' is not allowed to connect to this MySQL server'

делается "изнутри" самого сервиса:
коннектимся под правильной учеткой и добавляем пользователя с удаленным доступом
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
flush privileges;

теперь под этим суперпользователем можно залезть в базу откуда угодно. Да здравствует безопасность!

понедельник, 10 апреля 2017 г.

Сброс root пароля в MySQL v.5.7.17 (в кластере v.7.5.5) (Reset root password MySQL)

Reset root password MySQL
mysqladmin version
   Server version          5.7.17-ndb-7.5.5-cluster

Останавливаем сервис mysqld
sudo systemctl stop mysqld

проверяем его статус
systemctl status mysqld
   Active: inactive (dead)

правим файл /etc/my.cnf
в раздел
   [mysqld]
дописываем
   skip-grant-tables
сохраняемся и перезапускаем сервис mysqld
sudo systemctl start mysqld

проверяем статус, когда он будет в состоянии
   Active: active (running)
логинимся клиентом под root'ом

проверяем наличие таблицы
mysql> SELECT user,authentication_string FROM mysql.user;
+-----------+-------------------------------------------+
| user      | authentication_string                     |
+-----------+-------------------------------------------+
| root      | *ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ|
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)

пишем наш новый пароль на root'а
update mysql.user set authentication_string=PASSWORD('new_password') where User='root';
флашим привилегии

перезапускаем сервис
sudo systemctl restart mysqld