์ง์ ์ด ์ ์ฒด๋์ง ์์ ์ต์ ๋ฒ์ ์ MySQL๋ก ์
๊ทธ๋ ์ด๋ํด์ผ ํ๋ ์ด์ ๊ฐ ์ ์ ๋ ์ค๋๋ ฅ์ ์ป๊ณ ์์ต๋๋ค. ์ผ๋ง ์ ์ฐ๋ฆฌ ํ๋ก์ ํธ ์ค ํ๋์์ ์๋ํ Percona Server 5.7 ํด๋ฌ์คํฐ๋ฅผ ๋ฒ์ 8๋ก ์
๋ฐ์ดํธํ ๋๊ฐ ๋์์ต๋๋ค. ์ด ๋ชจ๋ ์ผ์ Ubuntu Linux 16.04 ํ๋ซํผ์์ ๋ฐ์ํ์ต๋๋ค. ๊ฐ๋ ์ค์ง ์๊ฐ์ ์ต์ํํ๋ฉด์ ์ด๋ฌํ ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ๊ณผ ์
๋ฐ์ดํธ ์ค์ ๋ฐ์ํ ๋ฌธ์ ๋ ์ด ๊ธฐ์ฌ์์ ์ฝ์ด๋ณด์ธ์.
ํ๋ จ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฆ, ์์คํ ๋ฆฌ์์ค ์ ํ์ ๋ํ ์๊ตฌ ์ฌํญ ๋ณ๊ฒฝ ๋ฐ ์ค๋๋ ์ง์๋ฌธ์ ์ง์์ผ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ ์์ ์ ๋๋ค.
์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ฐ๋์ ์ฐธ๊ณ ํ์ธ์.
-
MySQL 8 ๋ฆด๋ฆฌ์ค ๋ ธํธ ; -
MySQL ์ ๊ทธ๋ ์ด๋ ๊ฐ์ด๋ ; -
ํ๋ฅด์ฝ๋ ์ ๋ฐ์ดํธ ์๋ด ; -
๋ณต์ ๋ณธ ๋ฐ ๋ง์คํฐ ์ ๋ฐ์ดํธ์ ๋ํ MySQL ๊ฐ์ด๋ .
๊ทธ๋ฆฌ๊ณ ํ๋ ๊ณํ์ ์ธ์ ๋ด ์๋ค.
- ์ค๋๋ ์ง์์ด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ตฌ์ฑ ํ์ผ์ ์์ ํ์ธ์.
- ์ ํธ๋ฆฌํฐ์์ ํธํ์ฑ์ ํ์ธํ์ญ์์ค.
- ํจํค์ง๋ฅผ ์ค์นํ์ฌ ์ฌ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์
๋ฐ์ดํธ
percona-server-server
. - ๋์ผํ ํจํค์ง๋ก ๋ง์คํฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
๊ณํ์ ๊ฐ ์ง์ ์ ์ดํด๋ณด๊ณ ๋ฌด์์ด ์๋ชป๋ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์! Galera๋ฅผ ๊ธฐ๋ฐ์ผ๋ก MySQL ํด๋ฌ์คํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ ์ฐจ์๋ ๊ธฐ์ฌ์ ์ค๋ช ๋์ง ์์ ์์ฒด์ ์ธ ์ธ๋ถ ์ฌํญ์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ด ์ง์นจ์ ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค.
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
.
ํ์ธ์ ์ํด Percona Server์ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ์๋ฒ ๊ตฌ์ฑ์ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํฉ๋๋ค. 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๋ถ: ์๋ ์ค์ธ ์ค์น ํ์ธ
์ ๋ฐ์ดํธ ๋ฌธ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธํ์ฑ์ ํ์ธํ๋ ๋ ๊ฐ์ง ์ ํธ๋ฆฌํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์๊ฐ ๊ธฐ์กด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํธํ์ฑ์ ํ์ธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ณ ์ ์ ์ธ 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
์ฐ๋ฆฌ๊ฐ ๋ฐ์ ์๊ฒฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ค์ํ ๊ฒ์ ์์ต๋๋ค. ์ธ์ฝ๋ฉ์ ๋ํ ๊ฒฝ๊ณ ๋ง ์์ต๋๋ค. (์๋ ์ฐธ์กฐ). ์ ์ฒด ์คํ ๊ฒฐ๊ณผ:
์ฐ๋ฆฌ๋ ์
๋ฐ์ดํธ๊ฐ ๋ฌธ์ ์์ด ์งํ๋์ด์ผ ํ๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค.
์ธ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ๋ํ๋ด๋ ์์ ๊ฒฝ๊ณ ์ ๋ํ ์ฐธ๊ณ ์ฌํญ์
๋๋ค. ์ฌ์ค ์ต๊ทผ๊น์ง MySQL์ UTF-8์ utf8
๊ณง ์ฝ๋ฉ์ผ๋ก ์ด์ด์ง ๊ฒ์ด๋ค utf8mb4
, ํ
์ด๋ธ์ ์ด์ ์ด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. utf8mb3
. ์ถ๊ฐ ์ธ์ฝ๋ฉ utf8mb3
์ ๊ฑฐ๋ ์์ ์ด์ง๋ง ์ด๋ฒ ๋ฆด๋ฆฌ์ค์์๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์
๋ฐ์ดํธ ํ ์คํ ์ค์ธ DBMS ์ค์น์ ์ด๋ฏธ ์๋ ์ธ์ฝ๋ฉ์ ์์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
3๋ถ: ์๋ฒ ์ ๋ฐ์ดํธ
์ด๋ฐ ํ๋ช ํ ๊ณํ์ด ์์ผ๋ฉด ๋ฌด์์ด ์๋ชป๋ ์ ์์ต๋๊น?.. ๋ฏธ๋ฌํ ์ฐจ์ด๋ ํญ์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์ ์ดํดํ๊ณ MySQL ๊ฐ๋ฐ ํด๋ฌ์คํฐ์์ ์ฒซ ๋ฒ์งธ ์คํ์ ์ํํ์ต๋๋ค.
์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด,
ํ ํด๋ก์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์
๋ฐ์ดํธ๋ ๋ณต์ ๋ณธ์ผ๋ก ์์๋์ด์ผ ํฉ๋๋ค. mysql ๋ณต์ ๋ณธ dc 2, mysql ๋ง์คํฐ dc 2 ะธ mysql replica dc 1
, mysql ๋ง์คํฐ 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
Google์ ๋ค์ํ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ์์นด์ด๋ธ๋ฅผ ์กฐ์ฌํ ๊ฒฐ๊ณผ ์ด โโ๋ฌธ์ ๊ฐ ๋ค์์ผ๋ก ์ธํด ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. 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์์ ์์ฑ๋ ๊ฒฝ์ฐ. ์
๋ฐ์ดํธ ์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ๋ฐํ์์๋ ์ ๊ทธ๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์๋์? ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ก๋์ ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณต์ฌ๋ฉ๋๋ค. ํ ์ด๋ธ์ด ๋ค์ ์์ฑ๋ฉ๋๋ค..
๋ถํํ๊ฒ๋ ์ค์ ๋ก ์๋ํ๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ฒ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ ธ์์ ์คํํ ์๋ ์์ต๋๋ค. 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 - ์ด ๋งค๊ฐ๋ณ์๋ ๋ฐ์ดํฐ ๋ฐฐ์น๋ฅผ ์ ํ
์ด๋ธ๋ก ์ ์กํ ํ ๋๊ธฐ ์๊ฐ์ ์กฐ์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ค์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ต ์๊ฐ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ ๋ก๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์ต์ ํ๋ฅผ ์ํํ ํ ์ ๋ฐ์ดํธ๊ฐ ์ฑ๊ณตํ์ต๋๋ค.
... ํ์ง๋ง ์์ ํ๋ ์๋๋๋ค!
์ ๋ฐ์ดํธ ํ XNUMX๋ถ ์ด๋ด์ ํด๋ผ์ด์ธํธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋งค์ฐ ์ด์ํ๊ฒ ์๋ํ์ต๋๋ค. ์ฃผ๊ธฐ์ ์ผ๋ก ์์๋์์ต๋๋ค. ์ฐ๊ฒฐ ์ฌ์ค์ . ๋ชจ๋ํฐ๋ง์ ํด๋ณด๋ ์ด๋ ์ต๋๋ค.
์คํฌ๋ฆฐ์ท์ ์ผ๋ถ 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๋ก ์ ๊ทธ๋ ์ด๋ํ ๋ ์์ฑ๋์์ผ๋ฉฐ ์ ๊ฑฐ๋ ํจํค์ง์ ์ํฉ๋๋ค. ํ์ผ์ ์ญ์ ํ๊ณ ์๋ฅ ์๋น์ค๋ฅผ ๋ค์ ์์ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
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์๊ฒ ํฐ ๊ฐ์ฌ๋ฅผ ์ ํ๊ณ ์ถ์ต๋๋ค!
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ Kubernetes(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
Kubernetes ํ๊ณผ ์๋ น: ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํธ์คํธ๋ฉ ์๋ ํฅ์ "; - ยซ
SRE ์ผ์์ํ์ ๋ํ 6๊ฐ์ง ์ค์ฉ์ ์ธ ์ด์ผ๊ธฐ "; - ยซ
K8s์ Redis ์ด์์์ ๋ํ ์ด์ผ๊ธฐ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ์ ๋ํ ๊ฐ๋ตํ ๊ฒํ "; - ยซ
MongoDB๋ฅผ Kubernetes๋ก ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ".
์ถ์ฒ : habr.com