ืืืชืงืืืืช ืืื ื ืขืืืืช ืืืงืื, ืื ืฉืืกืืืืช ืืฉืืจืื ืืืจืกืืืช ืืืืจืื ืืช ืฉื MySQL ืืืคืืืช ืืืฉืื ืขืืช ืืืชืจ ืืืืชืจ. ืื ืืืื, ืืืื ืืคืจืืืงืืื ืฉืื ื, ืืืืข ืืืื ืืขืืื ืืช ืืืฉืืืืืช ืื ืขืื ืฉื Percona Server 5.7 ืืืจืกื 8. ืื ืื ืงืจื ืืคืืืคืืจืืช Ubuntu Linux 16.04. ืืืฆื ืืืฆืข ืคืขืืื ืืื ืืืื ืืืื ืืื ืืฉืืชื ืืืืืื ืืขืืืช ื ืชืงืื ื ืืืืื ืืขืืืื - ืงืจืื ืืืืืจ ืื.
ืืืจืื
ืื ืขืืืื ืฉื ืฉืจืช ืืกื ืื ืชืื ืื ืงืฉืืจ ืืื ืื ืจืื ืืงืืืขืช ืชืฆืืจื ืืืืฉ ืฉื ืืกื ืื ืชืื ืื: ืฉืื ืืืื ืืืจืืฉืืช ืืืืืืืช ืขื ืืฉืืื ืืขืจืืช ืืชืืงืื ืฉื ืชืฆืืจืืช ืืกื ืื ืชืื ืื ืฉืืฉ ืื ืงืืช ืืื ืืืืช ืืืืฉื ืืช.
ืืคื ื ืืขืืืื, ืืืืื ื ืคื ื ืืชืืขืื ืืจืฉืื:
-
ืืขืจืืช ืฉืืจืืจ ืฉื MySQL 8 ; -
ืืืจืื ืืฉืืจืื MySQL ; -
ืืืจืื ืขืืืื ืฉื Percona ; -
ืืืจืื MySQL ืืขืืืื ืืขืชืงืื ืืืืกืืจืื .
ืืืืื ื ืขืจืื ืชืืื ืืช ืคืขืืื:
- ืชืงื ืงืืฆื ืชืฆืืจื ืขื ืืื ืืกืจืช ืื ืืืืช ืืืืฉื ืืช.
- ืืืืง ืชืืืืืช ืขื ืืื ืขืืจ.
- ืขืืื ืืกืื ื ืชืื ืื ืฉื ืขืืืื ืขื ืืื ืืชืงื ืช ืืืืืื
percona-server-server
. - ืขืืื ืืช ืืืืกืืจ ืขื ืืืชื ืืืืื.
ืืืื ื ืกืชืื ืขื ืื ื ืงืืื ืืชืืื ืืช ืื ืจืื ืื ืืืื ืืืฉืชืืฉ.
ืืฉืื! ืืืืื ืขืืืื ืืฉืืื MySQL ืืืืืกืก ืขื Galera ืืฉ ืืงืืืืช ืืฉืื ืฉืืื ื ืืชืืืจืืช ืืืืืจ. ืืื ืืืฉืชืืฉ ืืืืจืื ืื ืืืงืจื ืื.
ืืืง 1: ืืืืงืช ืืืืจืืช
MySQL ืืืกืจ ืืืจืกื 8 query_cache
. ืืขืฆื ืืื ืืื
ืื ืืชืฆืืจื ืืื ืื ืืืืช ืืืืฉื ืืช ืืืื 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 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
ืืืื ืืชืืืืืช ืฉืงืืืื ื:
ืืืืคื ืืืื, ืฉืื ืืืจ ืงืจืืื - ืจืง ืืืืจืืช ืืืื ืงืืืืืื (ืจืื ืืืื). ืชืืฆืืช ืืืฆืืข ืืืืืช:
ืืืืื ื ืฉืืขืืืื ืืขืืืจ ืืื ืืขืืืช.
ืืขืจื ืืืื ืืืืืจืืช ืืขืื ืืืฆืืื ืช ืืขืืืช ืขื ืงืืืืืื. ืืขืืืื ืืื ืื UTF-8 ื-MySQL ืขื ืืืืจืื ื utf8
ืืงืจืื ืืืืื ืืงืืืื utf8mb4
, ืืืขืืืืืช ืืืฉื ืืช ืืืืืืืช ืืืคืื utf8mb3
. ืงืืืื ื ืืกืฃ utf8mb3
ืืืกืจ, ืื ืื ืืืืืืจื ืื. ืืื, ืืืืื ื ืืชืงื ืืช ืืงืืืืืื ืืืจ ืืืชืงื ืช ื-DBMS ืืคืืขืืช, ืืืืจ ืฉืขืืื ื ืืืชื.
ืืืง 3: ืขืืืื ื ืฉืจืช
ืื ืืืื ืืืฉืชืืฉ ืืฉืืฉ ืชืืื ืืช ืื ืื ืืืื?.. ืืชืื ืืื ื ืืืื ืฉื ืืืื ืกืื ืชืืื ืงืืจืื, ืขืจืื ื ืืช ืื ืืกืื ืืจืืฉืื ืขื ืืฉืืื ืืคืชืืื ืฉื MySQL.
ืืืืืจ,
ืืืืคืืืืืื ื ืจืืืช ืื:
ืืขืืืื ืืืื ืืืชืืื ืขื ืืขืชืงืื mysql replica dc 2, mysql master dc 2 ะธ mysql replica dc 1
, ืืืกืืื ืืฉืจืช mysql master dc 1. ืืื ืืืืืช ืืืชืจ ืืืื, ืขืฆืจื ื ืืช ืืืืื ืืช ืืืืืจืืืืืืืช, ืฆืืืื ื ืืืชื ืืืื ืืคื ื ืืขืืืื ืืคืกืงื ื ืืช ืืฉืืคืื ืขื ืืคืงืืื STOP SLAVE
. ืฉืืจ ืืขืืืื ื ืจืื ืื:
- ืื ื ืืคืขืืืื ืืืืฉ ืื ืขืืชืง ืขื ืืื ืืืกืคืช 3 ืืคืฉืจืืืืช ืืืืืจืืช:
skip-networking
,skip-slave-start
,skip-log-bin
. ืืขืืืื ืืื ืฉืขืืืื ืืกื ืื ืชืื ืื ืืืฆืจ ืืืื ืื ืืื ืืจืืื ืขื ืขืืืื ืื ืืืืืืืช ืืืขืจืืช. ืื ืืืืช ืืื ืืืืืืืช ืฉืื ืืืื ืฉืื ืืืื ืื ืชืื ื ืืืคืืืงืฆืื ืืืกื ืื ืชืื ืื, ืืืืืข ืขื ืขืืืื ืืืืืืช ืืขืจืืช ืื ืืืืื ืืืืื ืื ืืืื ืืจืืื. ืื ืืื ืข ืืขืืืช ืืขืช ืืืืืฉ ืืฉืืคืื. - ืืชืงื ืช ืืืืืื
percona-server-server
. ืืฉืื ืืฆืืื ืฉื-MySQL ืืจืกื 8 ืื ืืชื ืฆืจืื ืืืคืขืื ืืช ืืคืงืืืmysqlupgrade
ืืืืจ ืขืืืื ืืฉืจืช. - ืืืืจ ืืชืืื ืืืฆืืืช, ืื ื ืืคืขืืืื ืืืืฉ ืืช ืืฉืจืช ืืืืฉ - ืืื ืืคืจืืืจืื ืฉื ืืกืคื ืืคืกืงื ืืจืืฉืื ื.
- ืื ื ืืืืืืื ืฉืืฉืืคืื ืขืืื ืืืฆืืื: ืืืืง
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
ืืืงืจ ืืืจืืืื ืื ืฉื ืจืฉืืืืช ืชืคืืฆื ืฉืื ืืช ืืืืื ืืืืื ืืืื ื ืื ืืขืื ืื ืืชืจืืฉืช ืขืงื 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_SYS_TABLESPACES
, ืื ืื, ืืืืืืช, ื ืืฆืจื ืืืจืกื 5.1. ืืื ืืื ืืข ืืขืืืช ืืขืช ืขืืืื, ืืชื ืืืื ืืืฉืชืืฉ
ืืื ืื ืืื ืื ื ืืขืืืช ืืืื ื-dev? ืืกื ืื ืชืื ืื ืืืขืชืง ืืฉื ืืขืช ืืขืช ืืืคืงื - ืื, ืืืืืืช ื ืืฆืจืืช ืืืืฉ.
ืืืจืื ืืฆืขืจ, ืืืกื ื ืชืื ืื ืืืื ืฉืขืืื ืืืืช, ืื ืชืืื ืคืฉืื ืืงืืช ืืืืฆืข ืืื ืืืจืกืื OPTIMIZE
. percona-toolkit ืืขืืืจ ืืื: ืืื ืืฉืืจืืช pt-online-schema-change ืืฆืืื ืืคืขืืืช OPTIMIZE ืืืงืืื ืช.
ืืชืืื ืืช ืืืขืืืื ืช ื ืจืืชื ืื:
- ืืฆืข ืืืคืืืืืืฆืื ืฉื ืื ืืืืืืืช.
- ืขืืื ืืช ืืกืื ืื ืชืื ืื.
ืืื ืืืืืง ืืืช ืืืืงืืื ืืืืืช ืืช ืืื ืืขืืืื, ืืฉืืชื ื ืืช ืืืช ืืืขืืชืงืื ืืืจืฆื ื ืืช ืืคืงืืื ืืืื ืขืืืจ ืื ืืืืืืืช:
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 ืงืจืกื ืืขืช ืืขืช ืขื ืฉืืืื. ืืืคืืขื ืฉืืืืืช ืืืคืืืงืฆืื:
[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
ืืกืืืื
ืื ืคืขืืื, ืืคืืื ืืคืฉืืื ืืืืชืจ, ืืืืื ืืืืืื ืืืขืืืช ืืืชื ืฆืคืืืืช. ืืืคืืื ืชืืื ืืช ืืืืฉืืช ืืืื ืื ืชืืื ืืืืืื ืืช ืืชืืฆืื ืืฆืคืืื. ืืขืช, ืื ืชืืื ืืืช ืขืืืื ืฉืืฆืืืช ืฉืื ื ืืืืืืช ืื ื ืืงืื ืืืื ืฉื ืงืืฆืื ืืืืชืจืื ืฉืืืืืื ืืื ืืืืคืืข ืืชืืฆืื ืืคืขืืืืช ืืืจืื ืืช.
ืืขื ืืืฆืืจืชืืืช ืืืจืคืืช ืืื ืื ืื ืืงืฆืืขืืช ืืื, ืื ื ืจืืฆื ืืืืื ืชืืื ืขื ืงืืช ืืคืจืงืื ื ืขื ืืืืฆืจืื ืืืขืืืื ืฉืืื!
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืืกืื ื ืชืื ืื ื-Kubernetes (ืกืงืืจื ืืืื ืืืืื) "; - ยซ
ืขืฆืืช ืืืจืืงืื ืฉื Kubernetes: ืืืจืื ืืชืืื ืขืืืจ ืืกืื ื ืชืื ืื ืืืืืื "; - ยซ
6 ืกืืคืืจืื ืืขืฉืืื ืืืื ืืืืืืื ืฉืื ื ื-SRE "; - ยซ
ืกืืคืืจ ืืื ืขื ืืคืขืื Redis ื-K8s ืืืื ื ืกืงืืจื ืฉื ืืื ืขืืจ ืื ืืชืื ื ืชืื ืื ืืืกื ื ืชืื ืื ืื "; - ยซ
ืืขืืจื ืืืงื ืฉื MongoDB ื-Kubernetes ".
ืืงืืจ: www.habr.com