Содержание

MariaDB

Установка:

sudo apt install mariadb-server

Настройка безопасности (установка пароля для root, удаление анонимного пользователя, запрет удалённого входа для root, удаление тестовой базы):

sudo mysql_secure_installation

https://www.netangels.ru/support/cloud-vds/mysql/

Кодировка

Пример настройки для 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

Используемые порты:

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 является членом кластера, который участвует в голосовании, но не в репликации.

Используется для:

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"

https://hub.docker.com/_/mariadb/

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

https://corp2.info/reshenie-problemy-too-many-open-files-v-mysql-827.html

[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