Как отключить строгий режим 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

Как очистить inodes на сервере

Сегодня утром меня разбудили звонком. На работе сайт. Открыл, смотрю не погружается. Пошел смотреть логи, а там ошибка:

No Space Left On Device

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

df -h
Место надиске

Место на диске есть, странно.

Закончились иноды? Проверим.

Пошел гуглить, посоветовали проверить иноды:

df -i

full inodes

На скриншоте выше у меня вместо 60% было 100%. 

Как найти директории которые заполнены файлами, инодами? 

Выполняем команду

sudo find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Количество файлов в директории

Как оказалось в директории tmp сайта. Временные фалы php-сессий, почему-то перестали очищаться. Раньше такой проблемы не было.

Как удалить иноды?

Очищаем папку от всех файлов старше 7 дней tmp:

sudo find /var/www/clients/client1/web1/tmp -mtime +7 -delete

Через несколько минут все заработало. Осталось разобраться почему так случилось, ти почему сессии перестали очищаться самостоятельно. 

Обновляем phpMyAdmin


Warning: count(): Parameter must be an array or an object that implements Countable in /home/gansik/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

Как включить mod_rewrite Ubuntu 14.04

mod_rewrite_logo

Самый простой способ включить mod_rewrite заключается в следующем.

  1. Активируем модуль:
    $ sudo a2enmod rewrite
  2. Перезагружаем апач
    $ sudo service apache2 restart
  3. Включите поддержку .htaccess, в виртуальном хосте
    $ sudo nano /etc/apache2/sites-available/000-default.conf

    И добавьте следующий текст между Directory «/var/www/html»> и /Directory>

    AllowOverride All