Chan eil adhartas a’ seasamh fhathast, agus mar sin tha na h-adhbharan airson ùrachadh gu na dreachan as ùire de MySQL a’ sìor fhàs làidir. O chionn ghoirid, ann am fear de na pròiseactan againn, bha an t-àm ann na cruinneachaidhean comhfhurtail Percona Server 5.7 ùrachadh gu dreach 8. Thachair seo uile air àrd-ùrlar Ubuntu Linux 16.04. Mar a nì thu leithid de dh ’obair le glè bheag de dh’ ùine downt agus dè na duilgheadasan a choinnich sinn rè an ùrachaidh - leugh san artaigil seo.
Ullachadh
Tha e coltach gu bheil ùrachadh sam bith air frithealaiche an stòr-dàta co-cheangailte ri ath-dhealbhadh stòr-dàta: atharrachaidhean ann an riatanasan airson crìochan air goireasan siostaim agus ceartachadh rèiteachaidhean stòr-dàta a dh’ fheumar a ghlanadh bho stiùiridhean seann-fhasanta.
Mus tèid ùrachadh, bheir sinn iomradh gu cinnteach air na sgrìobhainnean oifigeil:
Ceartaich faidhlichean rèiteachaidh le bhith a’ toirt air falbh seann stiùiridhean.
Thoir sùil air co-chòrdalachd le goireasan.
Ùraich stòran-dàta tràillean le bhith a’ stàladh a’ phacaid percona-server-server.
Ùraich am maighstir leis an aon phacaid.
Bheir sinn sùil air gach puing den phlana agus faic dè dh’ fhaodadh a dhol ceàrr.
CUDROMACH! Tha an dòigh-obrach airson cruinneachadh MySQL ùrachadh stèidhichte air Galera a’ toirt a-steach na feartan aige fhèin nach eil air am mìneachadh san artaigil. Cha bu chòir dhut an stiùireadh seo a chleachdadh sa chùis seo.
Pàirt 1: Thoir sùil air configs
Chaidh MySQL a thoirt air falbh ann an dreach 8 query_cache. Gu fìrinneach bha e air a chur an ceill air ais ann an dreach 5.7, ach a-nis air a sguabadh às gu tur. A rèir sin, feumar na stiùiridhean co-cheangailte a thoirt air falbh. Agus airson iarrtasan tasgadan faodaidh tu a-nis innealan taobh a-muigh a chleachdadh - mar eisimpleir, ProxySQL.
Cuideachd anns an config bha seann stiùiridhean mu dheidhinn innodb_file_format. Ma bha e comasach ann am MySQL 5.7 cruth InnoDB a thaghadh, tha an tionndadh 8th ag obair mu thràth a-mhàin le cruth Barracuda.
Is e an toradh againn toirt air falbh na stiùiridhean a leanas:
query_cache_type, query_cache_limit и query_cache_size;
innodb_file_format и innodb_file_format_max.
Gus sgrùdadh a dhèanamh, cleachdaidh sinn an ìomhaigh Docker de Percona Server. Cuiridh sinn rèiteachadh an fhrithealaiche san eòlaire mysql_config_test, agus ri thaobh cruthaichidh sinn clàran airson dàta agus logaichean. Eisimpleir deuchainn rèiteachaidh Percona-server:
Gu h-ìosal: an dàrna cuid ann an logaichean Docker no san eòlaire leis na logaichean - a rèir na rèiteachaidhean agad - nochdaidh faidhle anns an tèid na stiùiridhean duilgheadas a mhìneachadh.
Seo na bh’ againn:
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.
Mar sin, dh'fheumadh sinn fhathast na còdachaidhean obrachadh a-mach agus an seann stiùireadh a chuir na àite expire-logs-days.
Pàirt 2: Thoir sùil air ionadan-obrach
Anns na sgrìobhainnean ùrachaidh tha 2 ghoireas airson sgrùdadh a dhèanamh air an stòr-dàta airson co-chòrdalachd. Bidh an cleachdadh a’ cuideachadh leis an rianaire sgrùdadh a dhèanamh air co-chòrdalachd an structair dàta a th’ ann.
Feuch an tòisich sinn leis a’ ghoireas mysqlcheck clasaigeach. Dìreach ruith:
Mura lorgar duilgheadas, fàgaidh an goireas le còd 0:
A bharrachd air an sin, tha goireas ri fhaighinn ann an dreachan ùr-nodha de MySQL mysql-slige (a thaobh Percona is e seo am pasgan percona-mysql-shell). Tha e na àite an neach-dèiligidh mysql clasaigeach agus bidh e a’ cothlamadh gnìomhan teachdaiche, deasaiche còd SQL agus innealan rianachd MySQL. Gus sùil a thoirt air an fhrithealaiche mus ùraich thu e, faodaidh tu na h-òrdughan a leanas a ruith troimhe:
San fharsaingeachd, chan eil dad riatanach - dìreach rabhaidhean mu chòdachadh (faic gu h-ìosal). Toradh iomlan de choileanadh:
Cho-dhùin sinn gum bu chòir don ùrachadh a dhol gun duilgheadasan.
Nòta mu na rabhaidhean gu h-àrd a' nochdadh duilgheadasan le còdachadh. Is e an fhìrinn gu bheil UTF-8 ann am MySQL gu o chionn ghoirid cha robh e "fìor" UTF-8, leis nach robh e a’ stòradh ach 3 bytes an àite 4. Ann an MySQL 8 tha seo comasach mu dheireadh cho-dhùin e a chàradh: ailias utf8 a dh'aithghearr a 'leantainn gu còdadh utf8mb4, agus fàsaidh na seann colbhan anns na bùird utf8mb3. Tuilleadh còdachadh utf8mb3 a thoirt air falbh, ach chan ann san fhoillseachadh seo. Mar sin, chuir sinn romhainn na còdachaidhean a tha air an stàladh DBMS a bha a’ ruith a cheartachadh, às deidh dhuinn ùrachadh.
Pàirt 3: Ùrachaidhean Server
Dè a dh’ fhaodadh a dhol ceàrr nuair a tha plana cho snasail ann?.. A’ tuigsinn gu math gu bheil nuances an-còmhnaidh a’ tachairt, rinn sinn a’ chiad deuchainn air cruinneachadh dev MySQL.
Mar a chaidh ainmeachadh cheana, sgrìobhainnean oifigeil a’ còmhdach na cùise mu bhith ag ùrachadh frithealaichean MySQL le mac-samhail. Is e an loidhne gu h-ìosal gum bu chòir dhut a h-uile mac-samhail (tràillean) ùrachadh an-toiseach, oir faodaidh MySQL 8 ath-riochdachadh bho phrìomh dhreach 5.7. Tha duilgheadas ann leis gu bheil sinn a’ cleachdadh am modh maighstir maighstir, nuair a tha am maighstir iomallach ann am modh leughaidh a-mhàin. Is e sin, gu dearbh, bidh trafaic sabaid a ’dol gu aon ionad dàta, agus tha an dàrna fear na chùl-taic.
Tha an topology a 'coimhead mar seo:
Feumaidh an t-ùrachadh tòiseachadh le mac-samhail Mysql mac-samhail dc 2 a-nuas, Maighstir mysql dc 2 a-nuas и mysql replica dc 1, agus crìochnaich leis an fhrithealaiche mysql master dc 1. Gus a bhith nas earbsaiche, chuir sinn stad air na h-innealan mas-fhìor, ghabh sinn dealbhan dhiubh, agus dìreach mus do chuir an t-ùrachadh stad air ath-riochdachadh leis an àithne STOP SLAVE. Tha an còrr den ùrachadh a’ coimhead mar seo:
Bidh sinn ag ath-thòiseachadh gach mac-samhail le bhith a’ cur 3 roghainnean ris na configs: skip-networking, skip-slave-start, skip-log-bin. Is e an fhìrinn gu bheil ùrachadh an stòr-dàta a’ gineadh logaichean dà-chànanach le ùrachaidhean air clàran siostam. Tha na stiùiridhean sin a’ gealltainn nach bi atharrachaidhean sam bith air dàta tagraidh san stòr-dàta, agus cha tèid fiosrachadh mu bhith ag ùrachadh chlàran an t-siostaim a thoirt a-steach do na logaichean binary. Bidh seo a’ seachnadh duilgheadasan nuair a bhios tu ag ath-thòiseachadh ath-riochdachadh.
A 'stàladh a' phacaid percona-server-server. Tha e cudromach cuimhneachadh gu bheil ann an dreach MySQL 8 chan eil feumaidh tu an àithne a ruith mysqlupgrade às deidh ùrachadh an fhrithealaiche.
Às deidh tòiseachadh soirbheachail, bidh sinn ag ath-thòiseachadh an fhrithealaiche a-rithist - às aonais na paramadairean a chaidh a chur ris sa chiad pharagraf.
Nì sinn cinnteach gun obraich ath-riochdachadh gu soirbheachail: thoir sùil SHOW SLAVE STATUS agus faic gu bheil na bùird le cunntairean ann an stòr-dàta an tagraidh air an ùrachadh.
Tha e uile a’ coimhead gu math sìmplidh: bha an ùrachadh dev soirbheachail. Ceart gu leòr, faodaidh tu ùrachadh oidhche a chuir air dòigh gu sàbhailte airson cinneasachadh.
Cha robh bròn sam bith ann - dh'ùraich sinn am prod
Ach, cha robh e na iongnadh gluasad eòlas leasachaidh soirbheachail gu cinneasachadh.
Gu fortanach, tha am pròiseas ùrachaidh fhèin a’ tòiseachadh le mac-samhail, agus mar sin nuair a choinnich sinn ri duilgheadasan, chuir sinn stad air an obair agus thug sinn air ais am mac-samhail bhon dealbh. Chaidh rannsachadh nan trioblaidean a chur dheth chun an ath mhadainn. Anns na clàran bha na h-inntrigidhean a leanas:
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
Le bhith a’ sgrùdadh tasglannan diofar liostaichean puist air Google thàinig tuigse gu bheil an duilgheadas seo a’ tachairt air sgàth Bug MySQL. Ged a tha seo nas coltaiche gur e bug goireis a tha seo mysqlcheck и mysqlsh.
Tha e a 'tionndadh a-mach gun do dh'atharraich MySQL an dòigh anns a bheil iad a' riochdachadh dàta airson raointean deicheach (int, tinyint, msaa), agus mar sin bidh mysql-server a 'cleachdadh dòigh eadar-dhealaichte airson an stòradh. Ma tha an stòr-dàta agad an toiseach bha e ann an dreach 5.5 no 5.1, agus an uairsin dh'ùraich thu gu 5.7, is dòcha gum feum thu a dhèanamh OPTIMIZE airson cuid de bhùird. An uairsin bheir MySQL ùrachadh air na faidhlichean dàta, gan gluasad chun chruth stòraidh gnàthach.
Faodaidh tu cuideachd sgrùdadh a dhèanamh air seo leis a’ ghoireas mysqlfrm:
ma field_type Ma tha e co-ionann ri 0, tha an seann sheòrsa air a chleachdadh sa chlàr - feumaidh tu a dhèanamh OPTIMIZE. Ach, ma tha an luach 246, tha seòrsa ùr agad mu thràth. Gheibhear tuilleadh fiosrachaidh mu na seòrsaichean ann an còd.
A bharrachd air an sin, ann an am biast seo Tha sinn a’ beachdachadh air an dàrna adhbhar a dh’ fhaodadh a bhith ann, a chaidh seachad oirnn: dìth chlàran InnoDB ann an clàr an t-siostaim INNODB_SYS_TABLESPACES, ma chaidh iad, clàran, a chruthachadh ann an dreach 5.1. Gus duilgheadasan a sheachnadh nuair a bhios tu ag ùrachadh, faodaidh tu a chleachdadh sgriobt SQL ceangailte.
Carson nach robh na duilgheadasan sin againn air dev? Bithear a’ lethbhreacadh an stòr-dàta an sin bho àm gu àm bho riochdachadh - mar sin, tha bùird air an ath-chruthachadh.
Gu mì-fhortanach, air stòr-dàta mòr a tha ag obair, cha bhith e comasach dhut dìreach stòr-dàta uile-choitcheann a ghabhail agus a chuir an gnìomh OPTIMIZE. cuidichidh percona-toolkit an seo: tha an goireas pt-online-schema-change sàr-mhath airson gnìomhachd OPTIMIZE air-loidhne.
Bha coltas mar seo air a’ phlana ùraichte:
Optimize a h-uile clàr.
Luchdaich a-nuas an stòr-dàta.
Gus sgrùdadh a dhèanamh air agus aig an aon àm faighinn a-mach an ùine ùrachaidh, chuir sinn à comas aon de na mac-samhail agus ruith sinn an àithne a leanas airson a h-uile clàr:
Bidh clàran air an ùrachadh às aonais glasan fada air sgàth gu bheil an goireas a’ cruthachadh clàr sealach ùr anns am bi e a’ dèanamh lethbhreac de dhàta bhon phrìomh chlàr. Aig an àm nuair a tha an dà chlàr co-ionann, tha am bòrd tùsail glaiste agus am fear ùr na àite. Anns a ’chùis againn, sheall ruith deuchainn gun toireadh e timcheall air latha na clàran gu lèir ùrachadh, ach dh’ adhbhraich copaidh dàta cus luchd air na diosgan.
Gus seo a sheachnadh, ann an riochdachadh chuir sinn an argamaid ris an àithne --sleep le luach 10 - bidh am paramadair seo ag atharrachadh an fhaid feitheimh às deidh dha baidse dàta a ghluasad gu clàr ùr. San dòigh seo faodaidh tu an luchd a lughdachadh ma tha an fhìor aplacaid ruith ag iarraidh ùine freagairt.
Às deidh an optimization a dhèanamh, bha an ùrachadh soirbheachail.
... ach chan ann gu tur!
Taobh a-staigh leth uair a thìde às deidh an ùrachadh, thàinig an neach-dèiligidh le duilgheadas. Dh'obraich an stòr-dàta gu math neònach: bho àm gu àm thòisich iad ath-shuidheachadh ceangail. Seo mar a bha e coltach ann an sgrùdadh:
Tha an dealbh-sgrìn a’ sealltainn graf sàbhaidh air sgàth ’s gun do thuit cuid de na snàithleanan frithealaiche MySQL bho àm gu àm le mearachd. Nochd mearachdan san tagradh:
Sheall sgrùdadh sgiobalta air na logaichean nach b’ urrainn don deamhan mysqld na goireasan riatanach fhaighinn bhon t-siostam obrachaidh. Fhad ‘s a bha sinn a’ rèiteach mhearachdan, lorg sinn san t-siostam faidhlichean poileasaidh apparmor “dìlleachdan”.:
# 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
Chaidh na faidhlichean sin a chruthachadh nuair a chaidh ùrachadh gu MySQL 5.7 o chionn bliadhna no dhà agus buinidh iad do phasgan a chaidh a thoirt air falbh. Le bhith a’ sguabadh às na faidhlichean agus ag ath-thòiseachadh seirbheis an aodaich dh’ fhuasgail e an duilgheadas:
Faodaidh obair sam bith, eadhon an obair as sìmplidh, leantainn gu duilgheadasan ris nach robh dùil. Agus chan eil eadhon plana air a dheagh smaoineachadh an-còmhnaidh a’ gealltainn an toradh ris a bheil dùil. A-nis, tha planaichean ùrachaidh sam bith aig an sgioba againn cuideachd a’ toirt a-steach glanadh èigneachail de fhaidhlichean neo-riatanach a dh’ fhaodadh a bhith air nochdadh mar thoradh air gnìomhan o chionn ghoirid.
Agus leis a’ chruthachalachd grafaigeach seo nach eil gu math proifeasanta, bu mhath leam taing mhòr a thoirt do Percona airson na toraidhean sàr-mhath aca!