Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

ʻAʻole kū mālie ka holomua, no laila ke ulu nei nā kumu e hoʻonui ai i nā mana hou o MySQL. ʻAʻole i liʻuliʻu, i loko o kekahi o kā mākou papahana, ua hiki i ka manawa e hoʻonui ai i nā pūʻulu ʻoluʻolu Percona Server 5.7 i ka mana 8. Ua hana ʻia kēia mau mea ma ka Ubuntu Linux 16.04 platform. Pehea e hana ai i kahi hana me ka liʻiliʻi o ka manawa haʻahaʻa a me nā pilikia i loaʻa iā mākou i ka wā o ka hoʻohou - heluhelu i kēia ʻatikala.

ʻO ka hoʻomākaukauʻana

Hoʻopili ʻia kēlā me kēia hōʻano hou o ka kikowaena waihona me ka hoʻonohonoho hou ʻana i ka waihona: nā hoʻololi i nā koi no nā palena o nā kumuwaiwai ʻōnaehana a me ka hoʻoponopono ʻana i nā configs waihona e pono e hoʻomaʻemaʻe ʻia mai nā kuhikuhi kahiko.

Ma mua o ka hoʻonui ʻana, e nānā pono mākou i ka palapala mana:

A e hana mākou i kahi hoʻolālā hana:

  1. E hoʻoponopono i nā faila ma ka wehe ʻana i nā kuhikuhi kahiko.
  2. E nānā i ka hoʻohālikelike me nā pono hana.
  3. Hoʻohou i ka ʻikepili kauā ma ke kau ʻana i ka pūʻolo percona-server-server.
  4. Hoʻohou i ka haku me ka pūʻolo like.

E nānā kākou i kēlā me kēia wahi o ka hoʻolālā a ʻike i ka mea hiki ke hele hewa.

IMPORTANT! ʻO ke kaʻina hana no ka hoʻonui ʻana i kahi pūʻulu MySQL e pili ana iā Galera nona kāna mau subtleties ʻaʻole i wehewehe ʻia ma ka ʻatikala. ʻAʻole pono ʻoe e hoʻohana i kēia ʻōlelo aʻo i kēia hihia.

Mahele 1: Nānā i nā config

Ua wehe ʻia ʻo MySQL ma ka mana 8 query_cache. ʻOiaʻiʻo ʻo ia haʻi ʻia he kahiko hoʻi i ka mana 5.7, akā i kēia manawa holoi loa. No laila, pono e wehe i nā kuhikuhi pili. A i nā noi huna hiki iā ʻoe ke hoʻohana i nā mea hana waho - no ka laʻana, ProxySQL.

I loko nō hoʻi o ka config aia nā kuhikuhi kahiko e pili ana innodb_file_format. Inā ma MySQL 5.7 hiki ke koho i ke ʻano InnoDB, a laila ua hana ka 8th version me ke ʻano Barracuda wale nō.

ʻO kā mākou hopena, ʻo ia ka wehe ʻana i kēia mau kuhikuhi:

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

E nānā, e hoʻohana mākou i ke kiʻi Docker o Percona Server. E kau mākou i ka config server i ka papa kuhikuhi mysql_config_test, a ma ka ʻaoʻao e hana mākou i nā papa kuhikuhi no ka ʻikepili a me nā lāʻau. Laʻana hoʻāʻo hoʻonohonoho hoʻonohonoho 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

Ke laina lalo: ma ka Docker logs a i ʻole ma ka papa kuhikuhi me nā lāʻau - ma muli o kāu configs - e ʻike ʻia kahi faila kahi e wehewehe ʻia ai nā kuhikuhi pilikia.

Eia kā mākou i loaʻa:

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.

No laila, pono mākou e noʻonoʻo i nā encodings a hoʻololi i ke kuhikuhi kahiko expire-logs-days.

Māhele 2: Ke nānā ʻana i nā hoʻonohonoho hana

Loaʻa i ka palapala hōʻano hou nā mea pono 2 no ka nānā ʻana i ka waihona no ka hoʻohālikelike. ʻO kā lākou hoʻohana ʻana e kōkua i ka luna hoʻomalu e nānā i ka hoʻohālikelike ʻana o ka hoʻolālā ʻikepili i loaʻa.

E hoʻomaka me ka pono mysqlcheck maʻamau. E holo wale:

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

Inā ʻaʻohe pilikia, e haʻalele ka pono me ka code 0:

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Eia kekahi, loaʻa kahi pono i nā mana hou o MySQL mysql-shell (i ka hihia o Percona ʻo kēia ka pūʻolo percona-mysql-shell). He pani ia no ka mea kūʻai aku mysql maʻamau a hoʻohui i nā hana a kahi mea kūʻai aku, kahi hoʻoponopono code SQL a me nā mea hoʻokele MySQL. No ka nānā ʻana i ka server ma mua o ka hoʻonui ʻana, hiki iā ʻoe ke holo i kēia mau kauoha ma o ia:

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

Eia nā manaʻo i loaʻa iā mākou:

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Ma keʻano laulā, ʻaʻohe mea koʻikoʻi - ʻo nā ʻōlelo aʻo wale nō e pili ana i ka hoʻopili ʻana (e nānā ma lalo). Ka hopena hoʻokō holoʻokoʻa:

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Ua hoʻoholo mākou e hele ka mea hou me ka pilikia ʻole.

ʻO kahi leka e pili ana i nā ʻōlelo aʻo ma luna e hōʻike ana i nā pilikia me ka hoʻopili. ʻO ka ʻoiaʻiʻo ʻo UTF-8 i MySQL a hiki i kēia manawa ʻaʻole "ʻoiaʻiʻo" UTF-8, no ka mea, ua mālama ʻo ia i 3 bytes wale nō ma mua o 4. Ma MySQL 8 ʻo kēia ka hope hoʻoholo e hoʻoponopono: inoa inoa utf8 e alakaʻi koke i ka coding utf8mb4, a e lilo nā kolamu kahiko o nā papa utf8mb3. Hoʻopili hou aku utf8mb3 e wehe ʻia, akā ʻaʻole ma kēia hoʻokuʻu. No laila, ua hoʻoholo mākou e hoʻoponopono i nā encodings i ka hoʻonohonoho DBMS holo, ma hope o ka hoʻonui ʻana.

Mahele 3: Nā mea hou kikowaena

He aha ka mea hiki ke hele hewa inā loaʻa kahi hoʻolālā akamai?.. No ka hoʻomaopopo piha ʻana i nā nuances e kū mau ana, ua alakaʻi mākou i ka hoʻokolohua mua ma kahi MySQL dev cluster.

E like me ka mea i ʻōlelo ʻia, palapala kūhelu uhi i ka pilikia o ka hoʻonui ʻana i nā kikowaena MySQL me nā kope. ʻO ka laina lalo, pono ʻoe e hoʻohou i nā replicas āpau (nā kauā), no ka mea hiki i ka MySQL 8 ke hana hou mai kahi master version 5.7. Aia kekahi pilikia ma ka hoʻohana ʻana i ke ʻano haku <-> haku, i ka manawa o ka haku mamao ma ke ano heluhelu wale nō. ʻO ia, ʻoiaʻiʻo, hele ka huakaʻi kaua i hoʻokahi kikowaena data, a ʻo ka lua he mea hoʻihoʻi.

Penei ka topology:

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Pono e hoʻomaka ka hōʻano hou me nā kope mysql replica dc 2, mysql haku dc 2 и mysql replica dc 1, a hoʻopau me ka mysql master dc 1 server. I mea e hilinaʻi nui ai, ua kāpae mākou i nā mīkini virtual, lawe i nā kiʻi o lākou, a ma mua koke o ka hoʻopau ʻana i ka hoʻopiʻi ʻana me ke kauoha. STOP SLAVE. ʻO ke koena o ka mea hou e like me kēia:

  1. Hoʻomaka hou mākou i kēlā me kēia kope ma ka hoʻohui ʻana i nā koho 3 i nā configs: skip-networking, skip-slave-start, skip-log-bin. ʻO ka ʻoiaʻiʻo, ʻo ka hoʻonui ʻana i ka waihona e hoʻopuka i nā log binary me nā mea hou i nā papa ʻōnaehana. Hōʻoia kēia mau kuhikuhi ʻaʻohe hoʻololi i ka ʻikepili noi ma ka waihona, a ʻaʻole e hoʻokomo ʻia ka ʻike e pili ana i ka hoʻonui ʻana i nā papa ʻōnaehana i loko o nā log binary. E pale aku kēia i nā pilikia i ka wā e hoʻomaka hou ai i ka hana hou.
  2. Ke kau nei i ka pūʻolo percona-server-server. He mea nui ia e hoʻomaopopo i ka mana MySQL 8 ole pono ʻoe e holo i ke kauoha mysqlupgrade ma hope o ka hōʻano hou o ke kikowaena.
  3. Ma hope o ka hoʻomaka kūleʻa, hoʻomaka hou mākou i ke kikowaena - me ka ʻole o nā ʻāpana i hoʻohui ʻia ma ka paukū mua.
  4. Hoʻomaopopo mākou i ka holomua o ka hana hou ʻana: nānā SHOW SLAVE STATUS a e ʻike i ka hōʻano hou ʻana o nā papa me nā helu helu ma ka waihona noi.

He mea maʻalahi loa ia: ua holomua ka dev update. ʻAe, hiki iā ʻoe ke hoʻonohonoho palekana i kahi hoʻolaha pō no ka hana ʻana.

ʻAʻohe kaumaha - ua hōʻano hou mākou i ka prod

Eia naʻe, ʻo ka hoʻololi ʻana o ka ʻike dev kūleʻa i ka hana ʻana, ʻaʻole me ka pīhoihoi.

ʻO ka mea pōmaikaʻi, hoʻomaka ke kaʻina hana hou me nā replicas, no laila ke loaʻa iā mākou nā pilikia, hoʻōki mākou i ka hana a hoʻihoʻi i ke kope mai ka snapshot. Ua hoʻopaneʻe ʻia ka hoʻokolokolo ʻana i nā pilikia a kakahiaka aʻe. Aia i loko o nā moʻolelo nā mea hoʻokomo:

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

ʻO ka noiʻi ʻana i nā waihona o nā papa inoa leka uila ma Google i alakaʻi i ka hoʻomaopopo ʻana i kēia pilikia ma muli o ʻO ka hewa MySQL. ʻOiai ʻoi aku ka maikaʻi o kēia i kahi bug pono mysqlcheck и mysqlsh.

ʻIke ʻia ua hoʻololi ʻo MySQL i ke ʻano o kā lākou hōʻike ʻana i ka ʻikepili no nā mahina decimal (int, tinyint, etc.), no laila hoʻohana ʻo mysql-server i kahi ala ʻē aʻe e mālama ai iā lākou. Inā kāu waihona mua aia ma ka mana 5.5 a i ʻole 5.1, a laila hōʻano hou ʻoe i 5.7, a laila pono ʻoe e hana OPTIMIZE no kekahi mau papa. A laila e hōʻano hou ʻo MySQL i nā faila data, e hoʻoneʻe iā lākou i ka ʻano waihona o kēia manawa.

Hiki iā ʻoe ke nānā i kēia me ka pono 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',
...

ina field_type Inā loaʻa iā ʻoe ka 0, a laila hoʻohana ʻia ka ʻano kahiko i ka papa - pono ʻoe e hoʻokō OPTIMIZE. Eia naʻe, inā he 246 ka waiwai, loaʻa iā ʻoe kahi ʻano hou. Hiki ke loaʻa ka ʻike hou aku e pili ana i nā ʻano ma pāʻālua.

Eia kekahi, i loko keia kino Ke noʻonoʻo nei mākou i ke kumu kumu ʻelua, ka mea i hala iā mākou: ka nele o nā papa InnoDB i ka papa ʻōnaehana. INNODB_SYS_TABLESPACES, inā ua hana ʻia nā papa ma ka mana 5.1. No ka pale ʻana i nā pilikia i ka wā e hoʻonui ai, hiki iā ʻoe ke hoʻohana hoʻopili ʻia ka palapala SQL.

No ke aha i loaʻa ʻole ai iā mākou nā pilikia ma dev? Hoʻopili ʻia ka waihona i kēlā me kēia manawa ma laila mai ka hana - no laila, hana hou ʻia nā papa ʻaina.

ʻO ka mea pōʻino, ma kahi ʻikepili nui e hana nei, ʻaʻole hiki iā ʻoe ke lawe a hoʻokō i kahi honua OPTIMIZE. E kōkua ʻo percona-toolkit ma ʻaneʻi: ʻoi aku ka maikaʻi o ka pono pt-online-schema-change no ka hana OPTIMIZE pūnaewele.

Ua like ke ano o ka papahana hou:

  1. E hoʻonui i nā papa a pau.
  2. Hoʻohou i nā waihona.

No ka nānā ʻana a ma ka manawa like e ʻike ai i ka manawa hou, ua hoʻopau mākou i kekahi o nā replicas a holo i kēia kauoha no nā papa āpau:

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

Hoʻohou ʻia nā papa me ka ʻole o nā laka lōʻihi ma muli o ka hana ʻana o ka pono i kahi papaʻaina manawa hou kahi e kope ai i ka ʻikepili mai ka papa nui. I ka manawa like nā papa ʻelua, ua laka ʻia ka pākaukau mua a pani ʻia me ka mea hou. I kā mākou hihia, ua hōʻike ʻia kahi hoʻāʻo hoʻāʻo e lawe i kahi lā e hoʻonui i nā papa āpau, akā ʻo ke kope ʻana i ka ʻikepili i hoʻonui ai i ka ukana ma nā disks.

No ka pale ʻana i kēia, ua hoʻohui mākou i ka hoʻopaʻapaʻa i ke kauoha --sleep me ka waiwai o 10 - hoʻoponopono kēia ʻāpana i ka lōʻihi o ke kali ʻana ma hope o ka hoʻoili ʻana i kahi pūʻulu ʻikepili i kahi papaʻaina hou. Ma kēia ala hiki iā ʻoe ke hōʻemi i ka ukana inā koi ka noi holo maoli i ka manawa pane.

Ma hope o ka hoʻokō ʻana i ka loiloi, ua kūleʻa ka hōʻano hou.

... akā ʻaʻole loa!

I loko o ka hapalua hola ma hope o ka hōʻano hou, hiki mai ka mea kūʻai me kahi pilikia. Ua hana ʻino loa ka waihona: hoʻomaka lākou i kēlā me kēia manawa hoʻopaʻa hou ka pilina. ʻO kēia ke ʻano o ka nānā ʻana:

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

Hōʻike ka paʻi kiʻi i kahi kiʻi sawtooth ma muli o ka hāʻule ʻana o kekahi o nā kaula kikowaena MySQL me kahi hewa. Ua ʻike ʻia nā hewa ma ka noi:

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

ʻO ka nānā wikiwiki ʻana i nā lāʻau i hōʻike ʻia ʻaʻole hiki i ka mysqld daemon ke loaʻa nā kumuwaiwai i koi ʻia mai ka ʻōnaehana hana. I ka wehe ʻana i nā hewa, ʻike mākou i ka ʻōnaehana "nā keiki makua" apparmor policy 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

Ua hana ʻia kēia mau faila i ka wā e hoʻonui ai iā MySQL 5.7 i ʻelua mau makahiki i hala aku nei a pili i kahi pūʻolo i wehe ʻia. ʻO ka holoi ʻana i nā faila a hoʻomaka hou i ka lawelawe apparmor i hoʻoponopono i ka pilikia:

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

I ka hopena

ʻO kēlā me kēia, ʻo ka hana maʻalahi loa, hiki ke alakaʻi i nā pilikia i manaʻo ʻole ʻia. A ʻo ka loaʻa ʻana o kahi hoʻolālā noʻonoʻo maikaʻi ʻaʻole ia e hōʻoiaʻiʻo i ka hopena i manaʻo ʻia. I kēia manawa, ua hoʻokomo pū kā mākou hui i ka hoʻomaʻemaʻe pono ʻole o nā faila pono ʻole i ʻike ʻia ma muli o nā hana hou.

A me kēia ʻano hana kiʻi ʻoihana ʻaʻole loa, makemake wau e ʻōlelo i ka mahalo nui iā Percona no kā lākou huahana maikaʻi loa!

Hoʻohou i ka MySQL (Percona Server) mai 5.7 a i 8.0

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka