Перейти к основному содержимому
Вернуться в категорию

Установка MySQL и MariaDB: Руководство по базовому управлению

Пошаговая установка MySQL и MariaDB на Linux, mysql_secure_installation, создание баз данных и пользователей, основные SQL-команды, настройка удалённого доступа и оптимизация производительности.

Время чтения: 14 мин База данных
mysqlmariadbбаза данныхустановкаsqlubuntudebianlinux

Содержание

Установка MySQL и MariaDB: Руководство по базовому управлению

MySQL и MariaDB — наиболее широко используемые реляционные системы управления базами данных в мире. Большинство веб-приложений, интернет-магазинов и корпоративных систем используют одну из этих СУБД. В этом руководстве рассматривается установка, базовая настройка и управление обеими системами.

MySQL или MariaDB?

MariaDB — это форк MySQL, созданный оригинальными разработчиками MySQL. Основные отличия:

ХарактеристикаMySQLMariaDB
ЛицензияGPL + КоммерческаяGPL (полностью открытая)
РазработчикOracleMariaDB Foundation
ПроизводительностьХорошаяКак правило, выше
СовместимостьЭталоннаяСовместима с MySQL
Новые функцииМедленный циклБолее быстрый цикл

Для новых проектов рекомендуется MariaDB. Она полностью совместима с MySQL и, как правило, обеспечивает лучшую производительность. Миграция с MySQL на MariaDB выполняется без труда.

Установка MySQL (Ubuntu/Debian)

Обновление репозитория и установка

hljs bash
# Обновить список пакетов
apt update

# Установить MySQL Server
apt install -y mysql-server

# Проверить статус службы
systemctl status mysql

# Включить автозапуск
systemctl enable mysql

Проверка версии MySQL

hljs bash
mysql --version
# Вывод: mysql  Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)

Установка MariaDB (Ubuntu/Debian)

hljs bash
# Обновить список пакетов
apt update

# Установить MariaDB Server
apt install -y mariadb-server mariadb-client

# Проверить статус службы
systemctl status mariadb

# Включить автозапуск
systemctl enable mariadb

# Проверить версию
mysql --version
# Вывод: mysql  Ver 15.1 Distrib 10.x.x-MariaDB

Установка MariaDB (CentOS/AlmaLinux/Rocky Linux)

hljs bash
# Добавить репозиторий MariaDB
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

# Установить MariaDB
dnf install -y MariaDB-server MariaDB-client

# Запустить и включить службу
systemctl start mariadb
systemctl enable mariadb

Настройка безопасности: mysql_secure_installation

После установки обязательно запустите мастер безопасности:

hljs bash
mysql_secure_installation

Мастер задаёт следующие вопросы:

Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication [Y/n]: n
Change the root password? [Y/n]: Y
New password: [Введите надёжный пароль]
Re-enter new password: [Повторите пароль]
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Отключите удалённый доступ для root. Создавайте отдельных пользователей для удалённых подключений. Используйте надёжные пароли (не менее 12 символов: заглавные и строчные буквы, цифры и специальные символы).

Подключение к MySQL/MariaDB

hljs bash
# Подключиться как root
mysql -u root -p

# Подключиться к конкретной базе данных
mysql -u user -p database_name

# Подключиться к удалённому серверу
mysql -h 192.168.1.100 -u user -p database_name

# Подключиться с указанием порта
mysql -h server -P 3306 -u user -p

Создание баз данных и управление ими

hljs sql
-- Создать базу данных
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Показать все базы данных
SHOW DATABASES;

-- Выбрать базу данных
USE myapp;

-- Удалить базу данных (осторожно!)
DROP DATABASE old_database;

-- Проверить размер базы данных
SELECT table_schema AS 'База данных',
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Размер (МБ)'
FROM information_schema.tables
GROUP BY table_schema;

Создание пользователей и назначение привилегий

hljs sql
-- Создать пользователя (только localhost)
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass123!';

-- Создать пользователя (удалённый доступ)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass123!';

-- Доступ с конкретного IP
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'StrongPass123!';

-- Предоставить полные права на базу данных
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';

-- Предоставить права только на чтение
GRANT SELECT ON myapp.* TO 'readonly'@'localhost';

-- Предоставить права на конкретную таблицу
GRANT SELECT, INSERT, UPDATE ON myapp.users TO 'appuser'@'localhost';

-- Применить привилегии
FLUSH PRIVILEGES;

-- Просмотреть привилегии пользователя
SHOW GRANTS FOR 'appuser'@'localhost';

-- Удалить пользователя
DROP USER 'old_user'@'localhost';

Основные SQL-команды

hljs sql
-- Создать таблицу
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Вставить данные
INSERT INTO users (username, email) VALUES ('ivan', 'ivan@example.com');

-- Запросить данные
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;

-- Обновить данные
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- Удалить данные
DELETE FROM users WHERE id = 5;

-- Показать таблицы
SHOW TABLES;

-- Просмотреть структуру таблицы
DESCRIBE users;

Настройка удалённого доступа

По умолчанию MySQL/MariaDB принимает подключения только с localhost. Для удалённого доступа:

1. Редактирование файла конфигурации

hljs bash
# Для MySQL
nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Для MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
hljs ini
# Измените или закомментируйте строку bind-address
# bind-address = 127.0.0.1
bind-address = 0.0.0.0

2. Перезапуск службы

hljs bash
systemctl restart mysql
# или
systemctl restart mariadb

3. Добавление правила брандмауэра

hljs bash
# С помощью UFW
ufw allow 3306/tcp

# С помощью iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

Открытие порта MySQL (3306) в интернет создаёт угрозу безопасности. По возможности используйте SSH-туннель или VPN. Если удалённый доступ необходим, ограничьте его конкретными IP-адресами.

Настройка производительности

Базовая оптимизация конфигурации

hljs bash
nano /etc/mysql/mysql.conf.d/mysqld.cnf
hljs ini
[mysqld]
# Буферный пул InnoDB (70-80% ОЗУ)
innodb_buffer_pool_size = 1G

# Пул соединений
max_connections = 150

# Размер временных таблиц
tmp_table_size = 64M
max_heap_table_size = 64M

# Лог медленных запросов
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# Бинарный лог (для репликации)
# log_bin = /var/log/mysql/mysql-bin.log
# expire_logs_days = 7

Применение конфигурации

hljs bash
systemctl restart mysql

# Проверить переменные
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Управление службой

hljs bash
# Запустить службу
systemctl start mysql

# Остановить службу
systemctl stop mysql

# Перезапустить службу
systemctl restart mysql

# Перезагрузить конфигурацию (без перезапуска)
systemctl reload mysql

# Проверить статус службы
systemctl status mysql

# Просмотреть логи
journalctl -u mysql -f
tail -f /var/log/mysql/error.log

Заключение

MySQL и MariaDB — мощные и надёжные системы баз данных. После установки не пренебрегайте настройкой безопасности, выполняйте регулярное резервное копирование и оптимизируйте параметры производительности в соответствии с ресурсами вашего сервера. Обе системы стабильно работают на серверах REXE.