Проблема
Имеется база данных с заранее подготовленной структурой. Сервер БД — mariadb-10.5.8. В результате импорта данных из CSV-дампа mailing_views_details.txt (создан при помощи mysqldump —tab)
mysqlimport -d -k -v -u root -p test mailing_views_details.txt
где
-d — очистка таблицы mailing_views_details перед ипортированием
-k — отключить проверку foreign key во время импортирования
-v — добавляет немного «болтливости» при импорте
в таблицу mailing_views_details получаю следующую ошибку:
Loading data from SERVER file: mailing_views_details.txt into mailing_views_details
mysqlimport Error 1292, Incorrect datetime value: ‘2018-03-25 03:01:08’ for column `test`.`mailing_views_details`.`created_at` at row 706660, when using table: mailing_views_details
Разбираемся
Смотрим строку 706660 и соседнюю с ней 706659 дампа mailing_views_details.txt
cat mailing_views_details.txt | head -n706660 | tail -n2
507967 15550 2018-03-25 02:59:22
450087 15559 2018-03-25 03:01:08
Значение третьего поля ‘2018-03-25 03:01:08’ недопустимо из-за перехода на летнее время (Daylight saving time (DST)) между 2 и 3 часами ночи 25 марта. Следовательно все значения времени после 3 часов ночи в любой день введения летнего времени недопустимы. Это утверждение истинно если тип поля таблицы timestamp
Решение
Их есть несколько
- Сменить системный часовой пояс на тот, который не использует DST
- Изменить тип поля таблицы с текущего timestamp на datetime
- Задать другое значение переменной mysql — time_zone
Ясно, что первый вариант вовсе и не вариант для нашего часового пояса. Поэтому рассмотрим варианты два и три
Вариант 2
Меняем тип поля таблицы mailing_views_details на datetime
ALTER TABLE mailing_views_details MODIFY created_at datetime;
После чего дамп накатывается без ошибок
Вариант 3
Меняем переменную time_zone с текущего значения SYSTEM на +2:00
SET time_zone = '+2:00';
SELECT @@time_zone;
@@time_zone
+02:00
И накатываем дамп. Чтобы всякий раз после перезагрузки mysql не изменять значение time_zone на нужное, необходимо в файле my.cnf добавить следующее:
default-time-zone = '+2:00'
И вишенка на торте!
Такая ошибка импортирования наблюдается только в случае если дамп был сделан с использованием mysqldump —tab в CSV-файл. Если же дампить без опции —tab, то при заливке подобной ошибки не возникает

- Системный администратор с 2000 года
- Участник Freelancehunt, Хабр Q&A, cyberforum
- Кейсы