ืขื“ื›ื•ืŸ MySQL (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ืขื“ื›ื•ืŸ MySQL (ืฉืจืช ืคืจืงื•ื ื”) ืž-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 ื›ื‘ืจ ืขื•ื‘ื“ืช ืจืง ืขื ืคื•ืจืžื˜ ื‘ืจืงื•ื“ื”.

ื”ืชื•ืฆืื” ืฉืœื ื• ื”ื™ื ื”ืกืจืช ื”ื”ื ื—ื™ื•ืช ื”ื‘ืื•ืช:

  • 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 logs ืื• ื‘ืกืคืจื™ื” ืขื ื”-logs - ืชืœื•ื™ ื‘ื”ื’ื“ืจื•ืช ืฉืœืš - ื™ื•ืคื™ืข ืงื•ื‘ืฅ ืฉื‘ื• ื™ืชื•ืืจื• ื”ื”ื ื—ื™ื•ืช ื”ื‘ืขื™ื™ืชื™ื•ืช.

ื”ื ื” ืžื” ืฉื”ื™ื” ืœื ื•:

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 (ืฉืจืช ืคืจืงื•ื ื”) ืž-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 (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ื‘ืื•ืคืŸ ื›ืœืœื™, ืฉื•ื ื“ื‘ืจ ืงืจื™ื˜ื™ - ืจืง ืื–ื”ืจื•ืช ืœื’ื‘ื™ ืงื™ื“ื•ื“ื™ื (ืจืื” ืœืžื˜ื”). ืชื•ืฆืืช ื‘ื™ืฆื•ืข ื›ื•ืœืœืช:

ืขื“ื›ื•ืŸ MySQL (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ื”ื—ืœื˜ื ื• ืฉื”ืขื“ื›ื•ืŸ ื™ืขื‘ื•ืจ ืœืœื ื‘ืขื™ื•ืช.

ื”ืขืจื” ืœื’ื‘ื™ ื”ืื–ื”ืจื•ืช ืœืขื™ืœ ื”ืžืฆื™ื™ื ืช ื‘ืขื™ื•ืช ืขื ืงื™ื“ื•ื“ื™ื. ื”ืขื•ื‘ื“ื” ื”ื™ื ื›ื™ UTF-8 ื‘-MySQL ืขื“ ืœืื—ืจื•ื ื” ืœื ื”ื™ื” UTF-8 "ืืžื™ืชื™"., ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืื—ืกืŸ ืจืง 3 ื‘ืชื™ื ื‘ืžืงื•ื 4. ื‘-MySQL 8 ื–ื” ืกื•ืฃ ืกื•ืฃ ืืคืฉืจื™ ื”ื—ืœื™ื˜ ืœืชืงืŸ ืืช ื–ื”: ื›ื™ื ื•ื™ utf8 ื‘ืงืจื•ื‘ ื™ื•ื‘ื™ืœ ืœืงื™ื“ื•ื“ utf8mb4, ื•ื”ืขืžื•ื“ื•ืช ื”ื™ืฉื ื•ืช ื‘ื˜ื‘ืœืื•ืช ื™ื”ืคื›ื• utf8mb3. ืงื™ื“ื•ื“ ื ื•ืกืฃ utf8mb3 ื™ื•ืกืจ, ืืš ืœื ื‘ืžื”ื“ื•ืจื” ื–ื•. ืœื›ืŸ, ื”ื—ืœื˜ื ื• ืœืชืงืŸ ืืช ื”ืงื™ื“ื•ื“ื™ื ื›ื‘ืจ ื‘ื”ืชืงื ืช ื”-DBMS ื”ืคื•ืขืœืช, ืœืื—ืจ ืฉืขื“ื›ื ื• ืื•ืชื”.

ื—ืœืง 3: ืขื“ื›ื•ื ื™ ืฉืจืช

ืžื” ื™ื›ื•ืœ ืœื”ืฉืชื‘ืฉ ื›ืฉื™ืฉ ืชื•ื›ื ื™ืช ื›ืœ ื›ืš ื—ื›ืžื”?.. ืžืชื•ืš ื”ื‘ื ื” ื˜ื•ื‘ื” ืฉื ื™ื•ืื ืกื™ื ืชืžื™ื“ ืงื•ืจื™ื, ืขืจื›ื ื• ืืช ื”ื ื™ืกื•ื™ ื”ืจืืฉื•ืŸ ืขืœ ืืฉื›ื•ืœ ืžืคืชื—ื™ื ืฉืœ MySQL.

ื›ืืžื•ืจ, ืชื™ืขื•ื“ ืจืฉืžื™ ืžื›ืกื” ืืช ื”ื ื•ืฉื ืฉืœ ืขื“ื›ื•ืŸ ืฉืจืชื™ MySQL ืขื ื”ืขืชืงื™ื. ื”ืฉื•ืจื” ื”ืชื—ืชื•ื ื” ื”ื™ื ืฉืชื—ื™ืœื” ืขืœื™ืš ืœืขื“ื›ืŸ ืืช ื›ืœ ื”ื”ืขืชืงื™ื (ืขื‘ื“ื™ื), ืฉื›ืŸ MySQL 8 ื™ื›ื•ืœ ืœืฉื›ืคืœ ืžื’ืจืกื” ืžืืกื˜ืจ 5.7. ืงื•ืฉื™ ืžืกื•ื™ื ื˜ืžื•ืŸ ื‘ืขื•ื‘ื“ื” ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ืžืฆื‘ ืžืืกื˜ืจ <-> ืžืืกื˜ืจ, ื›ืืฉืจ ื”ืžืืกื˜ืจ ื”ืžืจื•ื—ืง ื‘ืžืฆื‘ ืœืงืจื™ืื” ื‘ืœื‘ื“. ื›ืœื•ืžืจ, ืœืžืขืฉื”, ืชืขื‘ื•ืจืช ืงืจื‘ ืขื•ื‘ืจืช ืœืžืจื›ื– ื ืชื•ื ื™ื ืื—ื“, ื•ื”ืฉื ื™ ื”ื•ื ื’ื™ื‘ื•ื™.

ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ื ืจืื™ืช ื›ืš:

ืขื“ื›ื•ืŸ MySQL (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ื”ืขื“ื›ื•ืŸ ื—ื™ื™ื‘ ืœื”ืชื—ื™ืœ ืขื ื”ืขืชืงื™ื mysql replica 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

ืžื—ืงืจ ื‘ืืจื›ื™ื•ื ื™ื ืฉืœ ืจืฉื™ืžื•ืช ืชืคื•ืฆื” ืฉื•ื ื•ืช ื‘ื’ื•ื’ืœ ื”ื•ื‘ื™ืœ ืœื”ื‘ื ื” ื›ื™ ื‘ืขื™ื” ื–ื• ืžืชืจื—ืฉืช ืขืงื‘ ื‘ืื’ MySQL. ืœืžืจื•ืช ืฉืกื‘ื™ืจ ื™ื•ืชืจ ืฉื–ื” ื‘ืื’ ืฉื™ืจื•ืช mysqlcheck ะธ mysqlsh.

ืžืกืชื‘ืจ ืฉ-MySQL ืฉื™ื ืชื” ืืช ื”ืื•ืคืŸ ืฉื‘ื• ื”ื ืžื™ื™ืฆื’ื™ื ื ืชื•ื ื™ื ืขื‘ื•ืจ ืฉื“ื•ืช ืขืฉืจื•ื ื™ื™ื (int, tinyint ื•ื›ื•'), ืื– mysql-server ืžืฉืชืžืฉ ื‘ื“ืจืš ืื—ืจืช ืœืื—ืกื•ืŸ ืื•ืชื. ืื ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš ื‘ืชื—ื™ืœื” ื”ื™ื” ื‘ื’ืจืกื” 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 (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ืฆื™ืœื•ื ื”ืžืกืš ืžืฆื™ื’ ื’ืจืฃ ืขื ืฉืŸ ืžืกื•ืจ ืขืงื‘ ื”ืขื•ื‘ื“ื” ืฉื—ืœืง ืžื”ืฉืจืฉื•ืจื™ื ืฉืœ ืฉืจืช MySQL ืงืจืกื• ืžืขืช ืœืขืช ืขื ืฉื’ื™ืื”. ื”ื•ืคื™ืขื• ืฉื’ื™ืื•ืช ื‘ืืคืœื™ืงืฆื™ื”:

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

ื‘ื“ื™ืงื” ืžื”ื™ืจื” ืฉืœ ื”ื™ื•ืžื ื™ื ื’ื™ืœืชื” ืฉื”ื“ืžื•ืŸ mysqld ืœื ื™ื›ื•ืœ ืœื”ืฉื™ื’ ืืช ื”ืžืฉืื‘ื™ื ื”ื ื“ืจืฉื™ื ืžืžืขืจื›ืช ื”ื”ืคืขืœื”. ืชื•ืš ื›ื“ื™ ืžื™ื•ืŸ ืฉื’ื™ืื•ืช, ื’ื™ืœื™ื ื• ื‘ืžืขืจื›ืช ืงื‘ืฆื™ ืžื“ื™ื ื™ื•ืช ืœื‘ื•ืฉ "ื™ืชื•ืžื™ื".:

# 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

ืœืกื™ื›ื•ื

ื›ืœ ืคืขื•ืœื”, ืืคื™ืœื• ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ื™ื›ื•ืœื” ืœื”ื•ื‘ื™ืœ ืœื‘ืขื™ื•ืช ื‘ืœืชื™ ืฆืคื•ื™ื•ืช. ื•ืืคื™ืœื• ืชื•ื›ื ื™ืช ืžื—ื•ืฉื‘ืช ื”ื™ื˜ื‘ ืœื ืชืžื™ื“ ืžื‘ื˜ื™ื—ื” ืืช ื”ืชื•ืฆืื” ื”ืฆืคื•ื™ื”. ื›ืขืช, ื›ืœ ืชื•ื›ื ื™ื•ืช ืขื“ื›ื•ืŸ ืฉื”ืฆื•ื•ืช ืฉืœื ื• ื›ื•ืœืœื•ืช ื’ื ื ื™ืงื•ื™ ื—ื•ื‘ื” ืฉืœ ืงื‘ืฆื™ื ืžื™ื•ืชืจื™ื ืฉื™ื›ื•ืœื™ื ื”ื™ื• ืœื”ื•ืคื™ืข ื›ืชื•ืฆืื” ืžืคืขื•ืœื•ืช ืื—ืจื•ื ื•ืช.

ื•ืขื ื”ื™ืฆื™ืจืชื™ื•ืช ื”ื’ืจืคื™ืช ื”ืœื ื›ืœ ื›ืš ืžืงืฆื•ืขื™ืช ื”ื–ื•, ืื ื™ ืจื•ืฆื” ืœื”ื’ื™ื“ ืชื•ื“ื” ืขื ืงื™ืช ืœืคืจืงื•ื ื” ืขืœ ื”ืžื•ืฆืจื™ื ื”ืžืขื•ืœื™ื ืฉืœื”ื!

ืขื“ื›ื•ืŸ MySQL (ืฉืจืช ืคืจืงื•ื ื”) ืž-5.7 ืœ-8.0

ื .ื‘.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”