Установка:
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/
Устанавливаем 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:
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
Перезапускаем 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
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 Cluster происходит минимум на трёх нодах. Если нет возможности развернуть третью ноду, то можно использовать Galera Arbitrator. Galera Arbitrator является членом кластера, который участвует в голосовании, но не в репликации.
Используется для:
https://galeracluster.com/documentation-webpages/documentation/arbitrator.html
Примеры запуска 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"
Пример запуска 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
mariadb Для исправления необходимо установить в базе InnoDB:
SET global innodb_large_prefix=ON; SET global innodb_file_format=Barracuda;
в таблицах указать формат строк DYNAMIC или COMPRESSED:
ROW_FORMAT=DYNAMIC;
Возникает при запуске базы с Galera Cluster после остановки всего кластера, необходимо повторно инициализировать кластер, решение: galera_cluster
Возникает при запуске в контейнере т.к. IP внутри контейнера и снаружи отличаются. Необходимо изменить IP прослушиваемого порта IST, добавить параметр к запуску:
--wsrep-provider-options="ist.recv_bind=0.0.0.0"
https://github.com/major/MySQLTuner-perl - MySQLTuner