Pregătirea pentru upgrade la mysql 5

Plasarea serverelor în centre de date fiabile din Europa. Deschideți serverul VPS / VDS bazat pe cloud pe SSD-uri rapide în 1 minut!

Cel mai bun Gazduire:
- protejează datele de accesul nedorit într-un centru de date european protejat
- va accepta plata cel puțin în taxe.
- vă va permite să vă distribuiți distribuția

- protecția împotriva atacurilor DDos
- copie de rezervă gratuită
- Uptime 99.9999%
- Centrul de date - TIER III
- furnizor - TIER I

Sprijinim în limba rusă 24/7/365 Lucrăm cu persoane juridice și persoane fizice. Acum aveți nevoie de 24 nuclee și 72 GB de memorie RAM. Vă rog!

Tarifele noastre avantajoase vor dovedi că nu ați știut încă ieftinul de găzduire!

Minute: selectați configurația, plătiți și CMS de pe VPS este gata.
Banii înapoi - 30 de zile!

Carduri bancare, e-valută, prin intermediul terminalelor Qiwi, Webmoney, PayPal, Novoplat etc.

Puneți o întrebare la sprijinul 24/7/365

Găsiți răspunsuri în baza noastră de date și cunoașteți recomandările

Ofertă de la 8host.com

Pregătirea pentru upgrade la mysql 5

În curând se va deschide o nouă versiune a bazei de date populare deschise, MySQL 5.7, care deschide o mai mare scalabilitate. De exemplu, MySQL 5.7 scară liniar pe serverele cu 48 de nuclee. Cu toate acestea, această versiune necesită configurare preliminară a MySQL 5.6 pentru actualizare.

server de performanță de vârf MySQL 5.7 - peste 640K RPS și interfața memcached interacționează direct cu mecanismul de stocare InnoDB, capabil să reziste mai mult de 1,1 milioane de practica întrebări pe secundă.

Dar, înainte de a începe mysql_upgrade, trebuie să pregătiți sistemul, care va fi discutat în acest manual.

Integritatea datelor

Integritatea datelor din MySQL 5.7 a crescut semnificativ. Anterior, sistemul MySQL a ajustat valorile greșite la cea mai apropiată valoare corectă posibilă, însă în funcție de noile setări implicite, va reveni la o eroare.

Mai jos sunt 5 exemple de interogări care trebuie schimbate pentru MySQL 5.7 pentru a funcționa corect.

1: Adăugați o valoare negativă într-o coloană nesemnată

Creați un tabel cu o coloană nesemnată

CREATE TABLE test (
id int unsigned
);

Introduceți o valoare negativă.

Comportarea versiunilor anterioare:

INSERTAȚI ÎN TESTUL VALORILOR (-1);
Interogare OK, 1 rând afectat, 1 avertisment (0,01 sec)

Comportamentul MySQL 5.7:

2: Diviziunea este zero

Creați un tabel de testare:

CREATE TABLE test2 (
id int unsigned
);

Încercați să împărțiți cu zero.

Comportarea versiunilor anterioare:

INSERT INTO test2 VALOES (0/0);
Interogare OK, 1 rând afectat (0.01 sec)

Comportamentul MySQL 5.7:

3: Introducerea unui șir de 20 de caractere într-o coloană pentru 10 caractere

Creați un tabel prin limitarea numărului de caractere dintr-una din coloane la 10.

CREATE TABLE test3 (
un varchar (10)
);

Încercați să inserați o linie mai lungă în ea.

Comportarea versiunilor anterioare:

INSCRIEȚI ÎN TEST3 VALORI ('abcdefghijklmnopqrstuvwxyz');
Interogare OK, 1 rând afectat, 1 avertisment (0,00 sec)

Comportamentul MySQL 5.7:

4: Setarea datei zero în coloana dată și oră

Creați un tabel de testare cu coloana datetime:

CREATE TABLE test3 (
o dată
);

Setați data la 0000-00-00 00:00:00.

Comportarea versiunilor anterioare:

INSCRIEȚI ÎN TEST3 VALORI ('0000-00-00 00:00:00');
Interogare OK, 1 rând afectat, 1 avertisment (0,00 sec)

Comportamentul MySQL 5.7:

5: Utilizând GROUP BY și selectând o coloană ambiguă

Aceasta se întâmplă atunci când descrierea nu face parte din instrucțiunea GROUP BY și nu utilizează o funcție agregată (de exemplu, MIN sau MAX).

Comportarea versiunilor anterioare:

SELECT id, invoice_id, descriere FROM invoice_line_items GROUP BY invoice_id;
+----+------------+-------------+
| | id | invoice_id | descriere |
+----+------------+-------------+
| | 1 | 1 | Șosete noi
| | 3 | 2 | Pantofi |
| | 5 | 3 | Tie |
+----+------------+-------------+
3 rânduri în set (0.00 sec)

Comportamentul MySQL 5.7:

Comportamentul lui sql_mode

În MySQL, fiecare comportament afișat în secțiunea anterioară depinde de așa-numitul mecanism sql_mode.

  • ONLY_FULL_GROUP_BY
  • STRICT_TRANS_TABLES
  • NO_ENGINE_SUBSTITUTION
  • NO_AUTO_CREATE_USER

În plus, modul STRICT_TRANS_TABLES (sau modul strict) a devenit mai stricte și include acum moduri de comportament ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE și NO_ZERO_IN_DATE.

Sfaturi privind actualizarea

Vești bune pentru utilizatorii celor mai recente versiuni ale WordPress, Drupal și Magento - nu trebuie să faceți nimic! Aceste aplicații știu deja despre sql_mode, atunci când vor încărca MySQL, vor ajusta automat setările.

Utilizatorii care dezvoltă noi aplicații sunt sfătuiți să repare setările MySQL 5.6 pentru a sprijini sql_mode pe cont propriu.

Utilizatorii a căror aplicare este în stadiul de producție ar trebui să efectueze o reglare graduală și mai aprofundată. Iată câteva sfaturi utile:

  • Lista albă (sau lista albă). Activați noua opțiune implicită sqlmode în noile părți ale cererii. De exemplu, sarcina cron dezvoltată pentru a restabili cache-ul de date poate include sqlmode data viitoare când vă conectați la MySQL. Codul aplicației existente poate utiliza comportamentul specificat inițial.
  • Lista neagră (lista neagră). După ce ați reușit să realizați unele succese în conversia aplicațiilor, încercați să faceți o nouă funcție sqlmode standard pentru server. în timp ce aplicațiile existente pot folosi comportamentul inițial, schimbându-l la următoarea conectare la MySQL. În plus, pentru a evita erorile, MySQL acceptă modificatorul IGNORE pe o bază individuală. De exemplu:

INSCRIEȚI IGNORE ÎN MY_ABLE. `

  • Dezvoltare treptată. Gestionarea aplicației dvs., puteți implementa funcția sql_mode pentru anumiți utilizatori. Se recomandă ca utilizatorii interni să aibă permisiunea de a efectua teste beta.

1: Găsiți operatori incompatibili care generează avertismente sau erori

Mai întâi trebuie să vă asigurați că nici una din cererile curente nu generează erori sau avertismente. Acest lucru este foarte important, deoarece MySQL 5.7 răspunde altfel la unele solicitări (avertizare în MySQL 5.6 - eroare în MySQL 5.7).

MySQL oferă o funcție de diagnostic performance_schema, care este activată în mod implicit în MySQL 5.6 și mai târziu. Cu ajutorul funcției performance_schema, puteți scrie o interogare care returnează toți operatorii care au cauzat eroarea sau avertismentul.

O interogare pentru a afișa operatorii care au provocat eroarea sau avertismentul (MySQL 5.6+):

SELECT
`DIGEST_TEXT` AS 'interogare`,
`SCHEMA_NAME` AS`db`,
`COUNT_STAR` AS` exec_count`,
"SUM_ERRORS" AS "erori"
(ifnull (`SUM_ERRORS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `error_pct`,
Avertismente SUM_WARNINGS AS,
(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`
DE LA
performance_schema.events_statements_summary_by_digest
UNDE
(( `SUM_ERRORS` gt; 0) SAU ("SUM_WARNINGS") gt; 0))
COMANDA DE LA
`SUM_ERRORS` DESC,
SUM_WARNINGS DESC;

Cerere de afișare a operatorilor care generează erori (MySQL 5.6+):

SELECT
`DIGEST_TEXT` AS 'interogare`,
`SCHEMA_NAME` AS`db`,
`COUNT_STAR` AS` exec_count`,
"SUM_ERRORS" AS "erori",
(Ifnull (( `SUM_ERRORS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `error_pct`,
Avertismente SUM_WARNINGS AS,
(Ifnull (( `SUM_WARNINGS` / nullif (` COUNT_STAR`, 0)), 0) * 100) AS `warning_pct`,
`FIRST_SEEN` AS` first_seen`,
`LAST_SEEN` AS 'last_seen`,
`DIGEST` AS` diger`
DE LA
performance_schema.events_statements_summary_by_digest
UNDE
`SUM_ERRORS` gt; 0
COMANDA DE LA
`SUM_ERRORS` DESC,
SUM_WARNINGS DESC;

2: Schimbarea comportamentului MySQL 5.6 pe MySQL 5.7

De asemenea, puteți rula un test de testare MySQL 5.6 schimbând comportamentul DBMS în MySQL 5.7.

Morgan Tocker (Morgan Tocker) din echipa MySQL dezvoltă proiectul GitHub. unde puteți găsi un exemplu de fișier de configurare pentru modificarea comportamentului MySQL 5.6.

Folosind setările standard MySQL 5.7 din MySQL 5.6 vă permite să testați performanța aplicațiilor și să eliminați dependența de comportamente mai puțin stricte.

Acest fișier este destul de scurt:

3: Schimbarea modului sql_mode (opțional)

Uneori este nevoie să testați sau să actualizați serverul în mai multe etape. În loc să suprimați complet fișierul de configurare al serverului MySQL, îl puteți schimba pentru o sesiune. De exemplu:

CREATE TABLE sql_mode_test (un int);

Setarea modului No SQL:

setați sql_mode = '';
INSERTAȚI ÎN sql_mode_test (a) VALUES (0/0);
Interogare OK, 1 rând afectat (0.01 sec)

Setarea modului strict SQL:

concluzie

În acest stadiu, sistemul MySQL este gata să fie actualizat la MySQL 5.7. Manualul de actualizare oficială poate fi găsit la acest link.

MySQL 5.7 reprezintă un pas important în ceea ce privește integritatea datelor și configurațiile standard ale aplicațiilor moderne.

Articole similare