๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[MySQL] ERROR 1118 (42000) : Row size too large (> 8126). Changing some columns to TEXT or BLOB my help. In current row format, BLOB prefix of 0 bytes is stored inline.

๐Ÿ›ข DB
    ๋ฐ˜์‘ํ˜•

    ์ œ๋ชฉ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ mysql์ด๋‚˜ mariadb์—์„œ ์–ด๋–ค ํŠน์ • ํ…Œ์ด๋ธ”์˜ ์ „์ฒด column์˜ ํฌ๊ธฐ๋ฅผ ํ•ฉ์นœ๊ฒŒ mysql์ด๋‚˜ mariadb์— ์„ค์ •๋œ ํ…Œ์ด๋ธ”๋‹น ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋„˜์€ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ •ํ™•ํžˆ๋Š” Engine์ด innodb๋กœ ๋œ ํ…Œ์ด๋ธ”์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿด๋•Œ๋Š” ํ•ด๊ฒฐ๋ฐฉ์•ˆ์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

     

    ํ•ด๊ฒฐ๋ฐฉ์•ˆ 1

    ์—๋Ÿฌ ๋กœ๊ทธ์—๋„ ๋‚˜์™€์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, varchar๋กœ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ์ปฌ๋Ÿผ๋“ค ์ค‘์—์„œ ํฌ๊ธฐ๊ฐ€ ํฐ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ TEXT๋‚˜ BLOB์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. TEXT๋‚˜ BLOBํƒ€์ž…์€ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ๋ถ„๋ฆฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค๊ณ  ํ•œ๋‹ค(?) ์ •ํ™•ํžˆ ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€๋Š” ์•„์ง ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ.. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ํ•ด๊ฒฐ๋ฐฉ์•ˆ 2

    my.cnf(my.ini) ์„ค์ •์„ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

    [mysqld]

    ์•„๋ž˜์— innodb์— ๋Œ€ํ•œ ์„ค์ •์ด ์žˆ์„๊ฒƒ์ด๋‹ค. ์ด ์•„๋ž˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

     

    [mysqld]
    innodb_strict_mode = 0

     

     

    ์•„๋งˆ innodb์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์žก์„๊บผ๋ƒ ๋ง๊บผ๋ƒ ๋ง๊ณ ๋„ ๋‹ค๋ฅธ ์˜ํ–ฅ์ด ์žˆ๊ฒ ์ง€๋งŒ ์ผ๋‹จ ์ €๋ ‡๊ฒŒ ์„ค์ •ํ•จ์œผ๋กœ์จ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    โ€ป ์ฐธ๊ณ ๋กœ ์œˆ๋„์šฐ๋Š” ์„ค์ •ํŒŒ์ผ๋ช…์ด my.ini์ด๊ณ  ๋ฆฌ๋ˆ…์Šค์— ์„ค์น˜๋œ ๊ฒฝ์šฐ์—๋Š” my.cnf๋กœ ๋˜์–ด์žˆ์„๊ฒƒ์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค์˜ ๊ฒฝ์šฐ์—๋Š” ์•„๋งˆ /etc/mysql ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— my.cnf๊ฐ€ ์กด์žฌํ• ๊ฒƒ์ด๊ณ  ์œˆ๋„์šฐ๋Š” mysql ์ ‘์†ํ•œ ํ›„์— ์•„๋ž˜์˜ ๋ช…๋ ์–ด๋ฅผ ํ†ตํ•ด datadir์˜ ๊ฒฝ๋กœ์— ๊ฐ€๋ฉด ๋‚˜์˜ฌ๊ฒƒ์ด๋‹ค.

     

    SHOW VARIABLES WHERE Variable_Name LIKE '%dir';

     

    ํ•ด๊ฒฐ๋ฐฉ์•ˆ 3 * (2022. 3. 4. ์ถ”๊ฐ€)

    ์„ค์ • ํŒŒ์ผ์„ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์ธ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ๋œ connection session ์•ˆ์—์„œ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. session์ด๋ผ๋Š” ๊ฐœ๋…์ด ์–ด์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ ํ˜„์žฌ ์—ฐ๊ฒฐ์ค‘์ธ connection์—์„œ๋งŒ ์œ ์ง€๋˜๋Š” ์„ค์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    -- ์„ค์ • ๋ฐฉ๋ฒ• (set innodb_strict_mode)
    SET innodb_strict_mode = 0;
    
    -- ํ™•์ธ ๋ฐฉ๋ฒ• (check innodb_strict_mode)
    SHOW variables = 'innodb_strict_mode';
    or
    SHOW variables like '%strict_mode';

     

    ์ฃผ์˜์‚ฌํ•ญ

    innodb_strict_mode๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์€ innodb ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์„ ๋น„ํ™œ์„ฑํ™”(OFF)ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ์ด๋กœ ์ธํ•ด์„œ ์›๋ž˜๋Š” innodb์— ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์—†๋Š” ํ…Œ์ด๋ธ” ๋˜๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ์ž ์žฌ์ ์ธ ์œ„ํ—˜์ด ์žˆ๋‹ค.

     

    Row size too large ๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ฉด row ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋ฅผ ์–ต์ง€๋กœ ๋„ฃ๊ฒŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋Š” ์งค๋ ค์„œ ๋“ค์–ด๊ฐ„๋‹ค. ์ด ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ๊ฐ€ ์งค๋ ค์„œ ๋“ค์–ด๊ฐ€์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜๋Š” ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์งค๋ ค์„œ ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ๊ฐ€ ์•ˆ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ unsigned int ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ๋ฐ -1์„ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ ์•Œ์•„์„œ 0์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋“ฑ๋ก๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋“ฑ๋ก๋  ๊ฒฝ์šฐ ๋‚˜์ค‘์— ์–ด๋–ค ์—๋Ÿฌ๋‚˜ ์˜ค๋ฅ˜๋กœ ๋Œ์•„์˜ฌ์ง€ ๋ชจ๋ฅธ๋‹ค.

     

    ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

    ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์€ ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์žฌ์„ค๊ณ„ํ•˜๋Š”๊ฒƒ์ด๋‹ค. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์— ๋‚˜์™€์žˆ๋Š” ๋Œ€๋กœ ๋ช‡๋ช‡ ์ปฌ๋Ÿผ์„ text ๋‚˜ blob ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ๋‹ค. text๋‚˜ blob์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ inline์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ ์ปฌ๋Ÿผ์ด 500๊ฐœ์ธ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ๋ช‡ ๋ฐฑ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ text๋กœ ๋ฐ”๊ฟ”์„œ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„์ง€ ๋ชฐ๋ผ๋„ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ์•ˆ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ์–ด๋–ค ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ์ง€๋„ ๋ถˆํˆฌ๋ช…ํ•˜๊ณ  ์ธ๋ฑ์‹ฑ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„์ด ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ฆด์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ์ž ์žฌ์ ์ธ ์œ„ํ—˜ ์š”์†Œ๊ฐ€ ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด์„œ๋ผ๋„ ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์žฌ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

    ์˜ˆ๋ฅผ๋“ค์–ด, ์žฌ์„ค๊ณ„๋Š” ์ปฌ๋Ÿผ์ด ๋งŽ์€ ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”์„ ์ ์ ˆํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

    ๋ฐ˜์‘ํ˜•