Содержание
MariaDB
Установка:
sudo apt install mariadb-server
Настройка безопасности (установка пароля для root, удаление анонимного пользователя, запрет удалённого входа для root, удаление тестовой базы):
sudo mysql_secure_installation
Кодировка
Пример настройки для utf8 в /etc/mysql/conf.d/utf8.cnf:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 collation-server=utf8_unicode_ci
для игнорирования параметров клиента кодировки в [mysqld]:
skip-character-set-client-handshake
https://mariadb.com/kb/en/library/setting-character-sets-and-collations/
ODBC
Устанавливаем unixodbc:
sudo apt-get install unixodbc
Скачиваем последний mariadb-connector-odbc с офф.сайта
Устанавливаем:
wget -P /tmp https://downloads.mariadb.com/enterprise/dapw-ktc5/connectors/odbc/connector-odbc-2.0.13/jessie_x64-connector-odbc/mariadb-connector-odbc-2.0.13-ga-linux-x86_64.tar.gz tar xzf /tmp/mariadb-connector-odbc-2.0.13-ga-linux-x86_64.tar.gz -C /tmp sudo mv /tmp/mariadb-connector-odbc-2.0.13-ga-linux-x86_64/lib/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
Добавляем параметры в /etc/odbcinst.ini:
[MySQL] Description = ODBC Driver for MySQL Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so FileUsage = 1
Проверяем переменные:
odbcinst -j
Проверяем подключение к DSN [MySQL-asteriskcdrdb] (указанном в /etc/odbc.ini):
isql -v MySQL-asteriskcdrdb
Проверяем выполнение запросов к DSN:
echo 'show tables' | isql MySQL-asteriskcdrdb
https://mariadb.com/kb/en/mariadb/about-mariadb-connector-odbc/
event_scheduler
Посмотреть статус event_scheduler:
SHOW VARIABLES WHERE VARIABLE_NAME = 'event_scheduler';
Включить до перезагрузки:
SET GLOBAL event_scheduler = ON;
Для автоматического включения после перезагрузки добавить в в конфигурационный файл:
[mysqld] event_scheduler = on
или выполнить:
echo '[mysqld]' | sudo tee -a /etc/mysql/conf.d/event_scheduler.cnf echo 'event_scheduler = on' | sudo tee -a /etc/mysql/conf.d/event_scheduler.cnf
https://mariadb.com/kb/en/library/events/
https://mariadb.com/kb/en/library/server-system-variables/#event_scheduler
Сброс пароля root
Перезапускаем MariaDB в safe режиме:
sudo service mysql stop sudo mysqld_safe --skip-grant-tables --skip-networking & mysql -u root
Сбрасываем пароль:
USE mysql; UPDATE USER SET plugin=""; UPDATE USER SET password=PASSWORD("my_password") WHERE USER="root"; FLUSH PRIVILEGES;
Перезапускаем MariaDB:
sudo killall mysqld sudo service mysql start
http://superuser.com/questions/949496/cant-reset-mysql-mariadb-root-password
Galera Cluster
https://mariadb.com/kb/ru/galera-cluster/ - Системные переменные Galera Cluster
Инициализацию первой ноды при создании или после выключения всего кластера необходимо делать с параметрами:
mysqld --wsrep-new-cluster
При повторной инициализации всего кластера необходимо на последней остановленной или там где самые актуальные данные изменить строчку на safe_to_bootstrap: 1 в файле /var/lib/mysql/grastate.dat
Используемые порты:
- 3306 TCP - для клиентских соединений и когда используется в SST метод mysqldump
- 4567 TCP и UDP - для репликации
- 4568 TCP - для IST
- 4444 TCP - для всех других методов SST
https://galeracluster.com/documentation-webpages/documentation/firewall-settings.html
Пример конфигурационного файла /etc/mysql/conf.d/galera.cnf:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 collation-server=utf8_unicode_ci binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="mngt_cluster" wsrep_cluster_address="gcomm://mngt.domain.com,d2mngt.domain.com" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="mngt.domain.com" wsrep_node_name="mngt"
Мониторинг
https://galeracluster.com/documentation-webpages/documentation/monitor.html
Показать все значения:
SHOW GLOBAL STATUS LIKE 'wsrep_%';
Показать количество серверов в кластере:
SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';
https://galeracluster.com/documentation-webpages/documentation/monitoring-cluster.html
Galera Arbitrator
Рекомендуемое развёртывание Galera Cluster происходит минимум на трёх нодах. Если нет возможности развернуть третью ноду, то можно использовать Galera Arbitrator. Galera Arbitrator является членом кластера, который участвует в голосовании, но не в репликации.
Используется для:
- При чётном количестве нод функционирует как нечётная для предотвращения ситуации с Split-brain.
- Запроса согласованного моментального снимка состояния для использования при создании резервных копий.
https://galeracluster.com/documentation-webpages/documentation/arbitrator.html
Docker
Примеры запуска MariaDB с репликацией Galera Cluster (galera.cnf должен быть уже настроен)
Первый запуск первой ноды:
docker run --rm -d -p3306:3306 -p4444:4444 -p4567-4568:4567-4568 -p4567:4567/udp --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql_conf.d/galera.cnf,dst=/etc/mysql/conf.d/galera.cnf -e MYSQL_ROOT_PASSWORD=root --name mariadb mariadb:10 --wsrep-new-cluster --wsrep-provider-options="ist.recv_bind=0.0.0.0"
Инициализация первой ноды (самой актуальной) после остановки всех нод:
docker run --rm -d -p3306:3306 -p4444:4444 -p4567-4568:4567-4568 -p4567:4567/udp --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql_conf.d/galera.cnf,dst=/etc/mysql/conf.d/galera.cnf --name mariadb mariadb:10 --wsrep-new-cluster --wsrep-provider-options="ist.recv_bind=0.0.0.0"
Первый запуск последующих нод:
docker run --rm -d -p3306:3306 -p4444:4444 -p4567-4568:4567-4568 -p4567:4567/udp --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql_conf.d/galera.cnf,dst=/etc/mysql/conf.d/galera.cnf -e MYSQL_ROOT_PASSWORD=root --name mariadb mariadb:10 --wsrep-provider-options="ist.recv_bind=0.0.0.0"
Повторный запуск любой ноды:
docker run -d -p3306:3306 -p4444:4444 -p4567-4568:4567-4568 -p4567:4567/udp --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql_conf.d/galera.cnf,dst=/etc/mysql/conf.d/galera.cnf --name mariadb mariadb:10 --wsrep-provider-options="ist.recv_bind=0.0.0.0"
Docker
Пример запуска MariaDB с кодировкой utf8 по умолчанию (utf8.cnf должен быть уже настроен)
Первый запуск:
docker run --name mariadb --rm -d --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql/utf8.cnf,dst=/etc/mysql/conf.d/utf8.cnf -e MYSQL_ROOT_PASSWORD=root -d mariadb:10
Последующие запуски:
docker run --name mariadb --mount type=bind,src=/data/docker/mariadb/var_lib_mysql,dst=/var/lib/mysql --mount type=bind,src=/data/docker/mariadb/etc_mysql/utf8.cnf,dst=/etc/mysql/conf.d/utf8.cnf -d mariadb:10
https://hub.docker.com/_/mariadb/
Пример запуска в swarm с файловым хранилищем nfs:
docker service create -p 3307:3306 --mount type=volume,\"volume-opt=o=addr=it.domain.com,nolock\",volume-opt=device=:/data/docker/mariadb/var_lib_mysql,volume-opt=type=nfs,source=mariadb,target=/var/lib/mysql --mount type=bind,src=/etc/localtime,dst=/etc/localtime:readonly --mount type=bind,src=/etc/timezone,dst=/etc/timezone:ro --name mariadb mariadb:10
Ошибки
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
mariadb Для исправления необходимо установить в базе InnoDB:
SET global innodb_large_prefix=ON; SET global innodb_file_format=Barracuda;
в таблицах указать формат строк DYNAMIC или COMPRESSED:
ROW_FORMAT=DYNAMIC;
Too many open files
[ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
Возникает при запуске базы с Galera Cluster после остановки всего кластера, необходимо повторно инициализировать кластер, решение: galera_cluster
WSREP: Failed to prepare for incremental state transfer: Failed to open IST listener at tcp://10.1.30.160:4568', asio error 'bind: Cannot assign requested address': 99 (Cannot assign requested address) at galera/src/ist.cpp:prepare():337. IST will be unavailable.
Возникает при запуске в контейнере т.к. IP внутри контейнера и снаружи отличаются. Необходимо изменить IP прослушиваемого порта IST, добавить параметр к запуску:
--wsrep-provider-options="ist.recv_bind=0.0.0.0"
Ссылки
https://github.com/major/MySQLTuner-perl - MySQLTuner
