MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

Progressio non obstat, ideo rationes ad upgrade recentiores versiones MySQL magis magisque compelluntur. Haud ita pridem, in una inceptis nostris, tempus erat fovere Percona Server 5.7 ligaturas renovare ad versionem 8 . Haec omnia in tribunali Ubuntu Linux 16.04 contigerunt. Quomodo talem operationem praestare minimi temporis downtime et quas difficultates in renovatione - lege in hoc articulo offendimus.

Training

Quaevis renovatio servo datorum verisimilis est cum reconfiguratione datorum coniungitur: mutationes in requisitis pro limitibus rationum subsidiorum et correctionis datorum configorum quae purgandae sunt normarum iam datarum.

Ante adaequationem, definite ad documenta officialia referemus:

Actio consilium capiamus:

  1. Recta configuratione lima sublatis outdated praescriptiones.
  2. Reprehendo convenientiae cum utilitates.
  3. Update servo databases insertis ad sarcina percona-server-server.
  4. Renova dominum eadem sarcina.

Intueamur quodlibet consilium et vide quid possit errare.

MAGNUS! Ratio adaequationis a MySQL botrum in Galera fundatum habet suas argutias quae in articulo non sunt descriptae. Hac eruditione uti non debes.

Pars I: Reprehendo configs

MySQL remotum est in versione VIII " query_cache. Nam erat declaravit obsoleta rursus in versione 5.7, nunc omnino delevit. Praecepta igitur adiuncta removere necesse est. Et ad investigationes cachectas instrumenta externa uti nunc potes, exempli gratia, ProxySQL.

Etiam in aboutcong praescriptiones superductae sunt innodb_file_format. Si in MySQL 5.7 forma InnoDB legere potuit, tunc 8 versio iam operatur solum Barracuda forma.

Effectus noster est remotio sequentium praescriptionum;

  • query_cache_type, query_cache_limit ΠΈ query_cache_size;
  • innodb_file_format ΠΈ innodb_file_format_max.

Ad reprimendam, imaginem Docker Servo Perconae utemur. Ponemus servo aboutconfig in indicem mysql_config_testet iuxta eam directoria pro notitia et tigna creabimus. Percona-server configuration test exemplum:

mkdir -p {mysql_config_test,mysql_data,mysql_logs}
cp -r /etc/mysql/conf.d/* mysql_config_test/
docker run  --name some-percona -v $(pwd)/mysql_config_test:/etc/my.cnf.d/  -v $(pwd)/mysql_data/:/var/lib/mysql/ -v $(pwd)/mysql_logs/:/var/log/mysql/ -e MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD} -d percona:8-centos

Linea ima: vel in Docker trabes vel in indicem cum tignis - figis tuis fretus - fasciculus patebit in quo normae problematicae describentur.

Hic est quod habuimus;

2020-04-03T12:44:19.670831Z 0 [Warning] [MY-011068] [Server] The syntax 'expire-logs-days' is deprecated and will be removed in a future release. Please use binlog_expire_logs_seconds instead.
2020-04-03T12:44:19.671678Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2020-04-03T12:44:19.671682Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.

Ita, adhuc opus est ut modum transumptorum instare ac directivum iamnonum restituamus expire-logs-days.

Pars II: Reprehendo officinae opus

Documenta renovatio continet 2 utilitates ad reprimendam datorum convenientiam. Eorum usus adiuvat administratorem compages existentium inspiciendo convenientiam.

Incipiamus cum classic mysqlcheck utilitate. Tantum currere:

mysqlcheck -u root -p --all-databases --check-upgrade

Si nullae quaestiones reperiuntur, utilitas in codice 0 erit:

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

Praeterea utilitas praesto est in recentioribus versionibus MySQL mysql-testa (In casu Perconae hoc est sarcina percona-mysql-shell). Substitutio est clientis classici mysql et munera clientis, editoris SQL codicem et instrumenta administrationis MySQL componit. Ut servo antequam adaequationis reprimatur, sequentia mandata per illud currere potes:

mysqlsh -- util check-for-server-upgrade { --user=root --host=1.1.1.1 --port=3306 } --config-path=/etc/mysql/my.cnf

Commentaria hic recepimus:

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

In genere, nihil criticum tantum admonitiones circa modum scriptionis (infra vide). Effectus altiore supplicium:

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

Statuimus ut renovatio sine quaestionibus exiret.

Notatio circa admonitiones supra difficultates cum scriptiones indicandas. Ita est, utf-8 in MySQL usque in praesentem diem non "verum" utf-8", cum tantum 3 bytes pro 4. in MySQL 8 repositum sit, hoc tandem est placuit figere illud: alias utf8 mox ad coding utf8mb4et columnae veteres in tabulis fient utf8mb3. Praeterea modum translitterandi utf8mb3 tolletur, sed non in hac remissione. Ideo decrevimus ut iam in currenti DBMS institutionem adaequationis eam descriptam corrigere decrevimus.

Pars III: Servo Updates

Quid errare potuit, cum tam callidum consilium est?

Sicut supra dictum est, officialis documenta tegit eventum adaequationis MySQL servers cum replicas. Linea infima est ut primum omnes replicas (servos) renovare debeas, quia MySQL 8 ex versione magistri replicare potest 5.7. Quaedam difficultas consistit in eo quod modus utimur dominus <-> masterquando dominus remotus est in modo tantum legere. Hoc est, re vera, pugna negotiatio ad unum centrum datae, et secunda tergum unum est.

Haec topologia similis est:

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

In update debet incipere replicas mysql imaginem dc 2, mysql dominus dc 2 ΠΈ mysql replica dc 1, ac finem cum domino mysql dc 1 servo. Ut certior fieret, machinis virtualibus substiterunt, snapshots ex eis sumpserunt, ac statim ante renovationem replicationem cum mandato restiterunt. STOP SLAVE. Reliquum update sic videtur:

  1. Nos sileo unamquamque imaginem addendo 3 optiones configs: skip-networking, skip-slave-start, skip-log-bin. Re vera adaequationis datorum ligna binaria cum updates to tabularum rationum generat. Praescriptiones hae spondent nullas mutationes applicationis notitiarum in datorum esse, et informationes de tabulis systematis adaequationis in binariis lignis non comprehendi. Hoc problemata repetendi replicatio vitabit.
  2. Installing in sarcina percona-server-server. Gravis est notare in versione MySQL 8 non vos postulo ut run imperium mysqlupgrade cum servo update.
  3. Post prosperum initium, denuo servo sileo β€” sine parametris quae in primo paragrapho additae sunt.
  4. Facimus quod replicatio feliciter operatur: check SHOW SLAVE STATUS et vide tabulas cum calculis in applicatione datorum renovari.

Res satis simplex spectat: the dev update was successful. Bene, tuto potes nocturnam renovationem ad productionem ponendam esse.

Tristitia nulla fuit - prod . nos renovavit

Attamen translatio felicis experientiae ad productionem dev non sine admiratione fuit.

Fortunate, ipsa processus renovationis cum replicationibus incipit, ut cum difficultatibus occurreremus, opus intermisimus et imaginem e snapshoti restituimus. Investigatio quaestionum in crastinum dilata est. Haec omnia in entries continebat:

2020-01-14T21:43:21.500563Z 2 [ERROR] [MY-012069] [InnoDB] table: t1 has 19 columns but InnoDB dictionary has 20 columns
2020-01-14T21:43:21.500722Z 2 [ERROR] [MY-010767] [Server] Error in fixing SE data for db1.t1
2020-01-14T21:43:24.208365Z 0 [ERROR] [MY-010022] [Server] Failed to Populate DD tables.
2020-01-14T21:43:24.208658Z 0 [ERROR] [MY-010119] [Server] Aborting

Investigantur tabularia variarum tabularum in Google ad intellegendum deductae hoc problema ob MySQL bug. Quamvis hoc potius utilitas cimex mysqlcheck ΠΈ mysqlsh.

Evenit ut MySQL modo mutatam repraesentant notitias pro agris decimalibus (int, tinyint, etc.), sic mysql-server diverso modo utitur ut eos congreget. Si database initio in versione 5.5 vel 5.1, tum ad 5.7 renovatum est, tum opus est OPTIMIZE aliquot tabulas. Tunc MySQL tabellas notitias renovabit, eas ad formam repositionis hodiernae transferens.

Hoc etiam cum utilitate reprehendo mysqlfrm:

mysqlfrm --diagnostic -vv /var/lib/mysql/db/table.frm
...
 'field_length': 8,
  'field_type': 246, # Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ поля
  'field_type_name': 'decimal',
  'flags': 3,
  'flags_extra': 67,
  'interval_nr': 0,
 'name': 'you_deciaml_column',
...

si field_type Si 0 aequalem habes, vetus genus in mensa adhibetur - exsequi debes OPTIMIZE. Sed si pretium 246 est, iam novum genus habes. Plura de generibus inveniri possunt code.

Praeterea, in hoc cimex Alteram rationem possibilem consideramus, quae praeterivimus: absentia tabularum InnoDB in tabula systematis INNODB_SYS_TABLESPACESsi tabulae factae sunt in versione 5.1. Ad difficultates evitare cum adaequationis, uti potes attachiatus SQL scriptor.

Cur tales quaestiones in dev non habemus? Datorum periodice ibi exscriptus est a productione - sic; mensae recreantur.

Infeliciter, in magna database re laborante, universale iustum sumere et facere non poteris OPTIMIZE. percona-toolkit hic adiuvabit: utilitas mutationis pt-onlineae optima est ad operationem online OPTIMIZE.

Et vidi sic updated consilium:

  1. Optimize omnes tabulae.
  2. Renovare databases.

Ad eam reprimendam simulque renovationem temporis inveniendam, unam ex replicationibus debilitavimus et pro omnibus tabulis tale mandatum cucurrimus;

pt-online-schema-change --critical-load Threads_running=150 --alter "ENGINE=InnoDB" --execute --chunk-size 100 --quiet --alter-foreign-keys-method auto h=127.0.0.1,u=root,p=${MYSQL_PASSWORD},D=db1,t=t1

Tabulae renovantur sine longis cincinnis, ex eo quod utilitas novam mensam temporalem creat, in quam datae e tabula principali effinguntur. Tempore, cum ambae tabulae identicae sunt, prima mensa clausa est et una cum nova reponitur. In nostro casu, probatio currere ostendit futurum esse circiter diem ad omnes tabulas renovandas, sed notitias describendas nimium onus in orbe terrarum effecit.

Et ad hoc evitandum, in productione praecepti rationem addidimus --sleep cum valore 10 - hic modulus longitudinis moram accommodat postquam massam notitiarum ad novam mensam transferens. Hoc modo onus minuere potes si applicationis cursus actualis temporis responsionis postulat.

Optimizatione peracta, renovatio valuit.

... sed non omnino!

Intra dimidiam horam post renovationem, client cum problemate venit. Database multum mirum in modum laboraverunt: periodice inceperunt nexum resets. Hoc est quod in vigilantia videbatur:

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

Screenshot graphium serratum ostendit ex eo quod aliqui ex MySQL servo stamina periodice cum errore crepuerunt. Errores apparuerunt in applicatione:

[PDOException] SQLSTATE[HY000] [2002] Connection refused

Celeri ligna inspectio revelavit mysqld daemonem non posse consequi debitas facultates ex systemate operante. Dum errores voluptua, in systemate deteximus "Pupilli" apparmor consilium files:

# dpkg -S /etc/apparmor.d/cache/usr.sbin.mysqld
dpkg-query: no path found matching pattern /etc/apparmor.d/cache/usr.sbin.mysqld
# dpkg -S /etc/apparmor.d/local/usr.sbin.mysqld
dpkg-query: no path found matching pattern /etc/apparmor.d/local/usr.sbin.mysqld
# dpkg -S /etc/apparmor.d/usr.sbin.mysqld
mysql-server-5.7: /etc/apparmor.d/usr.sbin.mysqld
# dpkg -l mysql-server-5.7
rc  mysql-server-5.7 5.7.23-0ubuntu0.16.04.1      amd64

Haec fasciculata cum upgrading ad MySQL 5.7 abhinc annos creata sunt et ad sarcinam remotam pertinent. Deletis lima ac restarting apparmor ministerium problema solvendum:

systemctl stop apparmor
rm /etc/apparmor.d/cache/usr.sbin.mysqld
rm /etc/apparmor.d/local/usr.sbin.mysqld
rm /etc/apparmor.d/usr.sbin.mysqld
systemctl start apparmor

Ad summam:

Quaevis, etiam simplicissima operatio, ad difficultates inopinatas ducere potest. Atque etiam in cogitatione bene cogitata spem exitum non semper spondet. Nunc, quaevis renovatio consilia turmae nostrae etiam includere mandatarium purgationem imaginum superfluarum quae ex recentibus actionibus apparuisse poterant.

Et cum hac non admodum professionalis graphicae creationis, ingentes gratias ago tibi Perconae ob excellentes fructus suos!

MySQL adaequationis (Percona Server) ab 5.7 ad 8.0

PS

Lege etiam in nostro diario:

Source: www.habr.com