Skip to content


MySQL 5.6 и sql_mode

После переезда с версии MySQL 5.5.13 на 5.6.10 стали вылезать странные грабли.

Симптом №1:

Caused by: java.sql.SQLException: Incorrect string value: '\xE6\xAF\x94FOX...' for column 'parameter_value' at row 4
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)

Симптом №2:

Data truncation: Data too long for column 'channel' at row 1
org.hibernate.exception.DataException: could not execute native bulk manipulation query

Так как "раньше всё работало" и в код приложения никто изменений не вносил, закралось подозрение, что новый mysql работает в каком-то более строгом режиме. Гугление вывело на глобальную переменную sql_mode.

mysql> show global variables like 'sql_mode';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| sql_mode                 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------+--------------------------------------------+

Читаем официальное руководство и видим:

STRICT_TRANS_TABLES
If a value could not be inserted as given into a transactional table, abort the statement. For a nontransactional table, abort the statement if the value occurs in a single-row statement or the first row of a multiple-row statement.

На основе этой инфы приходит в голову мысль, что надо этот режим STRICT_TRANS_TABLES попробовать отключить:

mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
 
mysql> show global variables like 'sql_mode';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+

И таки да, после этого запросы, ранее выполнявшиеся с ошибками, стали отрабатывать нормально, как и было на версии 5.5.13. Чтобы сохранить изменения навсегда, в /etc/my.cnf я добавил в секции [mysqld]

sql-mode="NO_ENGINE_SUBSTITUTION"

Однако далее меня ждала еще одна засада – после рестарта mysql-сервера я опять увидел знакомую картину, несмотря на внесенные в /etc/my.cnf изменения:

mysql> show global variables like 'sql_mode';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| sql_mode                 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------+--------------------------------------------+

Это было непостижимо и удивительно. Я уже и еще раз проверил hostname у сервера, дабы убедиться, что всё ранее сделанное происходило именно на том сервере, где и должно было происходить. Почесав пару минут репу, решил проверить наличие других конфигов mysql-сервера в системе. И таки нашёл один такой в /usr/my.cnf:

$ cat /usr/my.cnf | grep -vE "^#" | sed -r "/^$/ d"
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Вот он, вражеский конфиг, который переопределял моё значение sql_mode! Что самое прикольное, больше ничего в этом конфиге не было. Как будто его специально всунули, чтобы добавить мне головняка. После удаления файла /usr/my.cnf и рестарта mysql-сервера я уже раз и навсегда получил возможность наслаждаться значением sql_mode без STRICT_TRANS_TABLES.

Posted in Howto.

Tagged with .


О нестандартном мышлении

О применении барометров в народном хозяйстве

Хозяйке на заметку: как можно использовать барометр

Однажды к Эрнеcту Резерфорду, президенту Королевской академии, обратился коллега за помощью. Он собирался поставить самую низкую оценку по физике одному из своих студентов, в то время как тот утверждал, что заслуживает высшего балла. Оба — преподаватель и студент — согласились положиться на суждение третьего лица, незаинтересованного арбитра. Выбор пал на Резерфорда. Экзаменационный вопрос гласил: «Объясните, каким образом можно измерить высоту здания с помощью барометра?».

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

Случай был и впрямь сложный, так как ответ был абсолютно полным и верным! С другой стороны, экзамен был по физике, а ответ имел мало общего с применением знаний в этой области. Резерфорд предложил студенту попытаться ответить ещё раз. Дав ему шесть минут на подготовку, он предупредил его, что ответ должен демонстрировать знание физических законов. По истечении пяти минут студент так и не написал ничего в экзаменационном листе. Резерфорд спросил его, сдаётся ли он, но тот заявил, что у него есть несколько решений проблемы, и он просто выбирает лучшее.

Заинтересовавшись, Резерфорд попросил молодого человека приступить к ответу, не дожидаясь истечения отведённого срока. Новый ответ на вопрос гласил: «Поднимитесь с барометром на крышу и бросьте его вниз, замеряя время падения. Затем, используя формулу, вычислите высоту здания».

Тут Резерфорд спросил своего коллегу преподавателя, доволен ли он этим ответом. Тот, наконец, сдался, признав ответ удовлетворительным. Однако студент упоминал, что знает несколько ответов, и его попросили открыть их.

— Есть несколько способов измерить высоту здания с помощью барометра, — начал студент. — Например, можно выйти на улицу в солнечный день и измерить высоту барометра и его тени, а также измерить длину тени здания. Затем, решив несложную пропорцию, определить высоту самого здания.
— Неплохо, — сказал Резерфорд. — Есть и другие способы?
— Да. Есть очень простой способ, который, уверен, вам понравится. Вы берёте барометр в руки и поднимаетесь по лестнице, прикладывая барометр к стене и делая отметки. Сосчитав количество этих отметок и умножив его на размер барометра, вы получите высоту здания. Вполне очевидный метод.
— Если вы хотите более сложный способ, — продолжал он, — то привяжите к барометру шнурок и, раскачивая его, как маятник, определите величину гравитации у основания здания и на его крыше. Из разницы между этими величинами, в принципе, можно вычислить высоту здания. В этом же случае, привязав к барометру шнурок, вы можете подняться с вашим маятником на крышу и, раскачивая его, вычислить высоту здания по периоду прецессии.
— Наконец, — заключил он, — среди множества прочих способов решения данной проблемы лучшим, пожалуй, является такой: возьмите барометр с собой, найдите управляющего и скажите ему: «Господин управляющий, у меня есть замечательный барометр. Он ваш, если вы скажете мне высоту этого здания».

Тут Резерфорд спросил студента, неужели он действительно не знал общепринятого решения этой задачи. Он признался, что знал, но сказал при этом, что сыт по горло школой и колледжем, где учителя навязывают ученикам свой способ мышления, который не всегда приемлет нестандартных решений.

Студента звали Нильс Бор (1885–1962), датский физик, лауреат Нобелевской премии 1922 г.

Posted in Развлекуха.


С 01.04.2014 планируется повышение стоимости регистрации украинских доменов

По информации компании Hosting Ukraine, 1 апреля 2014 года планируется повышение стоимости регистрации, продления и трансфера доменных имен в украинских зонах. Повышение обусловлено резким скачком курса доллара к гривне, из-за которого администраторы доменных зон приняли решение о внеочередной индексации стоимости услуг. В среднем стоимость регистрации увеличится на 15-20%. Точные данные по новым ценам будут публиковаться по мере поступления официальных документов от администраций доменных зон.

Кроме того, с 20 марта 2014 года минимальный срок регистрации доменов .УКР снижается с 10 до 5 лет. Заказать регистрацию доменного имени .УКР может любой желающий, при этом не потребуется предоставлять какие-либо документы, как это было во время приоритетной регистрации. Зарегистрировать домен на 1 год можно будет уже с 4 апреля.

Тем временем, по информации ООО "Хостмастер", домен .UA в феврале возобновил рост. По итогам февраля 2014 года в домене .UA зарегистрировано 681 тыс. доменных имен, по сравнению с январем их количество увеличилось на 0,2%. Таким образом, домен возобновил рост после 4%-ного спада, зафиксированного в минувшем году.

Численность доменных имен второго уровня составила 17,05 тыс. что на 12,6% больше, чем в минувшем году. Прирост замедлился, в минувшем году аналогичный показатель составлял 14,5%. Все остальные имена - третьего уровня, для регистрации доступен 61 публичный домен: 54 географических и 7 общего назначения. Самый массовый публичный домен com.ua насчитывает 315 тыс. доменных имен (рост 13%). Почти 89% доменных имен используются, то есть имеют IP-адрес. Количество доменных адресов в самом популярном географическом публичном домене kiev.ua за год уменьшилось на 5%, - до 61,2 тыс. имен.

Домен Всего, шт. Прирост*, % к Продление, % % от общего количества Наличие IP-адреса, %
01.03.2013 01.02.2014
UA, всего 680887 -3,75 (+11,60) +0,22 (+0,48) - 100 -
UA, 2ld 17049 +12,58 (+14,53) +0,86 (+1,17) 93,79 2,50 89
COM.UA 315317 +13,13 (+14,60) +0,62 (+1,79) 79,22 46,31 89
KIEV.UA 61170 -5,38 (+21) -0,26 (+1,88) 76,9 8,98 88

*В скобках указаны показатели прироста в 2013 году

В феврале общее количество кириллических имен уменьшилось по отношению к январю на 3,3%, до 17,2 тыс.

Домен IDN, шт. Прирост, % к
01.03.2013 01.02.2014
UA, всего 17280 +4,49 -3,35
COM.UA 9325 +4,66 -3,72
KIEV.UA 3412 -6,31 -4,16
IN.UA 1520 +7,11 -1,11

Услуги регистрации доменов в домене .UA предоставляют 176 регистраторов, из которых 118 используют технологию EPP. Суммарная доля рынка, которую по итогам февраля контролируют пять крупнейших регистраторов, составляет 61,5%, не изменившись по сравнению с аналогичным показателем января.

Posted in Разное.

Tagged with .


Обновление прошивки для Supermicro Daughter Card

Однажды я с прискорбием обнаружил, что IPKVM-консоль одного сервера Supermicro не реагирует на нажатия клавиш на клавиатуре. Это было очень некстати, потому что сервер не загружался из-за кривой строчки в /etc/fstab. Добрые люди посоветовали попробовать обновить прошивку. Текущую версию можно посмотреть в разделе "Maintenance" -> "Device Information":

Supermicro daughter card версия прошивки

Как посмотреть версию прошивки Supermicro daughter card

На сайте www.supermicro.com найти нужную прошивку оказалось делом весьма нетривиальным. Для начала я через dmidecode посмотрел какая же там установлена материнская плата. Получилось вот такое:

# dmidecode | grep 'Base Board Information' -A 4
Base Board Information
        Manufacturer: Supermicro
        Product Name: X7DBN
        Version: PCB Version
        Serial Number: 0123456789

По модели "X7DBN" на сайте ничего путного найти не удалось. Все поисковые формы только выводили на BIOS, что мне совсем не требовалось. Наконец после получаса блужданий каким-то чудом мне удалось найти вот этот файл: ftp://ftp.supermicro.com/Firmware/SIMxx/ugsim164.bin (причем чисто интуитивно, ориентируясь на циферки, похожие на 160 (так как текущая версия прошивки 01.60.00). Попытка загрузить его через пункт меню "Maintenance" -> "Update Firmware" привела к появлению такого сообщения:

Firmware Update
Current version:  01.60.00 (Build 5420) / Feb-12-2009-20-00
New version:  01.64.00 (Build 5420) / Nov-05-2010-18-40
 
This may take some minutes.
Please do NOT power off the device while the update is in progress!
After a successful update, the device will be reset automatically.

И далее, после перезагрузки IPMI пункт меню "Device Information" показывал уже новую версию прошивки:

Апгрейд прошивки Supermicro Daughter Card

Успешное обновление прошивки

И, что самое приятное, после обновления нормально заработала консоль – нажатия клавиш на клавиатуре успешно передавались и обрабатывались, что позволило мне загрузиться в single mode и отредактировать /etc/fstab.

Надеюсь, для кого-то эта статья окажется полезной.

Posted in Howto.