Установка MySQL и MariaDB: Руководство по базовому управлению
Пошаговая установка MySQL и MariaDB на Linux, mysql_secure_installation, создание баз данных и пользователей, основные SQL-команды, настройка удалённого доступа и оптимизация производительности.
Содержание
Установка MySQL и MariaDB: Руководство по базовому управлению
MySQL и MariaDB — наиболее широко используемые реляционные системы управления базами данных в мире. Большинство веб-приложений, интернет-магазинов и корпоративных систем используют одну из этих СУБД. В этом руководстве рассматривается установка, базовая настройка и управление обеими системами.
MySQL или MariaDB?
MariaDB — это форк MySQL, созданный оригинальными разработчиками MySQL. Основные отличия:
| Характеристика | MySQL | MariaDB |
|---|---|---|
| Лицензия | GPL + Коммерческая | GPL (полностью открытая) |
| Разработчик | Oracle | MariaDB Foundation |
| Производительность | Хорошая | Как правило, выше |
| Совместимость | Эталонная | Совместима с MySQL |
| Новые функции | Медленный цикл | Более быстрый цикл |
Для новых проектов рекомендуется MariaDB. Она полностью совместима с MySQL и, как правило, обеспечивает лучшую производительность. Миграция с MySQL на MariaDB выполняется без труда.
Установка MySQL (Ubuntu/Debian)
Обновление репозитория и установка
# Обновить список пакетов
apt update
# Установить MySQL Server
apt install -y mysql-server
# Проверить статус службы
systemctl status mysql
# Включить автозапуск
systemctl enable mysql
Проверка версии MySQL
mysql --version
# Вывод: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
Установка MariaDB (Ubuntu/Debian)
# Обновить список пакетов
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)
# Добавить репозиторий 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
После установки обязательно запустите мастер безопасности:
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
# Подключиться как 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
Создание баз данных и управление ими
-- Создать базу данных
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;
Создание пользователей и назначение привилегий
-- Создать пользователя (только 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-команды
-- Создать таблицу
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. Редактирование файла конфигурации
# Для MySQL
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Для MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Измените или закомментируйте строку bind-address
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
2. Перезапуск службы
systemctl restart mysql
# или
systemctl restart mariadb
3. Добавление правила брандмауэра
# С помощью UFW
ufw allow 3306/tcp
# С помощью iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Открытие порта MySQL (3306) в интернет создаёт угрозу безопасности. По возможности используйте SSH-туннель или VPN. Если удалённый доступ необходим, ограничьте его конкретными IP-адресами.
Настройка производительности
Базовая оптимизация конфигурации
nano /etc/mysql/mysql.conf.d/mysqld.cnf
[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
Применение конфигурации
systemctl restart mysql
# Проверить переменные
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
Управление службой
# Запустить службу
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.
Связанные статьи
Установка и базовое управление PostgreSQL
Установка PostgreSQL на Ubuntu/Debian и RHEL/CentOS, создание пользователей и баз данных, основные SQL-команды, настройка удалённого подключения и резервное копирование. Пошаговое руководство.
Установка Redis и Memcached: Руководство по кэш-слою
Установка Redis и Memcached на Ubuntu/Debian, основные команды, настройки персистентности, конфигурация TTL, сравнение Redis и Memcached, интеграция с приложениями.
Установка phpMyAdmin и безопасный доступ
Пошаговая установка phpMyAdmin на Apache и Nginx, настройка SSL, управление пользователями, ограничение по IP и усиление безопасности.