Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TRUNCATE user;に如何にして立ち向かうか
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
meru_akimbo
November 20, 2018
Programming
0
340
TRUNCATE user;に如何にして立ち向かうか
2017年 YAPC::Kansaiでの発表資料です
https://yapcjapan.org/2017kansai/
meru_akimbo
November 20, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.7k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
230
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
CSC307 Lecture 01
javiergs
PRO
0
690
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Raft: Consensus for Rubyists
vanstee
141
7.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
Optimizing for Happiness
mojombo
379
71k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
110
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
54
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
170
Transcript
TRUNCATE user;ʹ Կʹཱ͔ͯͪ͠͏͔ @meru_akimbo
Who are you? • @meru_akimbo • αʔόॻ͍ͨΓWebΦϖϨʔγϣϯͨ͠Γ όΠΫͬͨΓ • 24ࡀ
• ΊͬͨʹਓલͰ·ͤΜ
ԠืͷܦҢ
None
ίϫΠ!
க໋ইʹͳΓͦ͏ͳΫΤϦ • TRUNCATE user; • DROP TABLE user; • DROP
DATABASE myapp; • DROP DATABASE myapp_user;
ோΊΔ͚ͩͰਏ͍
ྲྀੴʹͦΜͳΫΤϦଧͨͶʔΑ • ։ൃπʔϧ͕όάͬͯޡര • ։ൃDBͱצҧ͍ͯ͠ଧͬͨ • γφϦΦ৭ʑ…. • ຊ൪DBʹDROP DATABASEଧͪࠐΜͩ͜ͱ
͋Δਓੈͷதʹ͍Δ • ࢲͰ͢
େ͛͞ͳΫΤϦ͡Όͳͯ͘ • appͷόάͰக໋తͳෆ߹͕ɺͱ͔ • ͦ͏͍͏ͷ͋ΔΘ͚Ͱ • ϊʔΨʔυઓ๏΄΅΄΅͋Γ͑ͳ͍ • ͱ͍͏ͱ͜Ζ·ͰલఏͳΘ͚Ͱ
ʮͪΌΜͱόοΫΞοϓऔΕࡁΉͰ?ʯ
None
“ͪΌΜͱ” is Կ
ͦΕ”ͪΌΜͱ”Ͱ͖ͯΔ? • ͍͟ͱ͍͏࣌ຊʹϦετΞͰ͖Δͷ? • ϦετΞͨ͠Βͦͷ··αʔϏε࠶։Ͱ͖ Δͷ? • σʔλྔ૿͑ͯͦͷΓํͰେৎ?
ฐࣾͰΑ͋͘Δmysqlߏ • લఏͱͯ͠ΦϯϓϨ • master 1ɺslave nɺbackup 1 • backup24࣌ؒʹ1
• backup༻ͷDBΛҰࢭΊͯcp͢Δ • ऴΘͬͨΒbackup༻DBΛ࠶্ཱͪ͛
͍ؒ͜ͷӡ༻ͩͬͨ • ಛʹى͖ͯͳ͔ͬͨ • ࣮ࡍʹbackup͔ΒmasterΛrestore͢ΔϨ ϕϧͷࣄނ·ͩݟͨ͜ͱͳ͍ • ৽͍͠slaveͷߏஙͳͲʹΑ͘ΘΕ͍ͯ ͨ
ن͕େ͖͘ͳ͖ͬͯͨ • ࠓ·ͰͷεϖοΫͷDBαʔόͩͱ͍͔ͭ ͳ͍Α͓…
None
HDD => SSD • ࣓ྗΛଳͼͨԁ൫Λճసͤ͞ΔّࣜͰઓ͍ ଓ͚Δͷਏ͍… • ͷؙ • ͠Β͘ฏʹͳͬͨ
IO waitԼ͕ͬͯΊͰͨ͠ΊͰͨ͠
(ͦͷޙͷνϡʔχϯάͷઓ͍·ͨผͷ …
݄ͦͯ͠ྲྀΕ…
upstartʹbackupΛࡴ͞Εͨ
/etc/init/mysqlΑΓ # MySQL Service description "MySQL Server" author "Mario Limonciello
<
[email protected]
>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 env HOME=/etc/mysql umask 007 # The default of 5 seconds is too low for mysql which needs to flush buffers kill timeout 300 ҎԼলུ
mysqlͷఀࢭʹ͕͔͔࣌ؒΓ͍͗ͯͨ͢…
͋ɺkill timeoutɺSIGKILLଧͨΕ·͢
backupͷmysqlىಈͰ͖ͳ͘ͳͬͨ
ͻͱ·ͣtimeoutΛ৳͍ͯ྇ͩ͠…
next battle field….
ϨϓϦέʔγϣϯԆઓ૪
backupͷΈԆ͕ى͖࢝Ίͨ • ͦͦͳΜͰbackup͚͓͖ͩͨͷ?
backupHDDͷ··͔ͩͬͨΒ….
ΞϗΈ͍ͨʹݟ͑Δ͕… • ͨͩϨϓϦέʔγϣϯ͢Δʹॳେ ৎͩͬͨͷͩ • backup༻్ͰSSDΛ༻ҙ͢Δͱɺ༰ྔେ ͖͘ͳΓ݁ߏ͓ߴ͍ • σʔλαΠζ૿͑ͨΒͬͱͰ͔͍ͷ ങͬͯೖΕସ͑Δͷ͔?
• ͻͱ·ͣ࠷ॳݟૹ͍ͬͯͨΑ͏
࠷ॳΕ͍͍ͯͭͨ • ࠶ىಈͷλΠϛϯάͰ͕ͬͭΓΕɺঃʑ ʹղফ • ͕ɺͩΜͩΜͻͲ͘ͳ͖ͬͯͨ • master͔ΒҾ͖͞ΕΔҰํʹ
backup͕ΕΔͱࠔΔ͜ͱ • ·͋ΞϓϦέʔγϣϯ͔ΒΘΕͯ ͳ͍ͷͰɺଈக໋తͰͳ͍ • Εͨঢ়ଶͰ࡞ͬͨbackupՁ͕͍ • 1Εͨঢ়ଶͰ࡞ΔͱɺϦετΞ࣌ʹ࠷େ 2ΕΔܭࢉʹͳΔ
None
SSDΛͬ͞͞ͱങͬͯྑ͔͕ͬͨ… • ͻͱ·ͣmy.cnfͷௐΛͯ͠ΈΔ͜ͱʹ͠ ͨ • innodb_lru_scan_depth • innodb_io_capacity_max • ͳͲioʹؔ͢Δ෦Λௐ
վળ
͕ɺμϝͬ • نͷ֦େʹͭΕͯ·ͨΕ࢝Ίͨ • εϖοΫࠩΛͰຒΊΔͷ͕ݶքʹདྷͨ
͏͔͍͍ͭͬͯΑͶ…?
͜ͷػձʹ৭ʑݟ͍ͨ͠… • ༰ྔ͕૿͖͑ͯͯਏ͘ͳ͍ঢ়ଶ • Ԇ͕ൃੜͮ͠Β͍ঢ়ଶ • ͦͦ࠷େ1ר͖Δͷڐ༰Ͱ͖ͳ͘ ͳ͖ͬͯͯΔͷͰͳΜͱ͔͠ͱ͖͍ͨ
Ҋ1: SSDͱHDD྆ํϚϯτͯ͠HDDʹϑ ϧόοΫΞοϓΛஔ͘ • ᝑମͷ߹Ͱ2ຕϚϯτෆՄͳͷͰແཧ • ૬มΘΒͣσʔλࣦ͢Δ࣌ؒଟΊ
Ҋ2: SSDԽ + ࠩόοΫΞοϓ • SSDʹͭͭ͠ɺࠩόοΫΞοϓΛऔಘͯ͠ ϩʔϧόοΫ͢Δ࣌ؒΛͭͭ͘͠༰ྔͷ ૿Ճ͑Δ • Քಇͯ͠ΔDB+ϑϧόοΫΞοϓ+ࠩͷ
༰ྔ͕ඞཁͰɺ͜ΕͰΘΓͱͭΒ͍
Ҋ3: SSDԽ+binlogͰϩʔϧϑΥϫʔυ • SSDʹͯ͠ɺϑϧόοΫΞοϓͷස૿ ͣ͞ɺൃੜ࣌binlogΛൃੜલ ·Ͱద༻ͤͯ͞σʔλͷফࣦΛ΄΅0ʹ͢Δ • ՔಇDB+ϑϧόοΫΞοϓΛ͓࣋ͬͯ͘ͷ ༰ྔ͕(ry
࠾༻Ҋ: SSDԽ+ԆϨϓϦέʔγϣϯ • ԆϨϓϦέʔγϣϯ͢ΔslaveΛઃஔ͠ɺ ͦΕΛόοΫΞοϓͱ͢Δ • ൃੜͨ͠Βstop slave͔ͯ͠Βrelaylog Ͱൃੜલ·Ͱ͢ •
ՔಇDB+Ԇͷrelaylogͷ༰ྔͰࡁΉ
·͍͠ͱ͜Ζ • TRUNCATE user;࣮ߦ͔ΒԆ͍Ռͨ͢ ·Ͱ์ஔͯ͠͠·͏ͱࢮ͵ • ͱ͍͑Ԇ͕े͚Ε·͋େৎͰ ͠ΐ • ෮چʹ͕͔͔࣌ؒΔͷڐ༰
Ͳͷ͘Β͍Ԇͤ͞Δ? • ࠓ24࣌ؒʹͯ͠Δ • 24࣌ؒαʔϏεͨ͠Βྲྀੴʹؾͮ͘ • ͚Ε͍΄Ͳ༛༧͕૿͑ΔͷͰɺͬ ͱ͍͍͔ͯ͘ • ա͗Δͱrelaylog͕ͨ·Γ͗͢Δ
ϦετΞͲ͏Δͷ? • relaylogΛmysqlbinlog͔ΒSQLʹॻ͖ى͜ ͯ͋͛ͯ͠ɺͷલ·Ͱ࣮ߦ͢Δ? • ͱࢥ͍ͬͯͨ࣌ظ͕ʹ͋Γ·ͨ͠ • start slaveͷΦϓγϣϯͰָͰ͖Δ
START SLAVE ͷUTILΦϓγϣϯ • START SLAVE UTIL RELAY_LOG_FILE = 'log_name',
RELAY_LOG_POS = log_pos • ࢦఆͷrelaylogͷࢦఆͷpositionͰstop͢Δ Α͏ʹ্ͨ͠Ͱstart slaveͰ͖Δ • ͋ͱRESET SLAVE ALL;ͰmasterʹͳΕΔ
TRUNCATE user;ଧͬͯͲ͏ʹ͔ͳΔ
ଧͨͳ͍ͷ͕Ұ൪͍͍
ᘳͰͳ͍… • TRUNCATE user;ͱbackupαʔόͷཧత ͳഁଛ͕ಉ࣌ʹى͖ͨΒ..? • ૿͍͍͕ͯ͠…. • ᘳΛٻΊΔͱ͍͘ΒϦιʔε͕͋ͬͯ Γͳ͍…
ͦͷଞ࠷ۙࢥ͏͚Ͳ • RDSϩʔϧϑΥϫʔυͰ͖ͳ͍Β͍͚͠ ͲͲ͏ͳΜ͡ΌΖ? • σʔλͷϩετΈΜͳڐ༰ͯ͠Δͷ? • όοΫΞοϓઓུɺʹͳΔ͜ͱ͘͢ͳ ͍Α͏ͳ͖͕͢ΔͷͰଞࣾࣄྫ͠Γͨ͞