Kusintha MySQL (Percona Server) kuchokera 5.7 mpaka 8.0
Kupita patsogolo sikuyima, chifukwa chake zifukwa zosinthira kumitundu yaposachedwa ya MySQL zikuchulukirachulukira. Osati kale kwambiri, mu imodzi mwama projekiti athu, inali nthawi yosinthira magulu a Percona Server 5.7 kukhala mtundu 8. Zonsezi zidachitika pa nsanja ya Ubuntu Linux 16.04. Momwe mungapangire opaleshoni yotereyi ndi nthawi yochepa yochepetsera komanso mavuto omwe tidakumana nawo pakusinthidwa - werengani m'nkhaniyi.
Kukonzekera
Kusintha kulikonse kwa seva ya database nthawi zambiri kumalumikizidwa ndi kukonzanso nkhokwe: kusintha kwa zofunikira pamalire azinthu zamakina ndi kukonza makonzedwe a database omwe akuyenera kuchotsedwa ku malangizo akale.
Sinthani nkhokwe za akapolo poyika phukusi percona-server-server.
Sinthani mbuye ndi phukusi lomwelo.
Tiyeni tiyang'ane pa mfundo iliyonse ya ndondomekoyi ndikuwona zomwe zingasokoneze.
ZOFUNIKA KWAMBIRI! Njira yosinthira gulu la MySQL kutengera Galera ili ndi zobisika zake zomwe sizinafotokozedwe m'nkhaniyi. Musagwiritse ntchito malangizowa pankhaniyi.
Gawo 1: Kuyang'ana ma configs
MySQL idachotsedwa mu mtundu 8 query_cache. Kwenikweni iye anali zanenedwa kuti ndi zachikale kubwerera mu mtundu 5.7, koma tsopano kwathunthu zichotsedwa. Chifukwa chake, ndikofunikira kuchotsa malangizo ogwirizana nawo. Ndipo posungira zopempha mutha kugwiritsa ntchito zida zakunja - mwachitsanzo, ProxySQL.
Komanso mu config munali malangizo akale okhudza innodb_file_format. Ngati mu MySQL 5.7 zinali zotheka kusankha mtundu wa InnoDB, ndiye kuti mtundu wa 8 ukugwira ntchito kale kokha ndi mtundu wa Barracuda.
Kuti muwone, tidzagwiritsa ntchito chithunzi cha Docker cha Percona Server. Tidzayika kasinthidwe ka seva mu chikwatu mysql_config_test, ndipo pafupi ndi izo tidzapanga zolemba za deta ndi zolemba. Chitsanzo choyesera kasinthidwe ka Percona-server:
Pansi: mwina muzolemba za Docker kapena m'chikwatu chokhala ndi zipika - kutengera masinthidwe anu - fayilo idzawonekera momwe malangizo ovuta adzafotokozedwera.
Nazi zomwe tinali nazo:
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.
Chifukwa chake, tidafunikirabe kudziwa ma encoding ndikusintha malangizo akale expire-logs-days.
Ngati palibe mavuto omwe apezeka, ntchitoyo idzatuluka ndi code 0:
Kuphatikiza apo, chida chikupezeka m'mitundu yamakono ya MySQL mysql-chipolopolo (pankhani ya Percona iyi ndiye phukusi percona-mysql-shell). Ndilo m'malo mwa kasitomala wakale wa mysql ndikuphatikiza ntchito za kasitomala, mkonzi wamakhodi a SQL ndi zida zowongolera za MySQL. Kuti muwone seva musanasinthire, mutha kugwiritsa ntchito malamulo awa:
Chidziwitso cha machenjezo pamwambapa omwe akuwonetsa zovuta ndi ma encoding. Chowonadi ndi chakuti UTF-8 mu MySQL mpaka posachedwa sizinali "zowona" UTF-8, popeza idasunga ma byte atatu okha m'malo mwa 3. Mu MySQL 4 izi ndizomaliza adaganiza zokonza: ayi utf8 posachedwa zidzatsogolera ku coding utf8mb4, ndipo mizati yakale m'magomewo idzakhala utf8mb3. Encoding ina utf8mb3 zidzachotsedwa, koma osati mu kutulutsidwa uku. Chifukwa chake, tidaganiza zokonza ma encodings omwe ali kale pakukhazikitsa kwa DBMS, titakonzanso.
Gawo 3: Zosintha za Seva
Kodi chingachitike ndi chiyani pakakhala dongosolo lanzeru chotere?.
Monga tanenera kale, zolemba zovomerezeka chimakwirira nkhani yosintha ma seva a MySQL okhala ndi zofananira. Chofunikira ndichakuti muyenera kusintha kaye zolemba zonse (akapolo), popeza MySQL 8 imatha kubwereza kuchokera ku master version 5.7. Vuto lina limakhala kuti timagwiritsa ntchito mawonekedwe bwana <-> bwana, pamene mbuye wakutali ali mu mode kuwerenga kokha. Izi zikutanthauza kuti, magalimoto olimbana nawo amapita kumalo amodzi a data, ndipo yachiwiri ndi yosunga zobwezeretsera.
Topology ikuwoneka motere:
Zosintha ziyenera kuyamba ndi zofananira mysql replica dc 2, mysql master dc 2 ΠΈ mysql replica dc 1, ndikumaliza ndi seva ya mysql master dc 1. Kuti tikhale odalirika, tinayimitsa makina enieni, tinajambula zithunzi zawo, ndipo nthawi yomweyo kusinthidwa kusanasiya kubwereza ndi lamulo. STOP SLAVE. Zosintha zina zonse zikuwoneka motere:
Timayambanso chofanizira chilichonse powonjezera zosankha za 3 ku ma configs: skip-networking, skip-slave-start, skip-log-bin. Chowonadi ndi chakuti kukonzanso nkhokwe kumapanga zipika za binary ndi zosintha pamatebulo adongosolo. Malangizowa amatsimikizira kuti sipadzakhala kusintha kwa deta yogwiritsira ntchito mu database, ndipo zambiri zokhudza kukonzanso matebulo adongosolo sizidzaphatikizidwa muzolemba zamabina. Izi zidzapewa mavuto poyambiranso kubwereza.
Kuyika phukusi percona-server-server. Ndikofunika kuzindikira kuti mu MySQL version 8 osati muyenera kuyendetsa lamulo mysqlupgrade pambuyo pakusintha kwa seva.
Timaonetsetsa kuti kubwereza kumagwira ntchito bwino: fufuzani SHOW SLAVE STATUS ndikuwona kuti matebulo okhala ndi zowerengera mu nkhokwe ya pulogalamu akusinthidwa.
Zonse zikuwoneka zosavuta: zosintha za dev zidapambana. Chabwino, mutha kukonza zosintha zausiku kuti zipangidwe.
Panalibe zachisoni - tidasinthiratu prod
Komabe, kusamutsidwa kwa luso la dev lopambana pakupanga sikunali kodabwitsa.
Mwamwayi, zosinthazo zimayamba ndi zofananira, kotero titakumana ndi zovuta, tidayimitsa ntchitoyi ndikubwezeretsanso chithunzicho. Kufufuza kwa mavutowa kunayimitsidwa mpaka mmawa wotsatira. Zolembazo zinali ndi zolemba izi:
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
Kufufuza zolemba zakale zamakalata osiyanasiyana pa Google kudapangitsa kuti timvetsetse kuti vutoli limachitika chifukwa cha MySQL bug. Ngakhale izi zitha kukhala vuto lothandizira mysqlcheck ΠΈ mysqlsh.
Zinapezeka kuti MySQL inasintha momwe amayimira deta ya magawo a decimal (int, tinyint, etc.), kotero mysql-server imagwiritsa ntchito njira ina yosungira. Ngati database yanu poyamba anali mu mtundu 5.5 kapena 5.1, ndiyeno mudasinthidwa kukhala 5.7, ndiye mungafunike kutero OPTIMIZE pa matebulo ena. Kenako MySQL idzasintha mafayilo a data, kuwasamutsira ku mawonekedwe apano osungira.
Mukhozanso kuyang'ana izi ndi zothandiza mysqlfrm:
Pasanathe theka la ola pambuyo pomwe, kasitomala anabwera ndi vuto. Ma database adagwira ntchito modabwitsa: nthawi ndi nthawi adayamba kugwirizana kukonzanso. Izi ndi zomwe zinkawoneka poyang'anira:
Chithunzicho chikuwonetsa graph ya sawtooth chifukwa chakuti ulusi wina wa seva ya MySQL nthawi ndi nthawi umagwa ndi cholakwika. Zolakwa zidawoneka mu pulogalamu:
Kuyang'ana mwachangu kwa zipikazo kunawonetsa kuti mysqld daemon sakanatha kupeza zofunikira kuchokera pamakina ogwiritsira ntchito. Pamene tikukonza zolakwika, tinapeza mu dongosolo mafayilo a "orphan" apparmor policy:
# 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
Mafayilowa adapangidwa pokwezera ku MySQL 5.7 zaka zingapo zapitazo ndipo ndi a phukusi lochotsedwa. Kuchotsa mafayilo ndikuyambitsanso ntchito ya apparmor kunathetsa vutoli: