Установка и настройка MySQL на Ubuntu/Debian 列印

  • mysql, ubuntu, debian
  • 0

Подготовка системы

sudo apt update && sudo apt -y full-upgrade
sudo apt -y install curl gnupg ca-certificates ufw lsb-release

1) Установка MySQL сервера

Ubuntu 22.04/24.04 — штатный пакет MySQL

sudo apt -y install mysql-server
sudo systemctl enable --now mysql
sudo systemctl status mysql --no-pager

Debian 12/13 — оригинальный MySQL из официального репозитория Oracle

На Debian по умолчанию ставится MariaDB. Если нужен именно MySQL, подключаем официальный репозиторий и устанавливаем сервер.

# Скачиваем мета-репозиторий MySQL (APT config)
curl -fsSLo /tmp/mysql-apt.deb https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
sudo apt -y install /tmp/mysql-apt.deb
sudo apt update
sudo apt -y install mysql-server
sudo systemctl enable --now mysql

2) Базовая безопасность (root, анонимы, удалённый логин)

Быстрый интерактивный способ

sudo mysql_secure_installation
# Рекомендуемые ответы:
# - Пароль root: задать сложный
# - Remove anonymous users? Yes
# - Disallow root login remotely? Yes
# - Remove test database? Yes
# - Reload privilege tables? Yes

Нон-интерактивно (через SQL)

sudo mysql <<'SQL'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPass!ChangeMe';
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
SQL

3) Установка базы MySQL и пользователя (создание схемы под приложение)

# Заходим под root (локально это через unix-сокет)
sudo mysql <<'SQL'
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'AppUser_StrongP@ss1';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
SQL

Это минимальный набор для «установка базы mysql». Для подключения не с локального хоста добавьте ещё пользователя 'appuser'@'10.66.66.%' или конкретный IP.

Пример удалённого доступа только с одного адреса:

sudo mysql <<'SQL'
CREATE USER 'appuser'@'198.51.100.25' IDENTIFIED BY 'AppUser_StrongP@ss1';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'198.51.100.25';
FLUSH PRIVILEGES;
SQL

4) Доступ по сети (при необходимости)

По умолчанию MySQL слушает 127.0.0.1. Для удалённого доступа включим bind на все интерфейсы и ограничим порт фаерволом.

# Разрешим удалённые подключения MySQL
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf || \
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mysql

# UFW: закрыто для всех, открыто только для доверенных IP
sudo ufw deny 3306/tcp
sudo ufw allow from 198.51.100.25 to any port 3306 proto tcp
sudo ufw allow from 10.66.66.0/24 to any port 3306 proto tcp
sudo ufw status numbered

Проверка соединения с клиента:

mysql -h <IP_сервера> -u appuser -p appdb

5) PHP + MySQL (php mysql установка)

Для Nginx с PHP-FPM:

sudo apt -y install php-fpm php-cli php-mysql
sudo systemctl enable --now php8.3-fpm || sudo systemctl enable --now php8.2-fpm

Тест-скрипт подключения (/var/www/html/dbtest.php):

sudo tee /var/www/html/dbtest.php >/dev/null <<'PHP'
<?php
$mysqli = new mysqli("127.0.0.1", "appuser", "AppUser_StrongP@ss1", "appdb");
if ($mysqli->connect_errno) { die("Connect failed: ".$mysqli->connect_error); }
$res = $mysqli->query("SELECT 1 AS ok");
$row = $res->fetch_assoc();
echo "DB OK=" . $row['ok'] . PHP_EOL;
PHP

Откройте http://<IP_сервера>/dbtest.php — должно вывести DB OK=1. После проверки файл лучше удалить:

sudo rm -f /var/www/html/dbtest.php

6) Резервное копирование и импорт

# Бэкап «на лету»
mysqldump -u root -p --single-transaction --routines --triggers appdb > /root/appdb_$(date +%F).sql

# Восстановление
mysql -u root -p appdb < /root/appdb_2025-09-21.sql

7) Базовый тюнинг (innodb/под нагрузку)

Создайте доп. конфиг 90-tune.cnf:

sudo tee /etc/mysql/conf.d/90-tune.cnf >/dev/null <<'CNF'
[mysqld]
# Память: ~70% ОЗУ под InnoDB (пример: для 8 GB RAM — 5G)
innodb_buffer_pool_size = 5G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
# Соединения/запросы
max_connections = 200
table_open_cache = 4000
query_cache_type = 0
# Лог медленных запросов
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
# Кодировки по умолчанию
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
CNF
sudo systemctl restart mysql

Значения примерные: подстройте innodb_buffer_pool_size в зависимости от RAM.

8) Мониторинг «на пальцах»

# Текущие статусы
sudo mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_%';"
sudo mysql -e "SHOW GLOBAL STATUS LIKE 'Connections';"

# Медленные запросы (если включили slow log)
sudo tail -n 50 /var/log/mysql/slow.log


В HSTQ мы бесплатно выполним «установка MySQL Ubuntu/Debian», настроим установку базы MySQL с пользователями, включим резервные копии, slow-log и базовый тюнинг под вашу RAM/нагрузку, а также завернём php mysql установка под Nginx/Apache. Нужны внешние подключения — настроим безопасный доступ, UFW и бэкапы.


這篇文章有幫助嗎?

« 返回

Powered by WHMCompleteSolution


知識庫