24 июня 2020 года вышла первая стабильная версия MariaDB 10.5.4, ключевых улучшений достаточно много, самые интересные это конечно 2 новых движка хранения — S3 и ColumnStore.
Давайте попробуем установить новую версию на чистую систему Oracle Linux 7.
Полный список изменений в MariaDB 10.5.4 Вы можете найти на официальной странице, частичный перевод на русском языке можно почитать на этой странице.
На официальном сайте так же есть инструкция по обновлению MariaDB 10.4 до версии 10.5, но это тема отдельной статьи.
Исходные данные: ОС Oracle Linux 7.8;
Задача: Установить MariaDB 10.5.4 с минимум телодвижений и произвести базовую настройку БД;
Установка MariaDB 10.5.4 на Oracle Linux 7:
1. Обновим текущие пакеты до свежих версий и установим дополнительные, необходимые для установки MariaDB:
yum update -y yum install -y wget
2. А теперь та самая простая магия, о которой мало где написано — скачивание и запуск скрипта установки репозитария:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup && chmod a+x mariadb_repo_setup ./mariadb_repo_setup --mariadb-server-version="mariadb-10.5"
Для информации:
Данный скрипт проанализирует Вашу систему, установит GPG-ключи и добавит репозитарий в файл /etc/yum.repos.d/mariadb.repo
Скрипт является официальным и поддерживает дистрибутивы: RHEL/CentOS 6/7/8, Ubuntu 16.04 LTS (xenial) & 18.04 (bionic) & 20.04 (focal), Debian 8/9/10 и SLES 12/15
Скрипт так же поддерживает установку репозитариев для разных версий MariaDB, MaxScale и MariaDB Tools, Вы можете скачать его и посмотреть все опции запуска:
./mariadb_repo_setup --help
P.S. Для любителей все делать руками есть удобный портал, где можно более гибко выбрать нужный репозитарий в зависимости от географического положения вашего сервера.
3. Устанавливаем последнюю версию MariaDB 10.5.x:
yum install -y MariaDB-server
4. Запустим MariaDB:
systemctl start mariadb.service
Добавим запуск MariaDB при старте ОС:
systemctl enable mariadb.service
После запуска проверим статус работы MariaDB:
# systemctl status mariadb ● mariadb.service - MariaDB 10.5.4 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/mariadb.service.d └─migrated-from-my.cnf-settings.conf Active: active (running) since Sun 2020-06-28 17:34:54 +05; 48s ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 8021 (mariadbd) Status: "Taking your SQL requests now..." CGroup: /system.slice/mariadb.service └─8021 /usr/sbin/mariadbd Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] Plugin 'FEEDBACK' is disabled. Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] InnoDB: Buffer pool(s) load completed at 200628 17:34:54 Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Warning] Failed to create a socket for IPv6 '::': errno: 97. Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] Server socket created on IP: '0.0.0.0'. Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] Reading of all Master_info entries succeeded Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] Added new Master_info '' to hash table Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: 2020-06-28 17:34:54 0 [Note] /usr/sbin/mariadbd: ready for connections. Jun 28 17:34:54 ol7.localdomain mariadbd[8021]: Version: '10.5.4-MariaDB' socket: '/var/lib/mysql/mysql.sock' port: 3306 MariaDB Server Jun 28 17:34:54 ol7.localdomain systemd[1]: Started MariaDB 10.5.4 database server.
Проверим порт и работу демона. Обратите внимание, что начиная с версии 10.5 все исполняемые файлы, начинающиеся со слова «mysql» переименованы с использованием слова «mariadb». Старые имена пока сохранены в форме символических ссылок, но нужно уже привыкать использовать вместо mysql слово mariadb.
# netstat -ltupn | grep maria tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8021/mariadbd # ps -ef | grep [m]aria mysql 8021 1 0 17:34 ? 00:00:00 /usr/sbin/mariadbd
А так же попробуем подключиться к БД с помощью команды mariadb:
# mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.5.4-MariaDB MariaDB Server 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 [(none)]> SELECT version(); +----------------+ | version() | +----------------+ | 10.5.4-MariaDB | +----------------+ 1 row in set (0.000 sec)
Мы успешно подключились к серверу MariaDB.
5. Настройка безопасности MariaDB:
Очень важно выполнить этот пункт, а особенно задать очень сложный пароль пользователя root, т.к. по умолчанию MariaDB принимает сетевые соединения на всех сетевых интерфейсах и если Ваш сервер смотрит в интернет портом 3306, то неправильная настройка безопасности может стать причиной взлома базы данных.
Запускаем мастер настройки:
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@ol7:~$ mariadb -u root -p ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Как мы видим с пустым паролем root нас больше не пускают.
А теперь так же находясь под непривилегированным пользователем на запрос пароля введем его:
mgrigorev@ol7:~$ mariadb -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 15 Server version: 10.5.4-MariaDB MariaDB Server 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 лет.