Php 8.0. Mysql-pdo Could not find driver

На рабочей станции после обновления php до версии 8.0 столкнулся с проблемой не рабочего mysql-pdo. При подключении к базе данных получал ошибку.

Одна жди у меня уже была похожая проблема после обновления до php7 И здесь я писал как ее решить:

PDOException “could not find driver”

На этот раз я решил ее следующим способом:

Отключил старую версию php

sudo a2dismod php7.4

Включил новую версию

sudo a2enmod php8.0

Перезагрузил веб-сервер

sudo a2enmod php8.0

 

Как отключить строгий режим MySQL

После установки и настройки нового веб сервера на ubuntu 20.04 lts и установки MariaDB, столкнулся с проблемами mysql, были ошибка типа:

Truncated incorrect DOUBLE value

Field ‘filed_name’ doesn’t have a default value

 Incorrect integer value: » for column ‘field_name’ at row 1

и т.д.

Оказалось проблема в строгом режиме MySQL. Нужно его временно отключить, т.к. сервер в продакшене.

Проверить режим MySQL через phpmyadmin

Переменные->sql_mode

sql_mode phpmyadmin

Отключаем строгий режим через phpmyadmin

Выполняем запрос:

set global sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Как включить строгий режим через phpmyadmin

set global sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Перегрузим мускул

sudo service mysql restart

PDOException “could not find driver”

После обновления до последней LTS версии убунты 20.04, не смог открыть локальный сайт:

PDOException “could not find driver”

Подумал что-то не так с модулем php-mysql или pdo, пробовал обновлять, переустанавливать, ничего не получилось. 

Проверяем свою версию php через терминал:

php -v

Создаем файл в директории сайта со следующим текстом:


phpinfo(); 
?>

Здесь у меня почему-то версия php 7.3 вместо php 7.4.

Проверяем через терминал все установленные версии php на компьютере:

sudo update-alternatives --config php
Установленные версии php на компьютере

Попытался переключиться на php 7.4.

Перегрузил веб-сервер

sudo service apache2 restart

Проверил снова phpinfo. не помогло, так и висит php 7.3

Плюнул, удалил все версии 7.*

sudo apt-get purge php7.*

Установил последнюю актуальную, 7.4

sudo apt install php libapache2-mod-php php-mysql

Перезапустил апач. Проверил сайт. Все работает 🙂 

Возможно придется установить phpmyadmin

sudo apt install phpmyadmin

Если после установки увидели ошибку 500. Установите нужный модуль

sudo apt install php-mbstring

Перезагрузите апач. И на этом все) 

sudo service apache restart

Ошибка: MySQL Server Has Gone Away

При импорте большой бд, из файла, получил ошибку.
В логах прочел, о нехватки значения параметра max_allowed_packet

Редактируем файл конфигурации MySQL

sudo nano /etc/mysql/my.cnf

Заменяем следующее значение:

max_allowed_packet = 1024M

Перезагружаем мускул

sudo service mysql restart

Обновляем phpMyAdmin


Warning: count(): Parameter must be an array or an object that implements Countable in /home/nordway/blog.ovsiychuk.com.ua/www/wp-content/plugins/wp-shkshell/wp-shkshell.php on line 59

Скачиваем последнюю версию (на текущий момент 4.8.2)

$ wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

Распакуем архив:

$ unzip phpMyAdmin-4.8.2-all-languages.zip

Переходим в директорию с установленным pma

$ cd /usr/share/phpmyadmin/

Удаляем все файлы старой версии

$ sudo rm -Rf *

Переходим в директорию с загруженным pma

$ cd /Загрузки/phpMyAdmin-4.8.2-all-languages

Теперь переносим все файлы

$ sudo mv * /usr/share/phpmyadmin/

Перезапускаем апач

$ sudo service apache2 restart

Перезапускаем мускул

$ sudo service mysql restart

Проверяем версию phpMyAdmin

Поиск медленных запросов MySQL

В MySQL есть замечательная встроенная фишка, которая поможет отловить самые медленные запросы к базе данных. Все очень легко настраивается.

Настройка логирования

Открываем конфигурацию для MySQL 5.5:

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Внимание. В других версиях mysql файл с настройками возможно находится в другом месте. Например в /etc/my.cnf

В блоке [mysqld] дописываем следующие строки:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 30

Где:
slow_query_log — включаем отслеживание медленных запросов
slow_query_log_file — путь к лог файлу, куда будем записывать запросы
long_query_time — макс. время выполнения запроса в секундах, более — записываем в лог

Создаем лог файл

$ touch /var/log/mysql/slow-query.log

Даем права на запись:

$ chown mysql:mysql /var/log/mysql/slow-query.log

Перезагружаем mysql

$ sudo /etc/init.d/mysql restart

Просмотр лога запросов

Просмотр 10 последних запросов

$ tail /var/log/mysql/slow-query.log

В онлайн режиме смотрим самые долгие запросы

$ tail -f /var/log/mysql/slow-query.log

Просмотр 10 самых медленных

$ mysqldumpslow -t 10 /var/log/mysql/slow-query.log