Hloov kho MySQL (Percona Server) los ntawm 5.7 txog 8.0
Kev nce qib tsis nyob twj ywm, yog li vim li cas thiaj li hloov mus rau MySQL versions tshiab tau dhau los ua qhov nyuaj. Tsis ntev tas los no, nyob rau hauv ib qho ntawm peb cov haujlwm, nws yog lub sijhawm los hloov kho qhov chaw zoo Percona Server 5.7 pawg rau version 8. Txhua qhov no tau tshwm sim ntawm Ubuntu Linux 16.04 platform. Yuav ua li cas ua haujlwm zoo li no nrog tsawg kawg downtime thiab teeb meem dab tsi peb ntsib thaum hloov tshiab - nyeem hauv kab lus no.
MySQL raug tshem tawm hauv version 8 query_cache. Qhov tseeb nws yog tshaj tawm tias obsolete rov qab rau hauv version 5.7, tab sis tam sim no tshem tag nrho. Yog li, nws yog ib qho tsim nyog yuav tsum tshem tawm cov lus qhia cuam tshuam. Thiab rau cache thov tam sim no koj tuaj yeem siv cov cuab yeej sab nraud - piv txwv li, ProxySQL.
Tsis tas li ntawd nyob rau hauv lub config muaj outdated directives txog innodb_file_format. Yog tias hauv MySQL 5.7 nws tuaj yeem xaiv InnoDB hom, ces 8th version twb ua haujlwm tsuas yog nrog Barracuda hom ntawv.
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.
Yog li, peb tseem xav tau los txheeb xyuas cov encodings thiab hloov cov lus qhia dhau los expire-logs-days.
Ib daim ntawv qhia txog cov lus ceeb toom saum toj no qhia txog teeb meem nrog cov encodings. Qhov tseeb yog tias UTF-8 hauv MySQL mus txog rau tam sim no tsis yog "muaj tseeb" UTF-8, txij li nws khaws cia tsuas yog 3 bytes es tsis txhob 4. Hauv MySQL 8 qhov no yog thaum kawg txiav txim siab kho nws: npe utf8 tsis ntev yuav ua rau coding utf8mb4, thiab cov kab qub hauv cov ntxhuav yuav dhau los utf8mb3. Ntxiv encoding utf8mb3 yuav raug tshem tawm, tab sis tsis nyob hauv qhov kev tso tawm no. Yog li ntawd, peb txiav txim siab los kho cov encodings twb nyob rau hauv lub khiav DBMS installation, tom qab muab kho dua nws.
Ntu 3: Kev Hloov Kho Neeg rau zaub mov
Yuav ua li cas yuav mus tsis ncaj ncees lawm thaum muaj xws li ib tug ntse txoj kev npaj?.. Nkag siab tag nrho zoo tias nuances ib txwm tshwm sim, peb ua thawj qhov kev sim ntawm MySQL dev pawg.
Raws li twb tau hais lawm, cov ntaub ntawv raug cai npog qhov teeb meem ntawm kev hloov kho MySQL servers nrog replicas. Cov kab hauv qab yog tias koj yuav tsum xub hloov kho tag nrho cov replicas (cov qhev), txij li MySQL 8 tuaj yeem rov ua dua los ntawm tus tswv version 5.7. Qee qhov teeb meem nyob hauv qhov tseeb tias peb siv hom tswv <-> master, thaum tus tswv chaw taws teeb nyob hauv hom nyeem-nkaus xwb. Ntawd yog, qhov tseeb, kev sib ntaus sib tua mus rau ib lub chaw khaws ntaub ntawv, thiab qhov thib ob yog ib qho thaub qab.
Lub topology zoo li no:
Qhov hloov tshiab yuav tsum pib nrog cov ntawv luam tawm mysql replica dc 2, mysql master dc 2 ΠΈ mysql replica dc 1, thiab xaus nrog mysql master dc 1 server. Yuav kom ntseeg tau ntau dua, peb nres lub tshuab virtual, coj snapshots ntawm lawv, thiab tam sim ntawd ua ntej qhov hloov tshiab nres replication nrog cov lus txib. STOP SLAVE. Lwm qhov hloov tshiab zoo li no:
Txhim kho lub pob percona-server-server. Nws yog ib qho tseem ceeb kom nco ntsoov tias hauv MySQL version 8 tsis koj yuav tsum khiav cov lus txib mysqlupgrade tom qab hloov tshiab server.
Tom qab pib ua tiav, peb rov pib dua lub server dua - tsis muaj qhov txwv uas tau ntxiv hauv thawj kab lus.
Peb xyuas kom meej tias replication ua haujlwm tiav: kos SHOW SLAVE STATUS thiab pom tias cov ntxhuav nrog cov txee hauv daim ntawv thov database tau hloov kho.
Txhua yam zoo li yooj yim heev: qhov hloov tshiab dev tau ua tiav. Ok, koj tuaj yeem teem sijhawm ua haujlwm hmo ntuj rau kev tsim khoom.
Tsis muaj kev tu siab - peb hloov kho cov khoom
Txawm li cas los xij, kev hloov pauv ntawm kev vam meej dev kev tsim khoom tsis yog tsis muaj qhov xav tsis thoob.
Hmoov zoo, cov txheej txheem hloov tshiab nws tus kheej pib nrog replicas, yog li thaum peb ntsib teeb meem, peb tau tso tseg txoj haujlwm thiab rov qab kho cov replica ntawm snapshot. Kev tshawb nrhiav cov teeb meem raug ncua mus txog rau tag kis sawv ntxov. Cov log tsheb muaj cov ntaub ntawv hauv qab no:
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
Kev tshawb nrhiav cov ntaub ntawv khaws tseg ntawm ntau cov npe xa ntawv hauv Google ua rau nkag siab tias qhov teeb meem no tshwm sim vim MySQL kab laum. Txawm hais tias qhov no feem ntau yuav yog kab laum siv hluav taws xob mysqlcheck ΠΈ mysqlsh.
Nws hloov tawm tias MySQL hloov txoj kev lawv sawv cev cov ntaub ntawv rau cov lej lej (int, tinyint, thiab lwm yam), yog li mysql-server siv lwm txoj hauv kev los khaws lawv. Yog koj database thaum pib yog nyob rau hauv version 5.5 lossis 5.1, thiab tom qab ntawd koj hloov kho rau 5.7, ces koj yuav tau ua OPTIMIZE rau tej rooj. Tom qab ntawd MySQL yuav hloov kho cov ntaub ntawv cov ntaub ntawv, hloov lawv mus rau hom cia tam sim no.
Kev tshuaj xyuas sai ntawm cov cav tau qhia tias mysqld daemon tsis tuaj yeem tau txais cov peev txheej xav tau los ntawm kev ua haujlwm. Thaum txheeb xyuas qhov yuam kev, peb pom hauv qhov system "orphan" apparmor txoj cai cov ntaub ntawv:
# 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
Cov ntaub ntawv no tau tsim thaum kho dua tshiab rau MySQL 5.7 ob peb xyoos dhau los thiab koom nrog lub pob tshem tawm. Rho tawm cov ntaub ntawv thiab rov pib qhov kev pabcuam apparmor daws qhov teeb meem: