Управление БД MySQL / MariaDB: установка, пользователи, бэкапы
Установка MySQL/MariaDB на Linux VDS, создание пользователей и БД, dump/import, тюнинг производительности и безопасный удалённый доступ.
WordPress, e-commerce, корпоративные приложения — у всех под капотом БД. MySQL и его форк MariaDB — самые распространённые в мире реляционные базы. В гиде — установка, управление пользователями/БД, бэкапы и частые проблемы производительности на Linux-VDS.
MySQL vs MariaDB — что выбрать?
- MySQL: принадлежит Oracle, коммерческая + community
- MariaDB: open-source форк MySQL, ~95% совместима, местами быстрее
Для большинства проектов взаимозаменяемы — что установлено в системе, то и подходит. WordPress поддерживает обе. Для новой установки рекомендуем MariaDB.
1. Установка
# Ubuntu/Debian
sudo apt update
sudo apt install mariadb-server -y
# AlmaLinux/RHEL
sudo dnf install mariadb-server -y
sudo systemctl enable --now mariadb
Статус:
sudo systemctl status mariadb
2. Безопасность (всегда первый шаг)
sudo mysql_secure_installation
- Set root password: сильный
- Remove anonymous users: Yes
- Disallow root login remotely: Yes
- Remove test database: Yes
- Reload privilege tables: Yes
3. Подключение
sudo mysql -u root -p
Выход: EXIT; или Ctrl+D
4. Создание БД
CREATE DATABASE blog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
utf8mb4 поддерживает emoji + не-латинские символы. Старый utf8 3-байтовый — emoji сломает.
5. Создание пользователя + права
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'СИЛЬНЫЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON blog_db.* TO 'blog_user'@'localhost';
GRANT SELECT ON blog_db.* TO 'reader'@'localhost';
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY 'ПАРОЛЬ';
GRANT ALL ON app_db.* TO 'app_user'@'192.168.1.50';
FLUSH PRIVILEGES;
@'localhost' — только с сервера, @'%' — с любого места (небезопасно — только с конкретным IP).
6. Просмотр / удаление прав
SHOW GRANTS FOR 'blog_user'@'localhost';
REVOKE INSERT, UPDATE ON blog_db.* FROM 'blog_user'@'localhost';
DROP USER 'старый_user'@'localhost';
7. Бэкап (mysqldump)
Одна БД
mysqldump -u root -p blog_db > blog_db.sql
Сжатый:
mysqldump -u root -p blog_db | gzip > blog_db_$(date +%Y%m%d).sql.gz
Все БД
mysqldump -u root -p --all-databases | gzip > all_dbs.sql.gz
Production: бэкап без блокировок
mysqldump -u root -p --single-transaction --routines --triggers blog_db > blog_db.sql
--single-transaction — консистентный бэкап без блокировок (для InnoDB).
Автоматизация через cron:
0 3 * * * mysqldump -u root -p'ПАРОЛЬ' blog_db | gzip > /backup/blog_$(date +\%Y\%m\%d).sql.gz
8. Restore
mysql -u root -p blog_db < blog_db.sql
zcat blog_db.sql.gz | mysql -u root -p blog_db
Если БД нет — сначала CREATE.
9. Удалённый доступ
По умолчанию MySQL слушает только localhost. Для удалённого:
/etc/mysql/mariadb.conf.d/50-server.cnf:
bind-address = 0.0.0.0
sudo systemctl restart mariadb
CREATE USER 'remote_user'@'YOUR_IP' IDENTIFIED BY 'СИЛЬНЫЙ_ПАРОЛЬ';
GRANT ALL ON db_name.* TO 'remote_user'@'YOUR_IP';
FLUSH PRIVILEGES;
В UFW открыть 3306 только для конкретного IP:
sudo ufw allow from YOUR_IP to any port 3306
⚠️ Никогда bind-address = 0.0.0.0 + GRANT % + UFW открыт — публичный MySQL = цель брутфорса.
10. Тюнинг производительности
/etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
innodb_buffer_pool_size = 2G
query_cache_size = 64M
query_cache_type = 1
max_connections = 200
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
sudo systemctl restart mariadb
11. Полезные команды
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "Size (MB)"
FROM information_schema.tables GROUP BY table_schema;
SHOW PROCESSLIST;
SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
12. phpMyAdmin (GUI)
sudo apt install phpmyadmin -y
Apache-конфиг или вручную /etc/apache2/conf-available/phpmyadmin.conf. Браузер http://vds-ip/phpmyadmin.
⚠️ В проде phpMyAdmin не открывать в интернет — ограничьте IP через .htaccess или Cloudflare Access.
Частые ошибки
- “Access denied for user”: неверный пароль или user
@'host'не совпадает - “Too many connections”: увеличьте
max_connections, убейте idle - “Disk full”: логи разрослись → почистите
/var/log/mysql/ - “InnoDB: Operating system error number 28”: диск заполнен → расширение диска Linux
- “Can’t connect to MySQL server”: сервис не запущен →
sudo systemctl status mariadb - Медленные запросы: включите slow log,
EXPLAIN SELECT ..., добавьте INDEX
Итог
MySQL/MariaDB — базовая инфраструктура — для WordPress или собственного ПО. Установка за 5 минут; production-ready с бэкапами + безопасностью + тюнингом.
VDS KavesNET на NVMe SSD — идеален для MySQL: disk I/O — кровь БД.
По теме: Ручная установка WordPress · Бэкапы серверов
Похожие статьи
Возможно, вас также заинтересует.
Правило 3-2-1: как никогда не терять данные сервера
Правило резервного копирования 3-2-1 — золотой стандарт стратегии бэкапа сервера. Разбираем правило, автоматизацию и инфраструктуру KavesNET.
Читать далее
Как мигрировать сайт с Plesk на Plesk: гид по Migrator
Перенос сайтов, почты, БД и DNS за один раз с Plesk Migrator. Настройка, тест-миграция и cutover.
Читать далее
FileZilla: миграция файлов между двумя VDS
Перенос сайта со старого на новый VDS: FileZilla по FTP/SFTP, советы по скорости, права и обработка ошибок.
Читать далее