Развертывание PHP совместно с MySQL

Раздел: Администрирование Linux -> Установка и настройка PHP на Linux

Основной метод установки через пакетный менеджер

Наиболее простой и распространённый способ получения 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-server

Linux apache php (настройка apache и php в linux)

После установки проверяются версии:

php -v
mysql --version

Php 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 install

Linux версия 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 oracle linux (установка php на oracle linux)

Расширенные примеры и сценарии

Установка конкретной версии 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.

Установка PHP и MySQL в Linux - comments

En
Php mysql linux (php)