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

Перенос большой базы данных MySQL. Импорт через консоль

Понадобилось перенести огромную mysql базу данных, на другой сервер. Всего объем: : 18гб, около 266 млн. записей.

Стандартными средствами phpMyadmin, не возможно это сделать, не поможет и известный скрипт Sypex Dumper.

Но мы можем воспользоваться средствами MySQL через SSH.

Подключаемся по SSH к серверу куда нам нужно перенести вашу БД.

ssh user_name@server_ip

Экспортировать базу в файл sql:

mysqldump -h server_ip -u user_name -p db_name>db_dump.sql

Импортировать с файла sql в бд:

mysql -u user_name -p db_name <db_dump.sql

Импортировать базу с архива zip

unzip -p db_dump.sql.zip | mysql -u root -p db_name

Импортировать все sql файлы с папки в бд

cat *.sql | -u user_name -p db_name

Для отображения процесса импорта Установите утилиту pv

sudo apt install pv

И просто в конце нужной команды добавьте

 | pv

Импорт через  MySQL-консоль:

mysql> use db_name;
mysql> source backup-file.sql;

Выйти с терминала, не убивая процесс.

Будет полезно если процесс очень долгий

Имейте в виду, параметр почему-то работает, только если и пароль сразу задать в команде.

Добавьте в конце команды:

& disown

Выход через:

exit

Если при импорте вы вдруг получите ошибку, попробуйте посмотреть: Ошибка: MySQL Server Has Gone Away

Установка и настройка Apache, PHP, MySQL, phpMyAdmin на Ubuntu 14.04 LTS + 16.04 LTS

UPD. Статья обновлена до актуальной версии 24.08.2016
Однажды я уже писал статью, о том как установить  Lamp  на убунту, но с тех пор многие компоненты изменились, и соответственно, их установка изменилась.

Большинство команд выполняем в терминале (Ctrl+Alt+T)

Шаг 1. Установка Apache.

$ sudo apt-get install apache2

Далее перейдите по адресу http://localhost и вы должны увидеть стартовую страницу apache.

apache

Apache — стартовая страница.

Для того, чтобы после каждой перезагрузки апача, не получать уведомления вида:

apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

Откройте конфиг апача:

$ sudo nano /etc/apache2/apache2.conf

В конце файла добавьте строки:

ServerName 127.0.0.1

 

Шаг 2. Установка MySQL.

$ sudo apt-get install mysql-server mysql-client

В ходе установке, нужно задать пароль администратора баз данных.

mysql config

Установка пароля

Проверьте, установку:

$ sudo service mysql status

в ответ должны увидеть что-то типа если у вас Ubuntu 14.04:

$ mysql start/running, process 3470

Или если у вас Ubuntu 16.04:

1471984511297

Шаг 3. Установка PHP

Для Ubuntu 16.04

Внимание! Если у вас Ubuntu 16.04 и выше тогда перейдите СЮДА

Для Ubuntu 14.04

$ sudo apt-get install php5 php5-mysql libapache2-mod-php5

Шаг 3.1 Проверка работы PHP

Создадим файл test.php

$ sudo nano /var/www/html/test.php

Добавим следующее содержание

<?php
phpinfo();
?>

И откроем в браузере ссылку: http://localhost/test.php

Вы должны увидеть информацию о установленном php, его версию, модули, и т.д.

phpinfo

Информация о PHP

Шаг 3.2 Настройка php.ini

Откроем php.ini для редактирования.
Для Ubuntu 14.04

$ sudo nano&nbsp;/etc/php5/apache2/php.ini

Для Ubuntu 16.04 PHP 5.6

$ sudo nano&nbsp;/etc/php/5.6/apache2/php.ini

Для Ubuntu 16.04 PHP 7.0

$ sudo nano&nbsp;/etc/php/7.0/apache2/php.ini

Для Ubuntu 18.04 PHP 7.2

$ sudo nano&nbsp;/etc/php/7.2/cli/php.ini

Находим директиву short_open_tag , и включаем ее, заменяем off на on

Этим мы включили  возможность использования коротких тегов php: <? ?>

P.S Из-за этой настройки, я два вечера не мог разобраться, почему у меня не работал скрипт, и выдавал ошибку:

Parse error: syntax error, unexpected ‘}’ in …

Раньше данная директива по-умолчанию была включена

Шаг 4. Установка phpMyAdmin.

$ sudo apt-get install phpmyadmin

Отвечаем на все вопросы, заданные при установке.
Проверим установку, перейдя по адресу http://localhost/phpmyadmin/

Вы увидите страничку авторизации.

Вводим логин и пароль, заданный администратора баз данных, при установке MySQL.

phpmyadmin

phpMyAdmin — авторизация

Шаг 5. Настройка виртуальных хостов.

Для удобства я размещаю свои сайты в домашней директории.

Создадим каталог в котором будет размещены наши сайты.

$ mkdir www

Далее каталог нашего сайта.

$ mkdir www/site.com

Создадим тестовый файл

$ nano www/site.com/index.php

И напишем что-то для проверки:

<?php echo '<h1>Hello world</h1>'; ?>

Создаем новый виртуальных хост.

Копируем файл шаблона.

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site.com.conf

Открываем его для редактирования.

$ sudo nano /etc/apache2/sites-available/site.com.conf

Вставляем следующие строки:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName site.com
DocumentRoot /home/gansik/www/site.com
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/gansik/www/site.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Обратите внимание, не забудьте подставить свои данные.
gansik — имя моего пользователя

site.com — адрес моего сайта.

Включаем наш сайт

$ sudo a2ensite site.com

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

$ sudo service apache2 restart

Редактируем hosts, для того, чтобы мы могли зайти на сайт, по нашему адресу.

$ sudo nano /etc/hosts

В первой строке, после localhost, добавим адрес нашего сайта site.com 

hosts

Hosts

Сохраняем, закрываем, и переходим по адресу нашего локального сайта site.com  , в ответ мы должны увидеть Hello world.

На этом вся настройка завершена