Разворачиваем MySQL: установка и настройка

f55befed0041236b3d6497ef8c11e73b.png

MySQL на сегодняшний день является одной из наиболее распространенных в мире. Достаточно сказать, что по рейтингам 2021 года данная СУБД лишь немного уступала Oracle.

1fd721fcad75e697722b69651f0b62c0.png

В серии из трех статей мы рассмотрим основные моменты связанные с редакциями MySQL, обсудим архитектуру, процесс установки и базовой настройки. Во второй статье мы займемся созданием репликации БД. И в третьей части мы поговорим о различных способах резервного копирования данных в БД.

Начнем с рассмотрения редакций СУБД MySQL.

Ванильная сборка

Классическая версия MySQL от Oracle это свободная реляционная система управления базами данных. На сегодняшний день разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems, которая ранее приобрела шведскую компанию MySQL AB. Такая несколько сложная «пищевая цепочка» не помешала данной БД получить широкое распространение. Далее, когда мы будем рассматривать практические примеры развертывания, будет использоваться именно классическая редакция MySQL.

 MariaDB

СУБД MariaDB — ответвление MySQL, разрабатываемое сообществом под лицензией GNU GPL. Разработку и поддержку MariaDB осуществляет компания MariaDB Corporation Ab и фонд MariaDB Foundation. При этом СУБД MariaDB совместима с MySQL до версии 5.6.

 Движки MySQL

База данных может работать с несколькими типами движков (engines). В таблице ниже приведены основные характеристики каждого из них.

Name

Vendor

License

Transactional

Under active development

MySQL versions

MariaDB versions

Archive

Oracle

GPL

No

Yes

5.0 — present

5.1 — present

Aria

MariaDB

GPL

No

Yes

None

5.1 — present

Berkeley DB

Oracle

AGPLv3

Yes

No

? — 5.0

None

BLACKHOLE

Oracle

GPL

No

Yes

5.0 — present

5.1 — present

CONNECT

MariaDB

GPL

No

Yes

None

10.0 — present

CSV

Oracle

GPL

No

Yes

5.0 — present

5.1 — present

Falcon

Oracle

GPL

Yes

No

?

None

Federated

Oracle

GPL

?

No

5.0 — present

?

FederatedX

MariaDB

GPL

Yes

No

None

? — present

ColumnStore (formerly InfiniDB)

Calpont

GPL

Yes

Yes

None

10.5.4 — present

InnoDB

Oracle

GPL

Yes

Yes

3.23 — present

5.1 — present

MEMORY

Oracle

GPL

No

Yes

3.23 — present

5.1 — present

Mroonga

Groonga Project

GPL

No

Yes

None

10.0 — present

MyISAM

Oracle

GPL

No

No

3.23 — present

5.1 — present

MyRocks

Facebook

GPLv2

Yes

Yes

None

10.2 — present

NDB

Oracle

GPLv2

Yes

Yes

?

None

OQGRAPH

Oracle

GPLv2

No

No

None

5.2 — present

S3

MariaDB

GPL

No

Yes

None

10.5 — present

SEQUENCE

MariaDB

GPL

No

Yes

None

10.0 — present

Sphinx

Sphinx Technologies Inc.

GPL

No

No

None

5.2 — present

SPIDER

Kentoku Shiba

GPL

Yes

Yes

None

10.0 — present

TempTable

Oracle

GPL

No

Yes

8.0 — present

None

TokuDB

Percona

Modified GPL

Yes

No

None

5.5 — present

XtraDB

Percona

GPL

Yes

Yes

None

5.1 — 10.1

В этой статье я не буду подробно рассматривать все представленные движки, вместо этого будут рассмотрены только основные. Для ознакомления с рекомендациями по использование остальных предлагаю обратиться к следующей статье https://habr.com/ru/post/64851/.

 MyISAM

MyISAM это базовый тип хранилища MySQL. Однако, в нем отсутствуют блокировки на строки и нет транзакций. Как можно понять из названия, движок основывается на принципах ISAM и обладает в сравнении с ним рядом полезных дополнений. Так, он имеет возможности по сжатию данных, по созданию полнотекстовых индексов. Но при этом СУБД не является устойчивой к сбоям и не выполняет требования ACID.

Поддерживается с версий MySQL 3.x, до версий MySQL 5.5, являлась системой хранения по умолчанию.

Немного теории:

 ISAM (Indexed Sequential Access Method — индексно-последовательный метод доступа) — способ хранения данных с возможностью быстрого доступа к ним, является наиболее популярным методом индексирования.

ACID (atomicity, consistency, isolation, durability) — набор требований к транзакционной СУБД, обеспечивающий наиболее надёжную и предсказуемую её работу — атомарность, согласованность, изоляцию и устойчивость.

Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.

Согласованность — транзакция, достигающая своего нормального завершения и тем самым фиксирующая свои результаты, сохраняет согласованность базы данных.

Изоляция — во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.

Устойчивость — независимо от проблем с питанием или сбоях в оборудовании изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.

InnoDB

InnoDB механизм хранения общего назначения, который обеспечивает высокую надежность и высокую производительность. В MySQL 8.0 механизм хранения по умолчанию. Движок был разработан специально для больших таблиц и показывает наибольшую скорость при работе с БД основанных на дисках.

Преимуществами InnoDB является возможность блокировки на уровне таблиц (читаем, если нет блокировки на запись, пишем, если нет блокировок), поддержка восстановления по времени (binary log), репликаций и конкурентного INSERT.

Установка MySQL

Теперь перейдем непосредственно к установке СУБД. Процесс не должен вызвать особых сложностей:

 sudo apt update && sudo apt upgrade -y && sudo apt-get install -y mysql-server

 После установки необходимо выполнить харденинг, то есть указать настройки безопасности:

sudo mysql_secure_installation

• Удалить анонимных пользователей? (Нажмите y | Y для Yes, любую другую клавишу для No): y

• Запретить вход в систему удаленно? (Нажмите y | Y для Yes, любую другую клавишу для No): y

• Удалить тестовую базу данных и получить доступ к ней? (Нажмите y | Y для Yes, любую другую клавишу для No): y

• Обновить таблицы привилегий сейчас? (Нажмите y | Y для Yes, любую другую клавишу для No): y

Далее перезапустим MySQL:

sudo systemctl status mysql

sudo systemctl enable mysql

e8e1664acc5eb7a5dc4d0a4e74702bb2.png

 Для того, чтобы не вводить каждый раз пароль, мы можем его прописать в домашней папке в файле .my.cnf, имеющем следующую структуру:

 sudo su

cd $HOME

nano .my.cnf

[client]

Password="Otus321$”

sudo mysql

 Архитектура MySQL

Прежде, чем выполнять какие-либо настройки и запросы в СУБД давайте посмотрим, из чего состоит MySQL.

Давайте посмотрим, как это устроено в процессах:

$ ps ax | grep mysqld

$ ps –eLf | grep mysqld

e688084f7eab2d1bf1674dc434db986c.png082ba27ad6c1e7946f70a89e70e74373.png

Как мы видим, процесс /usr/sbin/mysqld после успешного запуска порождает множество подпроцессов, которые использует СУБД в своей работе.

На файловом уровне MySQL хранит все данные в каталоге /var/lib/mysql:

$ sudo ls -l /var/lib/mysql

4b55cd3fdd7b8580e9f16ac19897be19.png

О некоторых представленных здесь файлах и каталогах мы еще будем говорить в следующих статьях.

Основной конфигурационный файл находится в /etc/mysql/mysql.conf.d/:

nano /etc/mysql/mysql.conf.d/mysqld.cnf

9073b338a92c24473e17f789394e5366.png

Для тестовой инсталляции как правило вносить изменения в этот файл не нужно.

Работаем с таблицами

Далее выполним sudo mysql и перейдем непосредственно в командную среду СУБД.

Структура таблиц после установки имеет следующий вид

> use mysql

> show tables;

131203c710619c55fe971ace46d54f6b.png

Сейчас здесь присутствуют только служебные таблицы, созданные вместе с СУБД.

Создадим свою базу Otus_test:

CREATE DATABASE IF NOT EXISTS Otus_test;

24d8cf9158479df040e72afc6cfb2cd5.png

Можно было бы прибегнуть к использованию команды CREATE DATABASE, но тогда мы бы получили ошибку, если бы такая база существовала.

Перейдем в созданную БД

USE Otus_test;

Далее давайте создадим тестовую таблицу в которой будет три столбца: id, name, address. Первичным ключом будет id. В качестве движка явно укажем InnoDB.

CREATE TABLE Otus_table

(

id int NOT NULL AUTO_INCREMENT,

name char(20) NOT NULL,

address char(20) NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB;

4eee31844d077fb3ddf0bef127099887.png

Добавим пару записей в таблицу:

INSERT Otus_table(Name, Address) VALUES ('Admin', 'Moscow');

INSERT Otus_table(Name, Address) VALUES ('User', 'N/A');

b8b0422c130c7247f9d12d836b2de133.png

И сделаем выборку по таблице:

SELECT * FROM Otus_table;

30787ea64f0ee8b05c3ef9c62a63f4af.png

Как видно все записи успешно добавлены в таблицу.

Немного о кодировках

Для промышленного использования СУБД необходимо, чтобы данные в кириллице хранились и отображались корректно. Кодировка (characher set) — набор используемых символов. Представление (collation) — набор правил для сравнения символов в наборе. Символьная кодировка может быть задана для сервера, базы данных, таблицы и колонок в таблице.

В качестве примера настроим кодировку UTF8 в качестве кодировки по-умолчанию. Для этого откроем уже известный нам файл конфигураций mysqld.cnf

nano /etc/mysql/mysql.conf.d/mysqld.cnf

и добавим в него следующее:

[mysqld]

init_connect=‘SET collation_connection = utf8_unicode_ci’

character-set-server = utf8

collation-server = utf8_unicode_ci

[mysql]

default-character-set = utf8

Далее перезапустим БД

systemctl restart mysql

Проверим корректность работы с кириллицей:

INSERT Otus_table(Name, Address) VALUES ('Пользователь', 'N/A');

SELECT * FROM Otus_table;

99216cb8bf5cae4f3c2460fa91be671b.png

Как видно, русскоязычные данные корректно сохранены.

Заключение

В этой статье мы рассмотрели основы работы с CУБД MySQL, установку и базовую настройку. Далее мы будем говорить о репликации, построении отказоустойчивых конфигураций, партиционировании и бэкапах.

Так как данный материал подготовлен в рамках запуска курса «Базы данных», хочу порекомендовать всем читателям бесплатный урок по PostgreSQL 15. В рамках урока обсудим новый функционал, деплой в Яндекс Облаке и настройку защищенного подключения. Варианты обновления с предыдущих версий PostgreSQL и их особенности. Подводные камни при обновлении версий.

© Habrahabr.ru