Развертывание PHP совместно с MySQL
Основной метод установки через пакетный менеджер
Наиболее простой и распространённый способ получения PHP и MySQL в Linux - использование встроенного менеджера пакетов. В дистрибутивах на основе Debian/Ubuntu применяется apt, в Red Hat/CentOS - yum или dnf. Этот метод гарантирует совместимость версий, автоматическое разрешение зависимостей и простоту обновления.
# Ubuntu / Debian
sudo apt update
sudo apt install php mysql-server
# CentOS / RHEL
sudo yum install epel-release
sudo yum install php mysql-serverLinux apache php (настройка apache и php в linux)
После установки проверяются версии:
php -v
mysql --versionPhp fpm linux (настройка php-fpm в linux)
Основной файл конфигурации PHP - /etc/php/<версия>/cli/php.ini или /etc/php.ini. Для MySQL - /etc/mysql/my.cnf. Требуется включить расширение mysqli или pdo_mysql в файле php.ini, раскомментировав строку extension=mysqli.
fwr-bold;Проблема: Модуль php-mysql отсутствует после установки базового пакета php.
Решение: установить дополнительный пакет: sudo apt install php-mysql (для Ubuntu) или sudo yum install php-mysqlnd (для CentOS). После установки перезапустить веб-сервер.
Вариант 1. Сборка PHP и MySQL из исходного кода
Как собрать PHP из исходников, чтобы получить нестандартные опции или последнюю версию?
Этот подход требует загрузки архивов с официальных сайтов, ручной настройки конфигурации и компиляции. Используется, когда репозиторий не содержит нужной версии или требуются специфические флаги.
# Загрузка и распаковка PHP
wget https://www.php.net/distributions/php-8.2.0.tar.gz
tar -xzf php-8.2.0.tar.gz
cd php-8.2.0
# Конфигурация с поддержкой MySQL
./configure --with-mysqli --with-pdo-mysql --enable-mbstring
make -j$(nproc)
sudo make install
# Аналогично для MySQL (из исходников)
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.32.tar.gz
tar -xzf mysql-8.0.32.tar.gz
cd mysql-8.0.32
mkdir build && cd build
cmake .. -DWITH_MYSQLD=1
make -j$(nproc)
sudo make installLinux версия php (проверка версии php в linux)
fwr-bold;Типичная ошибка: Не найдены заголовочные файлы MySQL во время конфигурации PHP.
Решение: перед сборкой установить libmysqlclient-dev (Ubuntu) или mysql-devel (CentOS), либо указать путь к уже собранному MySQL через --with-mysqli=/usr/local/mysql/bin/mysql_config.
Вариант 2. Использование готового стека LAMP
Как развернуть полноценный веб-сервер с PHP и MySQL одной командой?
В Debian/Ubuntu существует метапакет tasksel, который устанавливает всё необходимое: Apache, PHP, MySQL. В CentOS можно использовать группу @lamp.
# Ubuntu / Debian
sudo apt install tasksel
sudo tasksel install lamp-server
# CentOS 7
sudo yum groupinstall "LAMP Server"
# CentOS 8+
sudo dnf groupinstall "LAMP Server"Linux установить php (установка php в linux)
После установки все компоненты уже настроены для совместной работы. База данных защищается скриптом sudo mysql_secure_installation.
fwr-bold;Проблема: После установки LAMP не отображается страница phpinfo.
Решение: создать файл /var/www/html/info.php с содержимым <?php phpinfo(); ?> и проверить, что Apache загружает модуль PHP. Если модуль отсутствует - установить libapache2-mod-php.
Вариант 3. Контейнеризация с Docker
Как изолировать PHP и MySQL в отдельных контейнерах для разработки?
Docker позволяет быстро запустить нужные версии без загрязнения основной системы. Достаточно одного docker-compose файла.
# docker-compose.yml
version: '3.8'
services:
php:
image: php:8.2-apache
ports:
- 8080:80
volumes:
- ./src:/var/www/html
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: testdb
ports:
- 3306:3306Запуск: docker-compose up -d. Для входа в контейнер MySQL: docker exec -it <id> mysql -u root -p.
fwr-bold;Типичная ошибка: Не удаётся подключиться к MySQL из PHP-контейнера.
Решение: использовать имя сервиса mysql вместо localhost, так как контейнеры соединены сетью Docker. Например, в PHP коде: new mysqli('mysql', 'root', 'rootpass', 'testdb');.
Расширенные примеры и сценарии
Установка конкретной версии PHP из стороннего PPA (Ubuntu)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.1 php8.1-mysql php8.1-fpmНастройка PHP-FPM с пулом для пользователя
# /etc/php/8.1/fpm/pool.d/www.conf
user = www-data
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35# Проверка статуса sudo systemctl status php8.1-fpm # Или sudo service php8.1-fpm status
Создание пользователя MySQL и предоставление прав
mysql -u root -p
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON testdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;# Проверка подключения тем же пользователем mysql -u appuser -p testdb mysql> SHOW DATABASES;
PHP-скрипт для проверки соединения с MySQL через PDO
<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'appuser';
$password = 'strong_password';
try {
$pdo = new PDO($dsn, $user, $password);
echo 'Соединение установлено.';
} catch (PDOException $e) {
echo 'Ошибка соединения: ' . $e->getMessage();
}
?>Вывод в браузере:
Соединение установлено.
Миграция с MySQL 5.7 на 8.0 с помощью mysqldump
# Дамп старой базы
mysqldump -u root -p --all-databases > backup.sql
# Восстановление на новом сервере
mysql -u root -p < backup.sql
# После обновления выполнить
mysql_upgrade -u root -p# Ожидаемые сообщения mysql_upgrade: [OK] All upgrades completed successfully.