Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Tsy mijanona ny fandrosoana, noho izany dia mihamitombo hatrany ny antony hanavaozana ny dikan-teny farany amin'ny MySQL. Vao tsy ela akory izay, tao amin'ny iray amin'ireo tetikasanay, tonga ny fotoana hanavaozana ny kluster Percona Server 5.7 amin'ny version 8. Izany rehetra izany dia nitranga tao amin'ny sehatra Ubuntu Linux 16.04. Ahoana ny fomba hanaovana asa toy izany miaraka amin'ny fotoana fohy sy ny olana sedrainay nandritra ny fanavaozana - vakio ato amin'ity lahatsoratra ity.

Fiomanana

Ny fanavaozam-baovao rehetra amin'ny lohamilina angon-drakitra dia azo inoana fa mifandray amin'ny fanavaozana ny angon-drakitra: fiovana amin'ny fepetra takiana amin'ny famerana ny loharanon'ny rafitra sy ny fanitsiana ny fandrindrana angon-drakitra izay mila esorina amin'ny torolàlana efa lany andro.

Alohan'ny hanavaozana dia hojerentsika tokoa ny antontan-taratasy ofisialy:

Ary andao hanao drafitra hetsika:

  1. Ahitsio ny fichier configuration amin'ny alalan'ny fanesorana ny toromarika efa lany andro.
  2. Jereo ny fifanarahana amin'ny fitaovana.
  3. Havaozy ny angon-drakitra andevo amin'ny fametrahana ny fonosana percona-server-server.
  4. Havaozy ny tompony miaraka amin'ny fonosana mitovy.

Andeha hojerentsika ny teboka tsirairay amin'ny drafitra ary hojerentsika izay mety ho diso.

ZAVA-DEHIBE! Ny fomba fanavaozana ny kluster MySQL mifototra amin'ny Galera dia manana ny safidiny manokana izay tsy voalaza ao amin'ny lahatsoratra. Tsy tokony hampiasa ity torolàlana ity ianao amin'ity tranga ity.

Fizarana 1: Fanamarinana ny configs

Ny MySQL dia nesorina tamin'ny version 8 query_cache. Raha ny marina dia izy nambara ho lany andro miverina amin'ny version 5.7, fa ankehitriny voafafa tanteraka. Noho izany dia ilaina ny manala ireo toromarika mifandraika amin'izany. Ary amin'ny fangatahana cache dia afaka mampiasa fitaovana ivelany ianao - ohatra, ProxySQL.

Ao amin'ny config koa dia nisy torolàlana efa lany andro momba innodb_file_format. Raha ao amin'ny MySQL 5.7 dia azo atao ny misafidy ny endrika InnoDB, dia efa miasa ny dikan-teny faha-8 miaraka amin'ny endrika Barracuda ihany.

Ny vokatray dia ny fanesorana ireto toromarika manaraka ireto:

  • query_cache_type, query_cache_limit и query_cache_size;
  • innodb_file_format и innodb_file_format_max.

Mba hanamarinana dia hampiasa ny sary Docker an'ny Server Percona izahay. Hapetrakay ao amin'ny lahatahiry ny config server mysql_config_test, ary eo anilany dia hamorona lahatahiry ho an'ny data sy logs. Ohatra amin'ny andrana fanamafisam-peo Percona-server:

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

Fehiny: na ao amin'ny docker logs na ao amin'ny lahatahiry miaraka amin'ny logs - miankina amin'ny configs-nao - misy rakitra hiseho izay hamaritana ny torolàlana misy olana.

Ity ny zavatra azonay:

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.

Noho izany, dia mbola nila nikaroka ny encodings sy manolo ny toromarika efa lany andro expire-logs-days.

Fizarana 2: Fanamarinana ny fametrahana miasa

Ny antontan-taratasim-panavaozana dia misy fitaovana 2 hanamarinana ny angon-drakitra mifanaraka amin'izany. Ny fampiasana azy ireo dia manampy ny mpandrindra hanamarina ny mifanaraka amin'ny firafitry ny angona efa misy.

Andeha isika hanomboka amin'ny fampiasana mysqlcheck mahazatra. Mihazakazaka tsotra izao:

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

Raha tsy misy olana dia hivoaka miaraka amin'ny code 0 ny utility:

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Ho fanampin'izany, misy fitaovana ampiasaina amin'ny dikan-teny maoderina an'ny MySQL mysql-shell (Raha ny momba an'i Percona dia ity ny fonosana percona-mysql-shell). Izy io dia fanoloana ny mpanjifa mysql mahazatra ary manambatra ny asan'ny mpanjifa, tonian-dahatsoratra SQL code ary fitaovana fitantanana MySQL. Mba hanamarinana ny mpizara alohan'ny hanavaozana dia azonao atao ny manatanteraka ireto baiko manaraka ireto amin'ny alàlan'izany:

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

Ireto ny hevitra azonay:

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Amin'ny ankapobeny, tsy misy manakiana - fampitandremana momba ny encoding ihany (Zahao etsy ambany). Vokatry ny fanatanterahana manontolo:

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Nanapa-kevitra izahay fa tokony handeha tsy misy olana ny fanavaozana.

Fanamarihana momba ireo fampitandremana etsy ambony izay manondro olana amin'ny fandokoana. Ny zava-misy dia ny UTF-8 ao amin'ny MySQL hatramin'ny vao haingana dia tsy "marina" UTF-8, satria 3 bytes fotsiny no voatahiry fa tsy 4. Ao amin'ny MySQL 8 dia ity no farany nanapa-kevitra ny hanamboatra izany: alias utf8 tsy ho ela dia hitarika ho amin'ny coding utf8mb4, ary ny tsanganana tranainy amin'ny tabilao dia ho lasa utf8mb3. Encoding fanampiny utf8mb3 hesorina, fa tsy amin'ity famoahana ity. Noho izany dia nanapa-kevitra ny hanitsy ny encoding efa eo amin'ny fametrahana DBMS mihazakazaka izahay, rehefa avy nanavao azy io.

Fizarana 3: Server Updates

Inona no mety ho diso rehefa misy drafitra marani-tsaina toy izany?.. Noho ny fahatakarana tsara fa mitranga foana ny nuances, dia nanao ny fanandramana voalohany tamin'ny cluster MySQL dev izahay.

Araka ny efa voalaza, antontan-taratasy ofisialy mandrakotra ny olana momba ny fanavaozana ny mpizara MySQL miaraka amin'ny kopia. Ny tsipika ambany dia ny tokony havaozinao aloha ny kopia rehetra (andevo), satria ny MySQL 8 dia afaka mamerina amin'ny dikan-teny master 5.7. Ny fahasahiranana sasany dia ny hoe mampiasa ny maody isika tompo <-> tompo, rehefa ao anatin'ny maody ny master remote mamaky ihany. Izany hoe, raha ny marina, mankany amin'ny foibe data iray ny fifamoivoizana miady, ary ny faharoa dia backup.

Ny topology dia toy izao manaraka izao:

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Ny fanavaozana dia tsy maintsy manomboka amin'ny kopia mysql replika dc 2, mysql master dc 2 и mysql replica dc 1, ary faranana amin'ny mpizara mysql master dc 1. Mba ho azo itokisana kokoa dia najanonay ireo milina virtoaly, naka sary azy ireo, ary avy hatrany talohan'ny nanajanonana ny fanavaozana miaraka amin'ny baiko. STOP SLAVE. Ny sisa amin'ny fanavaozana dia toa izao:

  1. Averinay indray ny kopia tsirairay amin'ny fampidirana safidy 3 amin'ny configs: skip-networking, skip-slave-start, skip-log-bin. Ny zava-misy dia ny fanavaozana ny angon-drakitra dia miteraka logs binary miaraka amin'ny fanavaozana ny latabatra rafitra. Ireo torolalana ireo dia miantoka fa tsy hisy fiovana amin'ny angona fampiharana ao amin'ny angon-drakitra, ary ny fampahalalana momba ny fanavaozana ny latabatra rafitra dia tsy ho tafiditra ao amin'ny log binary. Hisorohana olana izany rehefa mamerina mamerina indray.
  2. Fametrahana ny fonosana percona-server-server. Zava-dehibe ny manamarika fa ao amin'ny MySQL version 8 tsy mila mihazakazaka ny baiko ianao mysqlupgrade aorian'ny fanavaozana ny server.
  3. Aorian'ny fanombohana mahomby dia averinay indray ny mpizara - tsy misy ny mari-pamantarana nampiana tao amin'ny andalana voalohany.
  4. Ataovy azo antoka fa mandeha tsara ny famerenana: jereo SHOW SLAVE STATUS ary jereo fa nohavaozina ny tabilao misy kaontera ao amin'ny angon-drakitra fampiharana.

Toa tsotra daholo izany rehetra izany: nahomby ny fanavaozana ny dev. Ok, azonao atao ny mandamina ny fanavaozana isan-kariva ho an'ny famokarana.

Tsy nisy alahelo - nanavao ny prod izahay

Na izany aza, ny famindrana ny traikefa devoly mahomby amin'ny famokarana dia tsy nahagaga.

Soa ihany fa ny fizotry ny fanavaozana mihitsy dia manomboka amin'ny kopia, ka rehefa tojo fahasahiranana izahay dia nijanona ny asa ary namerina ny kopia avy amin'ny sary. Nahemotra ny ampitso maraina ny fanadihadiana momba ireo olana ireo. Ny log dia nahitana ireto fidirana manaraka ireto:

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

Ny fikarohana ny arisivan'ny lisitry ny mailaka isan-karazany ao amin'ny Google dia nahatonga ny fahatakarana fa noho ny MySQL bug. Na dia azo inoana kokoa aza fa bug utility izany mysqlcheck и mysqlsh.

Hita fa nanova ny fomba fanehoany ny angon-drakitra ho an'ny saha desimal ny MySQL (int, tinyint, sns.), ka mampiasa fomba hafa hitahirizana azy ireo ny mysql-server. Raha ny angon-drakitrao voalohany dia tao amin'ny version 5.5 na 5.1, ary avy eo nohavaozina ho 5.7 ianao, dia mety mila manao izany ianao. OPTIMIZE ho an'ny latabatra sasany. Avy eo ny MySQL dia hanavao ny rakitra data, hamindra azy ireo amin'ny endrika fitahirizana ankehitriny.

Azonao atao koa ny manamarina izany amin'ny utility 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',
...

raha field_type Raha manana izany mitovy amin'ny 0 ianao, dia ny karazana taloha dia ampiasaina amin'ny latabatra - mila manatanteraka izany ianao OPTIMIZE. Na izany aza, raha 246 ny sandany dia efa manana karazana vaovao ianao. Ny fampahalalana bebe kokoa momba ireo karazana dia azo jerena ao fehezan-dalàna.

Ankoatr'izay, ao amin'ny ity bug Eo am-pandinihana ny antony faharoa mety hitranga, izay nandalo anay: ny tsy fisian'ny tabilao InnoDB ao amin'ny latabatra rafitra INNODB_SYS_TABLESPACES, raha izy ireo, latabatra, dia noforonina tamin'ny version 5.1. Mba hisorohana ny olana rehefa manavao dia azonao ampiasaina attaché SQL script.

Nahoana isika no tsy nanana olana toy izany tamin'ny dev? Ny angon-drakitra dia adika tsindraindray avy amin'ny famokarana - noho izany, amboarina indray ny latabatra.

Indrisy anefa, amin'ny angon-drakitra lehibe iray tena miasa, tsy ho afaka haka sy hanatanteraka universel fotsiny ianao OPTIMIZE. percona-toolkit dia hanampy eto: ny pt-online-schema-change utility dia tena tsara ho an'ny asa OPTIMIZE an-tserasera.

Toy izao ny drafitra nohavaozina:

  1. Optimize ny latabatra rehetra.
  2. Fanavaozana ny angon-drakitra.

Mba hanamarinana izany ary amin'ny fotoana iray ihany dia fantaro ny fotoana fanavaozana, dia nesorinay ny iray amin'ireo kopia ary nihazakazaka ity baiko manaraka ity ho an'ny latabatra rehetra:

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

Ny tabilao dia havaozina tsy misy hidin-trano lava noho ny zava-misy fa ny fitaovana dia mamorona latabatra vonjimaika vaovao izay anaovan'izy ireo ny angona avy amin'ny latabatra lehibe. Amin'ny fotoana mitovy ny latabatra roa, ny latabatra tany am-boalohany dia mihidy ary soloina ny vaovao. Amin'ity tranga ity, ny fitsapana dia nampiseho fa mila andro iray eo ho eo ny fanavaozana ny latabatra rehetra, fa ny kopia data dia niteraka enta-mavesatra be loatra tamin'ny kapila.

Mba hisorohana izany, ao amin'ny famokarana dia nampiana ny tohan-kevitra tamin'ny baiko --sleep miaraka amin'ny sandan'ny 10 - ity parameter ity dia manitsy ny halavan'ny fiandrasana aorian'ny famindrana angon-drakitra iray amin'ny latabatra vaovao. Amin'izany fomba izany dia azonao atao ny mampihena ny entana raha toa ka mitaky ny fotoana famaliana ny fampiharana mihazakazaka.

Taorian'ny fanatanterahana ny fanatsarana dia nahomby ny fanavaozana.

... fa tsy tanteraka!

Tao anatin'ny antsasak'adiny taorian'ny fanavaozana dia nisy olana ny mpanjifa. Niasa hafahafa ny angon-drakitra: nanomboka tsindraindray izy ireo miverina ny fifandraisana. Toy izao no niseho tamin'ny fanaraha-maso:

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Ny pikantsary dia mampiseho tabilao sawtooth noho ny zava-misy fa ny sasany amin'ireo kofehy mpizara MySQL dia nianjera tsindraindray noho ny fahadisoana. Nisy hadisoana niseho tao amin'ny fampiharana:

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

Ny fanaraha-maso haingana ny logs dia nanambara fa ny daemon mysqld dia tsy afaka mahazo ny loharano ilaina amin'ny rafitra miasa. Teo am-pandaminana ny lesoka dia hitanay tao amin'ny rafitra antontan-taratasy momba ny politikan'ny apparmor "kamboty".:

# 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

Ireo rakitra ireo dia noforonina rehefa nanavao ny MySQL 5.7 roa taona lasa izay ary anisan'ny fonosana nesorina. Namaha ny olana ny famafana ny rakitra sy ny famerenana ny serivisy apparmor:

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

Ho famaranana

Na inona na inona, na dia ny fandidiana tsotra indrindra aza, dia mety hiteraka olana tsy ampoizina. Ary na dia ny fananana drafitra voahevitra tsara aza dia tsy miantoka foana ny vokatra andrasana. Ankehitriny, izay drafitra fanavaozana rehetra dia nampidirin'ny ekipanay koa ny fanadiovana tsy maintsy atao amin'ireo rakitra tsy ilaina izay mety ho vokatry ny hetsika vao haingana.

Ary miaraka amin'ity famoronana sary tsy dia matihanina loatra ity, dia te-hisaotra lehibe an'i Percona aho noho ny vokatra tena tsara!

Fanavaozana ny MySQL (Percona Server) amin'ny 5.7 ka hatramin'ny 8.0

Sal

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment