18 июня 2019 года вышла первая стабильная версия MariaDB 10.4.6, ключевых улучшений достаточно много, самое интересное для меня это конечно же технология синхронной multi-master репликации Galera 4.
Давайте попробуем установить новую версию на чистую систему Debian 9 (Stretch).
Полный список изменений в MariaDB 10.4.6 Вы можете найти на официальной странице, частичный перевод на русском языке можно почитать на этой странице.
Исходные данные: ОС Debian 9.9 (Stretch);
Задача: Установить MariaDB 10.4.6 с минимум телодвижений и произвести базовую настройку БД;
Установка MariaDB 10.4.6 на Debian 9:
1. Установка необходимых доп. пакетов:
apt-get update apt-get install dirmngr wget -y
2. А теперь та самая простая магия, о которой мало где написано — скачивание и запуск скрипта установки репозитария:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup && chmod a+x mariadb_repo_setup ./mariadb_repo_setup --mariadb-server-version="mariadb-10.4"
Для информации 1:
Если Вы хотите установить самую последнюю версию MariaDB — 10.5, то запустите скрипт без опции —mariadb-server-version=
Для информации 2:
Данный скрипт проанализирует вашу систему, установит GPG-ключи и добавит репозитарий в файл /etc/apt/sources.list.d/mariadb.list
Скрипт является официальным и поддерживает дистрибутивы: RHEL/CentOS 6 & 7, Ubuntu 16.04 LTS (xenial) & 18.04 (bionic), Debian 8 (jessie) & 9 (stretch) и SLES 12 и 15
Скрипт так же поддерживает установку репозитариев для разных версий MariaDB, MaxScale и MariaDB Tools, Вы можете скачать его и посмотреть все опции запуска:
./mariadb_repo_setup --help
P.S. Для любителей все делать руками есть удобный портал, где можно более гибко выбрать нужный репозитарий в зависимости от географического положения вашего сервера.
3. Обновляем список пакетов:
apt-get update
4. Устанавливаем последнюю версию MariaDB 10.4.x:
apt-get install mariadb-server -y
В процессе установки инсталлятор попросит нас придумать пароль пользователя root, на данном этапе мы его оставим пустым и поменяем потом.
После установки проверим статус работы MariaDB:
# systemctl status mariadb ● mariadb.service - MariaDB 10.4.6 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/mariadb.service.d └─migrated-from-my.cnf-settings.conf Active: active (running) since Sun 2019-06-23 20:20:42 +05; 25s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 4107 (mysqld) Status: "Taking your SQL requests now..." CGroup: /system.slice/mariadb.service └─4107 /usr/sbin/mysqld Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] InnoDB: 10.4.6 started; log sequence number 139827; transaction id 21 Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] Plugin 'FEEDBACK' is disabled. Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] InnoDB: Buffer pool(s) load completed at 190623 20:20:42 Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] Server socket created on IP: '127.0.0.1'. Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] Reading of all Master_info entries succeeded Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] Added new Master_info '' to hash table Jun 23 20:20:42 debian mysqld[4107]: 2019-06-23 20:20:42 0 [Note] /usr/sbin/mysqld: ready for connections. Jun 23 20:20:42 debian mysqld[4107]: Version: '10.4.6-MariaDB-1:10.4.6+maria~stretch-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution Jun 23 20:20:42 debian systemd[1]: Started MariaDB 10.4.6 database server.
# netstat -ltupn | grep mysql tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4107/mysqld # ps -ef | grep [m]ysql mysql 4107 1 0 20:20 ? 00:00:00 /usr/sbin/mysqld
А так же попробуем подключиться к БД с помощью команды mysql (т.к. на этапе установки мы оставили пароль root пустым, то использовать опции -u root -p мы не будеи):
# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.4.6-MariaDB-1:10.4.6+maria~stretch-log mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Мы успешно подключились к серверу MariaDB.
5. Теперь запустим мастер настройки безопасности:
mysql_secure_installation
На вопрос:
Enter current password for root (enter for none):
нажимаем Enter, текущий пароль root у нас пустой.
Далее вопрос:
Switch to unix_socket authentication [Y/n]
вводим Y, если мы хотим оставить возможность аутентификации через unix-сокет — это нововведение появилось именно в 10.4, плагин позволяет использовать присутствующие в системе учётные записи для подключения к СУБД при помощи локального unix-сокета. Лично я не любитель такого подхода и поэтому нажимаю N
Далее вопрос:
Change the root password? [Y/n]
вводим Y, да мы хотим поменять пароль root
и далее придумываем СЛОЖНЫЙ пароль root
Далее вопрос:
Remove anonymous users? [Y/n]
вводим Y, мы хотим удалить анонимного пользователя.
Далее вопрос:
Disallow root login remotely? [Y/n]
вводим Y, да мы хотим запретить подключаться под пользователем root с удаленных машин.
Далее вопрос:
Remove test database and access to it? [Y/n]
вводим Y, да мы хотим удалить тестовую базу test
И последний вопрос:
Reload privilege tables now? [Y/n]
вводим Y, да мы хотим перезагрузить таблицу привилегий для вступления их в силу.
После этого мы выполнили минимальные меры по защите нашего экземпляра MariaDB.
К сожалению есть ложка дегтя, хоть на вопрос «Switch to unix_socket authentication [Y/n]» мы ответили N, но к сожалению аутентификация с использованием unix socket не выключилась для пользователя root подключающегося с localhost. Можно воспользоваться этой статьей и отключить плагин, но это грозит массой проблем, т.к. на данный метод аутентификации завязаны теперь многие вспомогательные и служебные скрипты в MariaDB.
Чтобы проверить, что под root с пустым паролем нас не пустят нам нужно залогиниться под непривилегированным пользователем и попробовать выполнить (когда у нас спросят пароль root, мы нажмем Enter, тем самым пароль будет пустым):
mgrigorev@debian:~$ mysql -u root -p ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Как мы видим с пустым паролем root нас больше не пускают.
А теперь так же находясь под непривилегированным пользователем на запрос пароля введем его:
mgrigorev@debian:~$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.4.6-MariaDB-1:10.4.6+maria~stretch-log mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Отлично, все получилось.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Скажите пожалуйста, если я буду подключать phpmyadmin к MariaDB 10.4 то:
1. Нужно ли включать Switch to unix_socket authentication???
2. Нужно ли ставить пароль на root или лучше оставить без пароля?
1. Нет
2. Да, нужно.
Здравствуйте, Михаил!
Отличная статья (особенно про unix_socket authentication).
Скажите пожалуйста в чем может быть проблема, установил сервер и клиент MariaDB 10.4.20.
Войти через терминал и root с паролем получается (аналогично как в статье), а вот на портах тишина (netstat -ltupn | grep mysql), не могу также подключиться через Dbeaver или mysql-workbrench. В чем может быть проблема (хотя бы методику выявления проблемы). Спасибо.
Добрый вечер,
проверьте открытые порты с помощью команды: netstat -ltupn | grep -E «(mysql|mariad)»
если будет 0 0.0.0.0:3306 то это означает, что MariaDB принимает соединения на всех сетевых интерфейсах.
Если будет 127.0.0.1:3306, то значит только с localhost и по сети вы не подключитесь.
Чтобы MariaDB принимала соединения на всех сетевых интерфейсах необходимо в файле конфигурации /etc/mysql/mariadb.conf.d/50-server.cnf (для Debian 9/10) в секции [mysqld] проверить настройку bind-address и если она вида bind-address=127.0.0.1, то установить в bind-address=0.0.0.0 и перезапустить MariaDB
Спасибо Вам!