Підготовка до оновлення до mysql 5

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Пропозиція від 8host.com

Підготовка до оновлення до mysql 5

Скоро вийде в світ нова версія популярної відкритої СУБД, MySQL 5.7, яка відкриває більш широкі можливості масштабованості. Наприклад, MySQL 5.7 масштабується лінійно на 48-ядерних серверах. Однак ця версія вимагає попереднього налаштування MySQL 5.6 до оновлення.

Пікова продуктивність сервера MySQL 5.7 - понад 640K запитів в секунду, а інтерфейс memcached, безпосередньо взаємодіє з механізмом зберігання InnoDB, здатний витримати більше 1,1 млн запитів в секунду.

Але перш ніж запустити mysql_upgrade, потрібно підготувати систему, про що і піде мова в даному керівництві.

Цілісність даних

Цілісність даних в MySQL 5.7 значно збільшилася. Раніше система MySQL регулювала неправильні значення до бліжайшго можливого правильного значення, але, згідно з новим стандартних налаштувань, вона буде замість цього повертати помилку.

Нижче наведено 5 прикладів запитів, які потрібно змінити для коректної роботи MySQL 5.7.

1: Внесення від'ємного значення в стовпець без знака

Створіть таблицю зі стовпцем unsigned

CREATE TABLE test (
id int unsigned
);

Внесіть від'ємне значення.

Поведінка попередніх версій:

INSERT INTO test VALUES (-1);
Query OK, 1 row affected, 1 warning (0.01 sec)

Поведінка MySQL 5.7:

2: Розподіл на нуль

Створіть тестову таблицю:

CREATE TABLE test2 (
id int unsigned
);

Спробуйте поділити на нуль.

Поведінка попередніх версій:

INSERT INTO test2 VALUES (0/0);
Query OK, 1 row affected (0.01 sec)

Поведінка MySQL 5.7:

3: Внесення рядки в 20 знаків в стовпець для 10 знаків

Створіть таблицю, обмеживши кількість знаків одного зі стовпців до 10.

CREATE TABLE test3 (
a varchar (10)
);

Спробуйте вставити в нього більш довгий рядок.

Поведінка попередніх версій:

INSERT INTO test3 VALUES ( 'abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)

Поведінка MySQL 5.7:

4: Установка нульової дати в стовпці дати і часу

Створіть тестову таблицю зі стовпцем datetime:

CREATE TABLE test3 (
a datetime
);

Встановіть дату 0000-00-00 00:00:00.

Поведінка попередніх версій:

INSERT INTO test3 VALUES ( '0000-00-00 00:00:00');
Query OK, 1 row affected, 1 warning (0.00 sec)

Поведінка MySQL 5.7:

5: Використання GROUP BY і вибір неоднозначного стовпчика

Таке трапляється, коли опис не є частиною оператора GROUP BY і до нього не застосовується агрегатна функція (наприклад, MIN або MAX).

Поведінка попередніх версій:

SELECT id, invoice_id, description FROM invoice_line_items GROUP BY invoice_id;
+----+------------+-------------+
| id | invoice_id | description |
+----+------------+-------------+
| 1 | 1 | New socks |
| 3 | 2 | Shoes |
| 5 | 3 | Tie |
+----+------------+-------------+
3 rows in set (0.00 sec)

Поведінка MySQL 5.7:

поведінка sql_mode

В MySQL кожне поведінку, продемонстроване в попередньому розділі, залежить від так званого механізму sql_mode.

  • ONLY_FULL_GROUP_BY
  • STRICT_TRANS_TABLES
  • NO_ENGINE_SUBSTITUTION
  • NO_AUTO_CREATE_USER

Крім того, режим STRICT_TRANS_TABLES (або строгий режим) став ще більш суворим і тепер включає в себе поведінку режимів ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE і NO_ZERO_IN_DATE.

Поради по оновленню

Хороші новини для користувачів останніх версій WordPress, Drupal та Magento - вам не потрібно нічого робити! Ці програми вже відомо про sql_mode, при завантаженні MySQL вони автоматично відкоригують свої настройки.

Користувачам, які розробляють нові програми, рекомендується виправити налаштування MySQL 5.6 для підтримки sql_mode самостійно.

Користувачі, чиє додаток знаходиться на стадії виробництва, повинні виконати поступову і більш ретельну настройку. Ось кілька корисних порад:

  • Whitelist (або білий список). Увімкніть нову стандартну опцію sqlmode в нові частини програми. Наприклад, що розробляється cron job для відновлення кеша даних може включити sqlmode при наступному підключенні до MySQL. Існуючий код програми може використовувати поведінку, задане спочатку.
  • Blacklist (чорний список). Досягнувши певних успіхів у перетворенні додатків, спробуйте зробити нову функцію sqlmode стандартної для сервера. при цьому діючі додатки можуть використовувати початкове поведінка, змінивши його під час наступного підключення до MySQL. Крім того, щоб уникнути помилок MySQL підтримує модифікатор IGNORE на індивідуальній основі. Наприклад:

INSERT IGNORE INTO my_table. `

  • Поступове розгортання. Керуючи своїм додатком, ви можете впровадити функцію sql_mode для певних користувачів. Рекомендується дозволити внутрішнім користувачам виконувати бета-тестування.

1: Пошук несумісних операторів, які генерують попередження або помилки

Спочатку потрібно переконатися, що жоден з поточних запитів не генерує помилок або попереджень. Це дуже важливо, оскільки MySQL 5.7 інакше реагує на деякі запити (попередження в MySQL 5.6 - помилка в MySQL 5.7).

MySQL надає performance_schema - функцію діагностики, яка включена за замовчуванням в MySQL 5.6 і вище. За допомогою performance_schema можна написати запит, який повертає всі оператори, які викликали помилку або попередження.

Запит для відображення операторів, які стали причиною помилки або попередження (MySQL 5.6+):

SELECT
`DIGEST_TEXT` AS` query`,
`SCHEMA_NAME` AS` db`,
`COUNT_STAR` AS` exec_count`,
`SUM_ERRORS` AS` errors`,
(Ifnull (( `SUM_ERRORS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `error_pct`,
`SUM_WARNINGS` AS` warnings`,
(Ifnull (( `SUM_WARNINGS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `warning_pct`,
`FIRST_SEEN` AS` first_seen`,
`LAST_SEEN` AS` last_seen`,
`DIGEST` AS` digest`
FROM
performance_schema.events_statements_summary_by_digest
WHERE
(( `SUM_ERRORS` gt; 0) OR ( `SUM_WARNINGS` gt; 0))
ORDER BY
`SUM_ERRORS` DESC,
`SUM_WARNINGS` DESC;

Запит для відображення операторів, які генерують помилки (MySQL 5.6+):

SELECT
`DIGEST_TEXT` AS` query`,
`SCHEMA_NAME` AS` db`,
`COUNT_STAR` AS` exec_count`,
`SUM_ERRORS` AS` errors`,
(Ifnull (( `SUM_ERRORS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `error_pct`,
`SUM_WARNINGS` AS` warnings`,
(Ifnull (( `SUM_WARNINGS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `warning_pct`,
`FIRST_SEEN` AS` first_seen`,
`LAST_SEEN` AS` last_seen`,
`DIGEST` AS` digest`
FROM
performance_schema.events_statements_summary_by_digest
WHERE
`SUM_ERRORS` gt; 0
ORDER BY
`SUM_ERRORS` DESC,
`SUM_WARNINGS` DESC;

2: Зміна поведінки MySQL 5.6 на MySQL 5.7

Можна також виконати тестовий запуск MySQL 5.6, змінивши поведінку СУБД на MySQL 5.7.

Морган Токер (Morgan Tocker) з команди MySQL розробляє проект GitHub. де можна знайти приклад конфігураційного файлу для зміни поведінки MySQL 5.6.

Використання стандартних налаштувань MySQL 5.7 в MySQL 5.6 дозволяє протестувати роботу програми та усунути його залежність від менш суворого поведінки.

Цей файл досить короткий:

3: Зміна режиму sql_mode (опціонально)

Іноді виникає необхідність тестувати або оновлювати сервер в кілька етапів. Замість того щоб повністю переписувати файл конфігурації сервера MySQL, можна змінити його для однієї сесії. Наприклад:

CREATE TABLE sql_mode_test (a int);

Установка режиму No SQL:

set sql_mode = '';
INSERT INTO sql_mode_test (a) VALUES (0/0);
Query OK, 1 row affected (0.01 sec)

Установка суворого режиму SQL:

висновок

На даному етапі система MySQL готова до оновлення до версії MySQL 5.7. Офіційний мануал по оновленню можна знайти за цим посиланням.

MySQL 5.7 - це великий крок вперед щодо цілісності даних і стандартних конфігурацій сучасних додатків.

Схожі статті