Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
MySQLからPostgreSQLへの移行とDBリファクタリング/postgresqlJapa...
Search
Takahashi Ikki
November 22, 2018
Programming
8.5k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MySQLからPostgreSQLへの移行とDBリファクタリング/postgresqlJapan2018
2018-11-22 に行われた PostgreSQL Conference Japan 2018 のスライドです!
Takahashi Ikki
November 22, 2018
More Decks by Takahashi Ikki
See All by Takahashi Ikki
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
920
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osk2025-duckdb
takahashiikki
2
1.3k
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
1.8k
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
1.1k
ビジネスを止めずにシステムリプレースを進める為のCDCという選択肢/osc24ng-2-b
takahashiikki
0
170
アプリケーションエンジニアから見たPostgreSQL16 の新機能/postgresql16-new-information
takahashiikki
0
490
システムリプレースの中でCDCを取り入れている話/chugokudb32-cdc
takahashiikki
1
650
DBリファクタリングのデータリモデリング勘所/stafesstudy-db-modling
takahashiikki
5
2.3k
アプリケーションエンジニアから見たPostgreSQL15 の新機能/postgresql15-new-information
takahashiikki
7
3.3k
Other Decks in Programming
See All in Programming
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
170
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
310
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
Distance field of Julia set
kinakomoti321
0
310
Performance Optimization With LLMs
xleitix
0
250
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
330
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
640
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
GraphQL の onError と Nullability のこれから
quramy
0
210
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
220
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
Featured
See All Featured
How to Ace a Technical Interview
jacobian
280
24k
Become a Pro
speakerdeck
PRO
31
6.4k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The SEO identity crisis: Don't let AI make you average
varn
0
630
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
390
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
400
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
980
4 Signs Your Business is Dying
shpigford
187
23k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
We Have a Design System, Now What?
morganepeng
55
8.4k
Transcript
MySQL ͔Β PostgreSQL ͷҠߦͱ DBϦϑΝΫλϦϯά 2018-11-22 PostgreSQL Conference Japan 2018
ຊPostgreSQLϢʔβʔձ தࠃํࢧ෦ ߴڮ Ұٍ 1
͓͠ͳ͕͖ 1. ࣗݾհ 2. DBϦϑΝΫλϦϯάΛΔཧ༝ͱͦͷख๏ 3. MySQL͔ΒPostgreSQLΛҠߦઌʹબΜͩཧ༝ 4. AWS Database
Migration Serviceͱ 5. ҠߦࣦഊͷࢹΛͲͷΑ͏ʹ͍ͬͯΔ͔ 6. ·ͱΊ 2
ҙࣄ߲ • εϥΠυެ։͠·͢ɻ • ࣭ͱ͔͝ࢦఠͱ͔ॾʑͷϑΟʔυόοΫ͕͍͟͝·ͨ͠Β #pgcon18j ͓ئ͍க͠·͢ɻ • EC2
RDS ͳͲͱ͍ͬͨAWSͷαʔϏεͷࣄલ͕ࣝඞཁͰ͢ɻ • EC2: AWS͕ఏڙ͢ΔԾαʔόʔ • RDS: AWS͕ఏڙ͢ΔϚωʔδυRDBαʔϏε 3
1. ࣗݾհ • ߴڮ Ұٍ • Ԭࢁࡏॅ • גࣜձࣾΦϛΧϨ WebΤϯδχΞ
• ຊPostgreSQLϢʔβʔձ தࠃࢧ෦ • PostgreSQLྺ 4ϲ݄ ! 4
גࣜձࣾΦϛΧϨ (ࣗࣾʹ͍ͭͯͪΐͬͱએ) શࠃ35,000݅ͷࠗ׆ύʔςΟΛ ܝࡌͨ͠ϙʔλϧαΠτ 25ສਓڧͷձһͷํʑʹ͝ར༻͍͍ͯ· ͢ɻ ࠗ׆ͱݴ͑ΦϛΧϨʂ \\͍͍݁ࠗͧʂʂ// 5
ʮMySQL͔ΒPostgreSQLͷҠߦͱDBϦϑΝΫλϦϯάʯ ΦϛΧϨͰݱࡏਐߦதͷϓϩδΣΫτɻ • ԿނDBϦϑΝΫλϦϯάΛΔͷ͔ɻ • ԿނMySQL͔ΒPostgreSQLͳͷ͔ɻ • ΤϥʔͷࢹͲ͏͍ͬͯΔͷ͔ɻ • ͲΜͳࣄͰΜͩͷ͔ɻ
6
2. DBϦϑΝΫλϦϯάΛΔཧ༝ͱ ͦͷख๏ 7
ΦϛΧϨʹ͍ͭͯ • αʔϏε։͔࢝Β͕̓ܦա͍ͯ͠Δɻ • ͜͜ఔͰ ։ൃਓһ͕ࣾһ1໊ + ֎ ͷମ੍͔Β ࣾһ6໊
ͷମ੍ʹมֵɻ • ৭Μͳେਓͷࣄ͔ΒͦΕͳΓʹ͍ΘΏΔٕज़తෛ࠴ͱݺ ΕΔͷ͕͋Δɻ 8
ྫ͑ɾɾ ʮσʔλϕʔεߏΛோΊΔձΖ͏ʂʯ 9
ྫ͑ɾɾ ʮσʔλϕʔεߏΛோΊΔձΖ͏ʂʯ ʮ͜ͷςʔϒϧԿʹͬͯΔ͔୭͔ͬͯΔʁʯ 10
ྫ͑ɾɾ ʮσʔλϕʔεߏΛோΊΔձΖ͏ʂʯ ʮ͜ͷςʔϒϧԿʹͬͯΔ͔୭͔ͬͯΔʁʯ ʮʮʮ͍͊ɻɻɻ ! ʁʯʯʯ 11
ྫ͑ɾɾ ʮσʔλϕʔεߏΛோΊΔձΖ͏ʂʯ ʮ͜ͷςʔϒϧԿʹͬͯΔ͔୭͔ͬͯΔʁʯ ʮʮʮ͍͊ɻɻɻ ! ʁʯʯʯ ୭Βͳ͍ςʔϒϧͷڪා... 12
gender ΧϥϜ ఆ ࣮ࡍ ܕ int ೖΔσʔλ 0, 1, 2
σʔλͷҙຯ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 13
gender ΧϥϜ ఆ ࣮ࡍ ܕ int varchar ೖΔσʔλ 0, 1,
2 0, 1, 2, உੑ, ঁੑ σʔλͷҙຯ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 14
ݱঢ়ͷ՝ • ࠓޙͷࣄۀͷͷҝʹεϐʔυײ͕ඞཁෆՄܽɻ • WebʹRDBʹϦϑΝΫλϦϯάͷ՝͕͋Δɻ • ݶΒΕͨϦιʔεΛશͯϦϑΝΫλϦϯάʹׂ͘ࣄग़དྷͳ͍ɻ • ͳΔ͘ແఀࢭͰ͔ͭԁʹ։ൃΛਐΊΔͨΊʹ ߟ͑ͨRDBϦϑΝΫλϦϯάͷํ๏Λ
͝հ͖ͤͯ͞·͢ʂʂ 15
ݱঢ়ͷ՝ • ࠓޙͷࣄۀͷͷҝʹεϐʔυײ͕ඞཁෆՄܽɻ • WebʹRDBʹϦϑΝΫλϦϯάͷ՝͕͋Δɻ • ݶΒΕͨϦιʔεΛશͯϦϑΝΫλϦϯάʹׂ͘ࣄग़དྷͳ͍ɻ • ͳΔ͘ແఀࢭͰ͔ͭԁʹ։ൃΛਐΊΔͨΊʹ ฐࣾCTOͦʔ͍ͩ(@soudai1025)͞Μ͕
ߟ͑ͨRDBϦϑΝΫλϦϯάͷํ๏Λ ͝հ͖ͤͯ͞·͢ʂʂ 16
ϦϑΝΫλϦϯάख๏ 17
ݱঢ়ͷΞʔΩςΫνϟ ෳͷαʔϏε͕ӡ༻͞Ε͓ͯΓ ୯ҰͷMySQLͷhogeεΩʔϚ͔Β σʔλΛࢀর͍ͯ͠Δɻ ՝ • ͕ݶΒΕ͍ͯΔҝɺ ϦϑΝΫλϦϯάͨ͠ޙɺશαʔϏεͷ ࢀরՕॴͷमਖ਼Λ͍ͯ͘͠ͷ͍͠ɻ •
Өڹൣғ͕ಡΊͳ͍ɻ 18
WebͷϦϑΝΫλϦϯάํ๏ APIαʔϏεΛ৽͘͠࡞Γɺ ֤ػೳΛݸผͷAPIͱͯ͠࡞͢Δɻ APIΛ࡞͢Δஈ֊Ͱ֤αʔϏεͰෆཁʹͳͬͯ ͍ΔॲཧͳͲΛআͯ͠ϦϑΝΫλϦϯά͢Δɻ ·ͨɺAPIܦ༝ʹมߋΛ͢ΔλΠϛϯάͰWebଆ ͷίʔυϦϑΝΫλϦϯά͢Δɻ ྫ͑ • ΦϛΧϨձһొ/ࢀরAPI
• ࠗ׆ύʔςΟΛݕࡧ͢Δػೳ • ࠗ׆ύʔςΟͷ༧͢ΔAPI 19
DBͷϦϑΝΫλϦϯάํ๏ • ผͷΠϯελϯεΛ༻ҙ͠ɺ AWS Database Migration ServiceΛ ༻ͯ͠ϨϓϦέʔγϣϯ͢Δɻ • ϨϓϦέʔγϣϯ͞ΕͨλΠϛϯάͰ
DBͷτϦΨʔΛൃಈͤ͞Δɻ • τϦΨʔͰچσʔλΛՃ͠ ϦϑΝΫλϦϯάͨ͠ςʔϒϧͷ ܗࣜʹ߹͏Α͏ʹొ͢Δɻ • ࠓޙNEWεΩʔϚΛࢀর͢Δɻ 20
ϦϑΝΫλϦϯάख๏ • Webগͮͭ͠APIܦ༝Ͱ ࢀরɾॻࠐ͢ΔΑ͏ʹมߋΛ ਐΊΔɻ (WebͷϦϑΝΫλϦϯά) • APIॻࠐMySQLଆߦ͍ɺ ಡࠐPostgreSQLଆ͔Βߦ͏ɻ (DBͷϦϑΝΫλϦϯά)
• WebଆΛશͯAPIܦ༝ʹग़དྷͨΒ APIͷॻࠐPostgreSQLଆ มߋ͢Δɻ 21
22
͜ͷϦϑΝΫλϦϯάํ๏ͷϝϦοτ • ߋ৽APIMySQLॻࠐΛ͢ΔͷͰগͮͭ͠APIܦ༝ʹͯ͠ طଘαʔϏεͷςʔϒϧͷࢀরՕॴʹӨڹ͕ແ͍ɻ • ҰՕॴAPIܦ༝ʹͯ͠ΈΔ → ͕͋Εௐ͢Δɻˠ ... ͳͲͷΑ͏ʹ
ΧφϦΞϦϦʔε ܗࣜͰ গͮͭ͠վળΛਐΊ͍͚ͯΔɻ • σʔλͷಡࠐPostgreSQL͔Βߦ͏ͷͰ ॻࠐAPIΛݺͿଆͲͪΒʹॻ͖ࠐΜͰ͍Δ͔Λ ؾʹ͠ͳͯ͘ྑ͍ɻ 23
͜ͷϦϑΝΫλϦϯάํ๏ͷσϝϦοτ • ϩʔΧϧͷ։ൃڥΛ࡞͢Δࣄ͕ग़དྷͳ͍ɻ ※ ࠓɺׂͱҰ൪·͍͠ॴɻ • DMS͕ࢭ·ͬͨ࣌ʹࢀরAPI͕ίέΔɻ ※ τϦΨʔΤϥʔͰDMS͕ࢭ·ΔͱαʔϏε͕ࢭ·Δɻ •
DMS͕Ԇͨ࣌͠ͷߟྀ͕͍͠ɻ ※ ࠓͷॴɺக໋ইͳ͍ɻ(ই͕ແ͍ͱݴͬͯͳ͍) • ίϯϑϦΫτ͢Δࣄ͕ݒ೦͞ΕΔͷͰϦʔυϨϓϦΧʹ·ͰτϦΨʔΛషΕͳ͍͕ ϦʔυϨϓϦΧ͕Ϛελʔʹঢ֨͢ΔͱαʔϏε͕ࢭ·Δɻ 24
2. DBϦϑΝΫλϦϯάΛΔཧ༝ͱͦͷख๏ ·ͱΊ • AWS DMSͰ MySQL͔ΒPostgreSQLʹ ϨϓϦέʔγϣϯ͍ͯ͠Δɻ • DMS͕Ҡߦͨ͠λΠϛϯάͰઃఆͨ͠τϦΨʔ͕ൃಈͯ͠
ϦϑΝΫλϦϯά͞ΕͨςʔϒϧʹॻࠐΛ͢Δɻ • ߋ৽ɾࢀরΛAPIܦ༝ʹ͢ΔࣄͰطଘͷ։ൃΛਐΊͭͭ ϦϑΝΫλϦϯάͨ͠DBʹࢀরΛΓସ͍͚͍͑ͯͯΔɻ • ϩʔΧϧͷڥߏங͕͍͠ͷͱɺDMS͕ࢭ·ͬͨ࣌ʹ ࢀরAPI͕ίέΔͷͰߟྀ͕͍͠ɻ 25
3. MySQL͔ΒPostgreSQLΛ ҠߦઌʹબΜͩཧ༝ 26
ͦΓΌɺ(JPUGཧࣄ͕ೋਓډΔΜ͔Β) ͦ͏Ζɻ 27
ͱ͍͏ͷຊԻɺͰͳ͍Ͱ͕͢ɻ 28
PostgreSQLͷํ͕MySQLΑΓ༏Ε͍ͯΔ(ͱࢥͬͨ)2 29
1ɿ PostgreSQLτϦΨʔͷಛ (Ұ෦) ------------------------------------------------------------ CREATE TRIGGER 'τϦΨʔ໊' trigger_time trigger_event ON
'ςʔϒϧ໊' FOR EACH ROW '࣮ߦؔ' ------------------------------------------------------------ MySQL PostgreSQL trigger_time BEFORE, AFTER ͷͲͪΒ͔ BEFORE, AFTER ͷͲͪΒ͔ trigger_event INSERT, UPDATE, DELETE ͔ΒҰͭͷΈબ INSERT, UPDATE, DELETE ͔Βෳબ ෳτϦΨʔ ֤Πϕϯτຖʹ1ͭͣͭ (※ v5.6·Ͱ) ෳࢦఆՄೳ ෳτϦΨʔࢦఆ࣌ͷॱং ίϚϯυͰࢦఆ ໊લॱ 30
1ɿ PostgreSQLτϦΨʔʹ͍ͭͯ • PostgreSQL͚ͩͷػೳ • UPDATE࣌ʹSETʹࢦఆΧϥϜ͕͋Δ߹ͷτϦΨʔΛఆٛग़དྷΔɻ • UPDATE࣌ʹࢦఆΧϥϜ͕࣮ࡍʹมߋ͞Εͨ߹ͷτϦΨʔΛఆٛग़དྷ Δɻ •
ߦϨϕϧ͚ͩͰແͯ͘จϨϕϧͰτϦΨʔΛఆٛग़དྷΔɻ ※ ྫɿ DELETEͰ10ߦফ͑ͨͱͯ͠ɺߦϨϕϧ10֤݅ߦʹର࣮ͯ͠ߦ ͞ΕΔɻจϨϕϧDELETEจʹର࣮ͯ͠ߦ͞ΕΔɻಛʹ TRUNCATEจ ʹରͯ͠༗ޮɻ 31
2ɿ PostgreSQLͷڧΈ(खଓ͖ܕݴޠ) τϦΨʔͷ࣮ߦؔΛҎԼͷ֤ݴޠͰఆ͕ٛग़དྷΔɻ ໊শ ݴޠ ํ๏ PL/pgSQL SQL جຊ PL/Perl
Perl جຊ PL/Python Python جຊ PL/Java Java ֦ு PL/v8 JavaScript ֦ு ※ ͦͷଞ 32
PostgreSQLͷڧΈ(खଓ͖ܕݴޠ) • ※ୠ͠ɺAmazon RDS PL/Python Λαϙʔτͯ͠ͳ͍ɻɻ • ΦϛΧϨͰ PL/v8Λར༻͍ͯ͠Δɻ
• ࠾ཧ༝ɿ ܦݧͷ͋Δݴޠͷ͔ؔΒpgSQLͱv8͙Β͍͔͠બࢶ͕ແ͔ͬͨɻ ϕϯνϚʔΫͱͯ͠ pgSQLΑΓv8ͷํ͕ഒ͍ɺͱͷࣄͰpl/v8Λ࠾༻ɻ (PL/PythonΛ͍͔ͨͬͨͳɾɾ) • ※ΦϛΧϨͰϐϡΞJavaScriptΛ͍ͬͯΔ͕ɺ CoffeeScriptReact.js͑ΔΒ͍͠ɻ 33
(ࢀߟ) PL/v8 ͷ༗ޮԽํ๏ RDS for PostgreSQLʹσϑΥϧτͰ plv8͕Πϯετʔϧ͞Ε͍ͯΔͷͰɺextensionΛ༗ޮԽͯ͠Εok. ------------------------------------------------ # Extension͕ରԠͯ͠Δ͔νΣοΫ
postgres=> show rds.extensions; postgres=> create extension plv8; CREATE EXTENSION ------------------------------------------------ 34
3. MySQL͔ΒPostgreSQLΛҠߦઌʹબΜͩཧ༝ ·ͱΊ • PostgreSQLͰτϦΨʔΛॊೈʹఆٛ͢Δࣄ͕ग़དྷΔɻ • ·ͨPostgreSQLͰτϦΨʔʹࢦఆ͢ΔϢʔβʔఆٛؔͷ ༻ݴޠͱͯ͠ෳͷݴޠΛαϙʔτ͍ͯ͠Δɻ • ݱࡏɺΦϛΧϨͰ࠾༻͍ͯ͠Δͷ
JavaScript. 35
4. AWS Database Migration Service ͱ 36
AWS Database Migration Service ωοτϫʔΫӽ͠ʹ σʔλҠߦΛߦ͏ࣄ͕ग़དྷΔαʔϏε ಄จࣈΛऔͬͯɺDMSͱݺΕΔɻ ※ ੍ݶ͕͋ͬͯɺίϐʔݩɾίϐʔઌͷ ͲͪΒ͔͕AWSͷΤϯυϙΠϯτͰແ
͍ͱɺϨϓϦέʔγϣϯΛ͢Δࣄ͕ग़དྷ ͳ͍ɻ 37
AWS Database Migration Serviceͷ͝հ • AWS DMS ͰΘΕΔΩʔϫʔυ • ϨϓϦέʔγϣϯΠϯελϯεʹ͍ͭͯ
• λεΫͷৼΔ͍ʹ͍ͭͯ • λεΫͷઃఆํ๏ʹ͍ͭͯ • ҟछDBؒҠߦͷࡍͷΧϥϜͷܕมʹ͍ͭͯ 38
AWS DMS ͰΘΕΔΩʔϫʔυ • ιʔεΤϯυϙΠϯτ • σʔλͷίϐʔݩɻEC2onDB, RDS, ΦϯϓϨDB, S3
ͳͲɻ • λʔήοτΤϯυϙΠϯτ • σʔλͷίϐʔઌɻEC2onDB, RDS, ΦϯϓϨDB, S3, DynamoDB ͳͲɻ • ϨϓϦέʔγϣϯΠϯελϯε • ίϐʔݩ͔ΒίϐʔઌσʔλͷϨϓϦέʔγϣϯΛߦ͏Πϯελϯεɻ • λεΫ • ͲͷςʔϒϧΛͲͷΑ͏ʹҠߦ͢Δ͔ΛఆΊͨϧʔϧɻ 39
40
ϨϓϦέʔγϣϯΠϯελϯεʹ͍ͭͯ • ΠϯελϯεΫϥε T2, C4, R4ͷ̏छྨΛαϙʔτ. • T2: ։ൃɾݕূ༻ •
C4: େྔͷԋࢉΛߦ͏߹ʹཱͭɻ (AWSతʹ ҟछDBҠߦ͜ΕΛ͢͢Ί͍ͯΔ) • R4: ϝϞϦ૿ՃΠϯελϯεɻ (ҰճͷτϥϯβΫγϣϯ͕େ͖͍࣌͜Ε.) • ϚϧνAZʹରԠ͍ͯͯ͠ɺϑΣΠϧΦʔόʔΛαϙʔτ. • ࣮ࡍɺDMSͱ͓͕͔͔ͯۚ͠ΔͷΠϯελϯεར༻ྉͱετϨʔδ͚ͩɻ 41
λεΫͷৼΔ͍ͷछྨʹ͍ͭͯ λεΫͷৼΔ͍ओʹ3λΠϓ͋Δɻ • શϩʔυ+ܧଓతͳϨϓϦέʔγϣϯ(CDC). • ΦϛΧϨͰར༻͍ͯ͠ΔλΠϓɻ • طଘͷσʔλΛϑϧϩʔυͨ͠ޙ(PostgreSQLͩͱCOPYจͰߦ͏.) ͦͷޙτϥϯβΫγϣϯϩά͔ΒܧଓతʹϨϓϦέʔγϣϯΛߦ͏. ֤DBΤϯδϯຖʹઐ༻ͷػೳΛ͏ɻ(PostgreSQLͰtest_decodingϓϥάΠϯͰ)
• ܧଓతͳϨϓϦέʔγϣϯ(CDC)ͷΈ • શϩʔυͷΈ 42
λεΫͷઃఆํ๏ʹ͍ͭͯ • ϨϓϦέʔγϣϯΛߦ͏ςʔϒϧͷࢦఆํ๏̎छྨ • userɿ จࣈྻҰகͰ user ςʔϒϧͷΈΛରͱ͢Δɻ • user_%ɿ
ਖ਼نදݱͰ user_xxx ςʔϒϧʹ߹க͢Δશͯͷ ςʔϒϧΛରͱ͢Δɻ • ਖ਼نදݱͳͲͰෳࢦఆͨ͠߹λεΫͰฒྻͰςʔϒϧ͕ ϩʔυ͞ΕΔɻ (σϑΥϧτͰ8ςʔϒϧ) 43
λεΫͷઃఆํ๏ʹ͍ͭͯ • ·ͨɺ֤ςʔϒϧʹରͯ͠ҠߦϧʔϧΛઃఆ͢Δࣄ͕ग़དྷ Δɻ • ྫ͑Ҡߦޙͷςʔϒϧ໊/ΧϥϜ໊Λมߋͨ͠Γ ରͷσʔλΛWHERE۟ͷΑ͏ʹϧʔϧͰߜΓࠐΜͩΓ ग़དྷΔɻ 44
ΦϛΧϨͷλεΫӡ༻ํ άϧʔϓ୯ҐͰখ͘͞ϨϓϦέʔγϣϯλεΫΛઃఆͯ͠ ҠߦΛਐΊ͍ͯΔɻ ྫɿ ϢʔβʔҠߦλεΫ, ύʔςΟҠߦλεΫ, ༧ҠߦλεΫ, ... • ཧ༝
Ҡߦྃͨ͠ςʔϒϧΑΓDMSͷλεΫΛআ͍ͯ͘͠ࣄΛ ఆ͍ͯ͠ΔͨΊɻ ӡ༻Λͯ͠ؾ͍͕ͨɺখ͘͞λεΫΛׂ͓ͯ͘͠ࣄͰҰݸͷςʔϒϧҠ ߦ͕ ࣦഊͨ࣌͠ʹαʔϏεશମͷোʹͳΒͳ͍ɻ 45
ҟछDBҠߦͷࡍͷΧϥϜͷܕมʹ͍ͭͯ • ιʔεͷܕ → DMSઐ༻ͷܕʹΩϟετ → λʔήοτͷܕʹΩϟετ ͱม͢Δɻ DMSͷܕ ༰
STRING จࣈྻ DATE DATETIME λΠϜελϯϓ INT1 1όΠτɺූ߸͖ (INT2, INT4, INT8͕͋Δ) BOOLEAN ϒʔϧ BLOB όΠφϦϥʔδΦϒδΣΫτ ※ ͦͷଞ 46
ͦͷଞDMSͷओͳ׆༻ࣄྫ • ΦϯϓϨͷDB͔ΒAWSͷRDSσʔλΛҠߦ͢Δɻ • ͔ͷߴڮগɾɾҎલਂϑϧόοΫΞοϓΛऔͬͯ AWSʹసૹͯ͠෮ݩ͢Δ࡞ۀΛ͍ͯͨ͠ɻɻ • Lambda+RDSಉ࣌ଓͷ͔Βਪ͞Ε͍ͯͳ͍ͷͰɺ RDS →
DynamoDB ʹܧଓతʹϨϓϦέʔγϣϯΛͯ͠ Lambda͕ଓ͢ΔDynamoDBΛ࡞Δɻ 47
4. AWS DMSʹ͍ͭͯ ·ͱΊ • DMSωοτϫʔΫӽ͠ʹϨϓϦέʔγϣϯΛ࣮ݱ͢ΔαʔϏε. • σʔλͷίϐʔݩͱઌΛࢦఆͯ͠ҠߦϧʔϧͱͳΔλεΫΛ࡞͢ΔࣄͰ σʔλͷҠߦશͯDMSͷͰ࣮ݱͯ͘͠ΕΔɻ •
λεΫͷཻΛଟͨ͘͠Γখͨ͘͞͠Γ͢ΔࣄͰ શମͷϨϓϦέʔγϣϯͷཻΛௐग़དྷΔɻ • DMS୯ମͱͯ͠ϨϓϦέʔγϣϯΠϯελϯεͷӡ༻අ͕͔͔ΔఔͰ ҆ՁͰਐΊΔࣄ͕ग़དྷΔɻ 48
5. ҠߦࣦഊͷࢹΛͲ͏͍ͯ͠Δ͔ 49
ҠߦࣦഊͷࢹΛͲ͏͍ͯ͠Δ͔ ࠓ·Ͱ͓͖ͯͨ͠௨ΓɺDMSඇৗʹศརͳαʔϏεͰ ΦϛΧϨͷαʔϏεΛࢧ͑Δ্ͰඇৗʹॏཁͰ͋Δɻ ͕ɺτϦΨʔσʔλҠߦλεΫ͕ίέΔͱͪʹ γεςϜোʹͳΔσϝϦοτ͋Δɻ => ͳΔૣ ͰDMS͕ࣦഊ͍ͯ͠Δࣄʹؾͮ͘Έ͕ඞཁ. 50
ҠߦࣦഊͷࢹͷΈ MackerelͷνΣοΫϓϥάΠϯΛͬͯ RDSͷϩάࢹΛ࣮ࢪ͢ΔPHPͷϓϩάϥϜΛఆظతʹୟ͍ͯ ࢹ͍ͯ͠Δɻ Mackerel ... RDSͷϩάࢹΛ࣮ࢪ͢ΔPHPͷϓϩάϥϜ ... 51
Mackerel ͱ αʔόʔཧΛߦ͏αʔϏεɻ Ϧιʔεͷঢ়گΛάϥϑԽͯ͠ՄࢹԽ͞ΕͨΓɺ ·ͨোൃੜ࣌ͳͲʹଟ༷ͳπʔϧΞϥʔτΛ௨ग़དྷΔɻ 52
νΣοΫࢹ߲ ------------------------------------------------ [plugin.checks.rds_log] command = "php /path/to/rds_log.php" check_interval = 5
memo = "RDS Τϥʔϩάࢹ" ------------------------------------------------ • mackerelͷઃఆϑΝΠϧʹ্هΛهड़͢Δͱ 5͓͖ʹ ࢦఆͨ͠ίϚϯυΛ࣮ߦͯ͘͠ΕΔ. 53
PHPͷதʹ͍ͭͯ AWS SDK for PHP Ͱ downloadDBLogFilePortionؔΛ࣮ߦ. ʢDBͷϩάΛ ࢦఆҐஔ͔Βμϯϩʔυ͢Δɻʣ •
:ERROR: ͳͲͷΩʔϫʔυΛरͬͯɺ Ωʔϫʔυ͕͋Ε ͦͷจࣈྻΛechoͯ͠exit(1) Ͱऴྃ͢Δ. • MackerelͷcheckϓϥάΠϯ exit(0) : ਖ਼ৗ exit(1) : ҟৗ(WARNING) exit(2) : ۓٸ(CRITICAL) • MackerelͷઃఆͰWARNINGΞϥʔτ্͕͕ͬͨ࣌ͷ௨ઌΛઃఆ͢Δɻ 54
ಋೖޙͷঢ়گ • ൃݟ͕ඇৗʹૣ͍ͷͰোલʹਝʹରԠ͕ग़དྷΔɻ Τϥʔͷ༁ • ύʔςΟͷ։࠵ͱऴ͕ྃٯసͯ͠Δɻ • ҠߦޙͰൣғܕΛ͍ͬͯΔҝམͪΔɻ • ຊདྷɺඞਢͰ͋Δͣͷ߲͕nullͰͬͯ͘Δɻ
• ֎෦ࢀর੍ͰམͪΔɻ 55
࠷େͷϝϦοτ • WebαʔϏεଆͷطଘόά(͜ΜͳσʔλೖΒͳ͍)ʹ ؾ͘ࣄ͕ग़དྷΔɻ ʢ..ඞਢ߲ͳΜͰ NOT NULL͡Όͳ͍ͷʁͬͯɾɾʣ • τϦΨʔͰ ϩάʹ
:ERROR: ͬͯจࣈΛؚΊΔࣄͰ௨ΛϋοΫग़དྷΔɻ ʮ͜ͷݱআϑϥά͕1͔Β0ʹΒͳ͍ͱى͜Γ͑ͳ͍ʯ ͬͯʹରͯ͠ UPDATEͷτϦΨʔͰআϑϥά͕ͬͯͨΒ :ERROR:ͱϩάΛు͘ॲཧΛࠐΉࣄͰࣄ͕ൃੜ͍ͯ͠Δࣄʹؾ͚Δɻ ʢ࣮ࡍͬͯͨɻɻɻʣ 56
࣮ࡍʹಈ͔ͯ͠Έͯൃੜͨ͠ • ੑผσʔλ int͡Όͳ͍ͷʁ. • Zero Date • with timezone
• etc... 57
Zero Date MySQLͰ 0000-00-00 Λ DatetimeܕͷΧϥϜʹొ͢Δࣄ͕ग़དྷΔɻ PostgreSQLͰ 0000-00-00 Λ ʹΩϟετ͢Δࣄવग़དྷͳ͍ɻ
• DMSͰϨϓϦέʔγϣϯ͠Α͏ͱͨ࣌͠ͰίέΔɻ • hoge_date NOT NULL DEFAULT '0000-00-00' ͷڪා... 58
Zero Dateͷରॲ • ·ͣɺจࣈྻͰड͚ͱΔɻ ALTER TABLE hoge ALTER COLUMN hoge_date
TYPE VARCHAR(35); - BEFORE τϦΨʔͰ จࣈྻҰகͰஔ͢Δɻ if (NEW.hoge_date === '0000-00-00 00:00:00') { NEW.hoge_date = '0001-01-01 00:00:00'; } 59
with timezone MySQLͷJSTͰདྷΔ(͕ɺTimezoneͷใͳ͍)ɻ PostgreSQLͰͦͷ··Insert͢Δɻ(UTCͱͯ͠ѻΘΕΔ) ↓ ʮύʔςΟͷ։࠵͕ਂͷ1͔࣌Β2࣌ͬͯͳͬͯ·͢Αʁʯ JSTΛUTCʹมͨ͠ঢ়ଶͰೖΕΔɻ 60
with timezone ͪͳΈʹ RDSͩͱ SELECT NOW(); ͕ UTCʹͳΔɻ ίʔυͷόάͰ NOW()
ͰσʔλΛೖΕͯΔ࣌ɾɾ Կͱ18࣌ؒͣΕΔɻɻ 61
5. ·ͱΊ • MackerelͷνΣοΫϓϥάΠϯΛར༻͍ͯ͠Δɻ • νΣοΫϓϥάΠϯͰ͖ͳίϚϯυΛୟ͘ࣄ͕ग़དྷΔɻ • DBϩάͷࢹΤϥʔͷࢹͱϦϑΝΫλϦϯάͷ྆ํʹޮ ͘ɻ •
ࢥͬͯΔΑΓఆ֎ͷσʔλೖΔɻ 62
6. ·ͱΊ 63
ࠓճͷDMSϦϑΝΫλϦϯάͷ ࠷େͷϝϦοτ ຊདྷലେͳֻ͕͔Δ(͘͠ಡΊͳ͍)ͣͷ DBϦϑΝΫλϦϯάͷॲཧΛDMSλεΫ(Ҡߦ୯Ґ)Λ খͨ͘͞͠ࣄͰগͮͭ͠खΛೖΕΔࣄ͕ग़དྷΔɻ ͦͷ݁ՌɺӨڹൣғಡΈ͘͢վળΛਐΊΔࣄ͕ग़དྷͨɻ 64
ݱࡏ • ·ͩ·ͩӡ༻ͱͯ͠3ϲ݄ͰΓ࢝Ί͔ͨΓɻ ࠓͷॴɺக໋ইແ͍ɻ(ই͕ແ͍ͱݴ͍ͬͯͳ͍) • ͜Ε͔Β͍ͬͯ͘தͰ৭ΜͳࠈΛݟ͍ͯ͘ͱࢥ͏ɻ Ξτϓοτ͍͖͍ͯͨ͠ͷͰָ͓͠Έʹʂʂ 65
ࠂ 66
Πϕϯτࠂ • ୈ25ճ தࠃํDBษڧձ in ௗऔ • 2018-12-01() 13:00ʙ PostgreSQL
11ੌ͍ͧʂ MySQL 8.0ੌ͍ͧʂ → ʮͲ͏ͬͯόʔδϣϯΞοϓ͢Δͷʁʯ ख๏Λ͓ग़དྷΔߨࢣਞͷํΛ͓ট͖ͯ͠͝հ͠·͢ʂ 67
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝· ͨ͠ʂʂ 68