АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

ΠΠ°ΠΏΡ€Π΅Π΄ΡŠΠΊΡŠΡ‚ Π½Π΅ стои Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅Π½, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π΄Π° надстроитС Π΄ΠΎ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° MySQL стават всС ΠΏΠΎ-ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π½ΠΈ. НСотдавна, Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, бСшС Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΡƒΡŽΡ‚Π½ΠΈΡ‚Π΅ Percona Server 5.7 ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π΄ΠΎ вСрсия 8. Всичко Ρ‚ΠΎΠ²Π° сС случи Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ubuntu Linux 16.04. Как Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠ°Π²Π° опСрация с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° прСстой ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ срСщнахмС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° актуализацията - ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² Ρ‚Π°Π·ΠΈ статия.

ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

Всяка актуализация Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π°ΠΉ-вСроятно Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΏΡ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ: ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² изискванията Π·Π° ограничСния Π½Π° систСмнитС рСсурси ΠΈ корСкция Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ изчистСни ΠΎΡ‚ остарСли Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅, Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ справка с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация:

И Π½Π΅ΠΊΠ° ΡΡŠΡΡ‚Π°Π²ΠΈΠΌ ΠΏΠ»Π°Π½ Π·Π° дСйствиС:

  1. ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ остарСлитС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.
  3. АктуализирайтС ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· инсталиранС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° percona-server-server.
  4. АктуализирайтС главния Ρ„Π°ΠΉΠ» със ΡΡŠΡ‰ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ всяка Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΡ‚ ΠΏΠ»Π°Π½Π° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€ΠΊΠ°.

Π’ΠΠ–ΠΠž! ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° MySQL ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Galera, ΠΈΠΌΠ° свои собствСни Ρ‚ΡŠΠ½ΠΊΠΎΡΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са описани Π² статията. НС трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ инструкция Π² Ρ‚ΠΎΠ·ΠΈ случай.

Част 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅

MySQL бСшС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ във вСрсия 8 query_cache. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠΉ бСшС обявСн Π·Π° остарял Π½Π°Π·Π°Π΄ във вСрсия 5.7, Π½ΠΎ сСга напълно ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ. А Π·Π° Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚Π΅ заявки Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ външни инструмСнти - Π½Π°ΠΏΡ€. ProxySQL.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π² конфигурацията имашС остарСли Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ Π·Π° innodb_file_format. Ако Π² MySQL 5.7 бСшС възмоТно Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ InnoDB Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‚ΠΎΠ³Π°Π²Π° 8-Ρ‚Π° вСрсия Π²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ само с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Barracuda.

ΠΠ°ΡˆΠΈΡΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° слСднитС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ:

  • query_cache_type, query_cache_limit ΠΈ query_cache_size;
  • innodb_file_format ΠΈ innodb_file_format_max.

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Docker ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Percona Server. Π©Π΅ поставим конфигурацията Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π² дирСкторията mysql_config_test, Π° Π΄ΠΎ Π½Π΅Π³ΠΎ Ρ‰Π΅ създадСм Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° тСст Π·Π° конфигурация Π½Π° Percona-ΡΡŠΡ€Π²ΡŠΡ€:

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

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка: Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Docker ΠΈΠ»ΠΈ Π² дирСкторията с Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ - Π² зависимост ΠΎΡ‚ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ - Ρ‰Π΅ сС появи Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ описани ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅:

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.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ всС ΠΎΡ‰Π΅ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈΡ‚Π΅ ΠΈ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ остарялата Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° expire-logs-days.

Част 2: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ инсталации

ДокумСнтацията Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° 2 ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° администратора Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π°Ρ‚Π° структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с класичСската ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° mysqlcheck. ΠŸΡ€ΠΎΡΡ‚ΠΎ стартирайтС:

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

Ако Π½Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Ρ‰Π΅ ΠΈΠ·Π»Π΅Π·Π΅ с ΠΊΠΎΠ΄ 0:

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

ОсвСн Ρ‚ΠΎΠ²Π° Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ вСрсии Π½Π° MySQL Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° mysql-shell (Π² случая Π½Π° Percona Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ percona-mysql-shell). Π’ΠΎΠΉ Π΅ замСститСл Π½Π° класичСския mysql ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π½Π° SQL ΠΊΠΎΠ΄ ΠΈ инструмСнти Π·Π° администриранС Π½Π° MySQL. Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΏΡ€Π΅Π΄ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡ€Π΅Π· Π½Π΅Π³ΠΎ:

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

Π•Ρ‚ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅:

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

ΠšΠ°Ρ‚ΠΎ цяло, Π½ΠΈΡ‰ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ - само прСдупрСТдСния Π·Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ (Π²ΠΈΠΆ ΠΎΡ‚Π΄ΠΎΠ»Ρƒ). ΠžΠ±Ρ‰ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ:

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

Π Π΅ΡˆΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ актуализацията трябва Π΄Π° Π²ΡŠΡ€Π²ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π‘Π΅Π»Π΅ΠΆΠΊΠ° относно прСдупрСТдСнията ΠΏΠΎ-Π³ΠΎΡ€Π΅, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ UTF-8 Π² MySQL доскоро Π½Π΅ бСшС "истински" UTF-8, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° само 3 Π±Π°ΠΉΡ‚Π° вмСсто 4. Π’ MySQL 8 Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-накрая Ρ€Π΅ΡˆΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈ: псСвдоним utf8 скоро Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ utf8mb4, Π° старитС ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ Ρ‰Π΅ станат utf8mb3. Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ utf8mb3 Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ, Π½ΠΎ Π½Π΅ ΠΈ Π² Ρ‚Π°Π·ΠΈ вСрсия. Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π² Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π°Ρ‚Π° инсталация Π½Π° Π‘Π£Π‘Π”, слСд ΠΊΠ°Ρ‚ΠΎ я Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅.

Част 3: Π‘ΡŠΡ€Π²ΡŠΡ€Π½ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Какво ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€ΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ ΠΏΠ»Π°Π½?.. Π Π°Π·Π±ΠΈΡ€Π°ΠΉΠΊΠΈ Π΄ΠΎΠ±Ρ€Π΅, Ρ‡Π΅ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ сС случват, Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΎΡ…ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ СкспСримСнт Π²ΡŠΡ€Ρ…Ρƒ MySQL dev ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация ΠΎΠ±Ρ…Π²Π°Ρ‰Π° Π²ΡŠΠΏΡ€ΠΎΡΠ° Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° MySQL ΡΡŠΡ€Π²ΡŠΡ€ΠΈ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. Π˜Π·Π²ΠΎΠ΄ΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ всички Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (slave), Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ MySQL 8 ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π° ΠΎΡ‚ Π³Π»Π°Π²Π½Π° вСрсия 5.7. Π˜Π·Π²Π΅ΡΡ‚Π½Π° трудност сС ΠΊΡ€ΠΈΠ΅ във Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° майстор <-> майстор, ΠΊΠΎΠ³Π°Ρ‚ΠΎ дистанционното ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅. ВоСст Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ бойният Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ΠΈΠ²Π° към Π΅Π΄ΠΈΠ½ Ρ†Π΅Π½Ρ‚ΡŠΡ€ Π·Π° Π΄Π°Π½Π½ΠΈ, Π° вторият Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π΅Π½.

Вопологията ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

Актуализацията трябва Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ mysql Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° dc 2, mysql master dc 2 ΠΈ mysql replica dc 1, ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ със ΡΡŠΡ€Π²ΡŠΡ€Π° mysql master dc 1. Π—Π° Π΄Π° смС ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ, спряхмС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ машини, Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки ΠΈ нСпосрСдствСно ΠΏΡ€Π΅Π΄ΠΈ актуализацията спряхмС рСпликацията с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° STOP SLAVE. ΠžΡΡ‚Π°Π½Π°Π»Π°Ρ‚Π° част ΠΎΡ‚ актуализацията ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

  1. РСстартирамС всяка Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ добавямС 3 ΠΎΠΏΡ†ΠΈΠΈ към ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅: skip-networking, skip-slave-start, skip-log-bin. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° систСмнитС Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ. Π’Π΅Π·ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‚, Ρ‡Π΅ няма Π΄Π° ΠΈΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ информацията Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° систСмни Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ няма Π΄Π° бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ възобновяванС Π½Π° рСпликацията.
  2. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° percona-server-server. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π² MySQL вСрсия 8 Π½Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° mysqlupgrade слСд актуализация Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°.
  3. Π‘Π»Π΅Π΄ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ стартиранС, рСстартирамС ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ - Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ бяха Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² ΠΏΡŠΡ€Π²ΠΈΡ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„.
  4. УвСрявамС сС, Ρ‡Π΅ рСпликацията Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ: ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ SHOW SLAVE STATUS ΠΈ Π²ΠΈΠΆΡ‚Π΅, Ρ‡Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ с броячи Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ са Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ.

Всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° доста просто: актуализацията Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ бСшС ΡƒΡΠΏΠ΅ΡˆΠ½Π°. Π”ΠΎΠ±Ρ€Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ спокойно Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΎΡ‰Π½Π° актуализация Π·Π° производство.

НямашС Ρ‚ΡŠΠ³Π° - Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ ΠΎΠΏΠΈΡ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ към производството Π½Π΅ бСшС Π±Π΅Π· ΠΈΠ·Π½Π΅Π½Π°Π΄ΠΈ.

Π—Π° щастиС, самият процСс Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π° с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ срСщнахмС затруднСния, спряхмС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ…ΠΌΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π°Ρ‚Π° снимка. РазслСдванСто Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ бСшС ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ Π·Π° слСдващата сутрин. Π”Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ…Π° слСднитС записи:

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

ΠŸΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пощСнски ΡΠΏΠΈΡΡŠΡ†ΠΈ Π² Google Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ възниква ΠΏΠΎΡ€Π°Π΄ΠΈ Π“Ρ€Π΅ΡˆΠΊΠ° Π² MySQL. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-вСроятно Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° mysqlcheck ΠΈ mysqlsh.

Оказва сС, Ρ‡Π΅ MySQL ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ прСдставя Π΄Π°Π½Π½ΠΈ Π·Π° дСсСтични ΠΏΠΎΠ»Π΅Ρ‚Π° (int, tinyint ΠΈ Ρ‚.Π½.), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ mysql-ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ. Ако Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ бСшС във вСрсия 5.5 ΠΈΠ»ΠΈ 5.1 ΠΈ слСд Ρ‚ΠΎΠ²Π° стС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π»ΠΈ Π΄ΠΎ 5.7, Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ OPTIMIZE Π·Π° някои маси. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° MySQL Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ с Π΄Π°Π½Π½ΠΈ, ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΉΠΊΠΈ Π³ΠΈ Π² тСкущия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 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',
...

Π°ΠΊΠΎ field_type Ако ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° 0, Ρ‚ΠΎΠ³Π°Π²Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° старият Ρ‚ΠΈΠΏ - трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ OPTIMIZE. Ако ΠΎΠ±Π°Ρ‡Π΅ стойността Π΅ 246, Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΠΎΠ² Ρ‚ΠΈΠΏ. ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация Π·Π° Π²ΠΈΠ΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ΄.

НСщо ΠΏΠΎΠ²Π΅Ρ‡Π΅, Π² Ρ‚ΠΎΠ·ΠΈ бъг ОбмислямС Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° възмоТна ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, която Π½ΠΈ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ: липсата Π½Π° InnoDB Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π² систСмната Ρ‚Π°Π±Π»ΠΈΡ†Π° INNODB_SYS_TABLESPACES, Π°ΠΊΠΎ Ρ‚Π΅, Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, са създадСни във вСрсия 5.1. Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π΅Π½ SQL скрипт.

Π—Π°Ρ‰ΠΎ нямахмС Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° dev? Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ сС ΠΊΠΎΠΏΠΈΡ€Π° Ρ‚Π°ΠΌ ΠΎΡ‚ производството - ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ са ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈ.

Π—Π° съТалСниС, Π² Π΅Π΄Π½Π° наистина Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° голяма Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, няма Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ унивСрсална OPTIMIZE. percona-toolkit Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Ρ‚ΡƒΠΊ: ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° pt-online-schema-change Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½Π° Π·Π° ΠΎΠ½Π»Π°ΠΉΠ½ опСрацията OPTIMIZE.

Актуализираният ΠΏΠ»Π°Π½ изглСТдашС Ρ‚Π°ΠΊΠ°:

  1. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ всички Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.
  2. АктуализирайтС Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ.

Π—Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° всички Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ:

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

Π’Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Π±Π΅Π· дълги Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° създава Π½ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² която ΠΊΠΎΠΏΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ основната Ρ‚Π°Π±Π»ΠΈΡ†Π°. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π²Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ са ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° сС Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ сС замСня с Π½ΠΎΠ²Π°Ρ‚Π°. Π’ нашия случай Ρ‚Π΅ΡΡ‚ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ Π΅Π΄ΠΈΠ½ Π΄Π΅Π½, Π·Π° Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ всички Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Ρ‚Π²ΡŠΡ€Π΄Π΅ голямо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° дисковСтС.

Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ Ρ‚ΠΎΠ²Π°, Π² производството Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° към ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° --sleep със стойност 10 - Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ настройва ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ слСд ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ към Π½ΠΎΠ²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, Π°ΠΊΠΎ дСйствитСлно Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ изисква Π²Ρ€Π΅ΠΌΠ΅ Π·Π° рСакция.

Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° оптимизацията актуализацията бСшС ΡƒΡΠΏΠ΅ΡˆΠ½Π°.

... но нС напълно!

Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час слСд актуализацията ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΄ΠΎΠΉΠ΄Π΅ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ странно: ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ…Π° Π½ΡƒΠ»ΠΈΡ€Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ изглСТдашС Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°:

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

Π•ΠΊΡ€Π°Π½Π½Π°Ρ‚Π° снимка ΠΏΠΎΠΊΠ°Π·Π²Π° Ρ‚Ρ€ΠΈΠΎΠ½Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ някои ΠΎΡ‚ Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π½Π° MySQL ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ сС сриваха с Π³Ρ€Π΅ΡˆΠΊΠ°. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС появиха Π³Ρ€Π΅ΡˆΠΊΠΈ:

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

Π‘ΡŠΡ€Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ€Π°Π·ΠΊΡ€ΠΈ, Ρ‡Π΅ Π΄Π΅ΠΌΠΎΠ½ΡŠΡ‚ mysqld Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ рСсурси ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма. Π”ΠΎΠΊΠ°Ρ‚ΠΎ сортирахмС Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅ Π² систСмата "осираци" apparmor Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°:

# 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

Π’Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са създадСни ΠΏΡ€ΠΈ Π½Π°Π΄Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ MySQL 5.7 ΠΏΡ€Π΅Π΄ΠΈ няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ към ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚. Π˜Π·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ рСстартиранСто Π½Π° услугата 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

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Всяка, Π΄ΠΎΡ€ΠΈ Π½Π°ΠΉ-простата опСрация, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. И Π΄ΠΎΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠ±Ρ€Π΅ обмислСн ΠΏΠ»Π°Π½ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° очаквания Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π‘Π΅Π³Π° всички ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° актуализация, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ ΠΈΠΌΠ°, ΡΡŠΡ‰ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ почистванС Π½Π° Π½Π΅Π½ΡƒΠΆΠ½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° са сС появили Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΡΠΊΠΎΡ€ΠΎΡˆΠ½ΠΈ дСйствия.

И с Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ профСсионално Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΎ творчСство, Π±ΠΈΡ… искал Π΄Π° ΠΊΠ°ΠΆΠ° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ благодаря Π½Π° Percona Π·Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ!

АктуализиранС Π½Π° MySQL (Percona Server) ΠΎΡ‚ 5.7 Π½Π° 8.0

PS

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€