Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS DMS を活用して MySQLからPostgreSQLへの移行とDBリファクタリング...

AWS DMS を活用して MySQLからPostgreSQLへの移行とDBリファクタリングをやっている話/osc2018-kagawa-dms-replication

2018年10月6日、 OSC2018 香川にてお話した
「AWS DMS を活用して MySQLからPostgreSQLへの移行とDBリファクタリングをやっている話」についてのスライドです。

現在、自社にて DBリファクタリングをやっています。

リファクタリング手法はAWS DMSを用いて MySQL(Aurora) から PostgreSQL への移行という形でリファクタリングを行っているのですがその内容をお話します。

Takahashi Ikki

October 04, 2018
Tweet

More Decks by Takahashi Ikki

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ • ߴڮ Ұٍ • ԬࢁͰWebΤϯδχΞ • ೔ຊPostgreSQLϢʔβʔձ தࠃࢧ෦௕ •

    PostgreSQLྺ 3ϲ݄ ! • ϋϦωζϛͱωζϛͷҧ͍ʹ͍ͭͯ ஌ݟ͋Γ·͢ɻ 4
  2. ϦϑΝΫλϦϯάख๏ _2 • MySQL ͷࢦఆεΩʔϚͷςʔϒϧΛ AWS DMS Ͱ PostgreSQL΁Ҡ͢ɻ AWS

    DMS ͸ޙͰৄ͘͠આ໌͢Δ͕ɺ DMS͕ࣗಈͰPostgreSQLଆʹ MySQLଆͱಉ͡ߏ଄ͷςʔϒϧΛ ੜ੒ͯ͘͠ΕΔɻ 14
  3. 2. ϦϑΝΫλϦϯάख๏ ·ͱΊ • MySQL ͔Β AWS DMSʹΑͬͯPostgreSQLʹ ϨϓϦέʔγϣϯ͍ͯ͠Δɻ •

    DMS͕ॻ͖ࠐΜͩλΠϛϯάͰઃఆͨ͠τϦΨʔ͕ൃಈͯ͠ ϦϑΝΫλϦϯά͞ΕͨςʔϒϧʹॻࠐΛ͢Δɻ • ߋ৽ɾࢀরΛAPIܦ༝ʹ͢ΔࣄͰطଘͷ։ൃΛਐΊͭͭ ϦϑΝΫλϦϯάͨ͠DBʹࢀরΛ੾Γସ͍͚͍͑ͯͯΔɻ • ϩʔΧϧͷ؀ڥߏங͕೉͍͠ͷͱɺDMS͕ࢭ·ͬͨ࣌ʹ ࢀরAPI͕ίέΔͷͰߟྀ͕೉͍͠ɻ 21
  4. AWS DMSͷΩʔϫʔυ • ιʔεΤϯυϙΠϯτ • σʔλͷίϐʔݩɻEC2onDB, RDS, ΦϯϓϨDB, S3 ͳͲɻ

    • λʔήοτΤϯυϙΠϯτ • σʔλͷίϐʔઌɻEC2onDB, RDS, ΦϯϓϨDB, S3, DynamoDB ͳͲɻ • ϨϓϦέʔγϣϯΠϯελϯε • ϨϓϦέʔγϣϯΛߦ͏Πϯελϯεɻ • λεΫ • ͲͷςʔϒϧΛͲͷΑ͏ʹҠߦ͢Δ͔ΛఆΊͨϧʔϧɻ 24
  5. ϨϓϦέʔγϣϯΠϯελϯεʹ͍ͭͯ • ΠϯελϯεΫϥε͸ T2, C4, R4ͷ̏छྨΛαϙʔτ. • T2: ։ൃɾݕূ༻ •

    C4: େྔͷԋࢉΛߦ͏৔߹ʹ໾ཱͭɻ (AWSతʹ͸ ҟछDBҠߦ͸͜ΕΛ͢͢Ί͍ͯΔ) • R4: ϝϞϦ૿ՃΠϯελϯεɻ (ҰճͷτϥϯβΫγϣϯ͕େ͖͍࣌͸͜Ε.) • ϚϧνAZʹରԠ͍ͯͯ͠ɺϑΣΠϧΦʔόʔΛαϙʔτ. • ࣮ࡍɺDMSͱ͓͕͔͔ͯۚ͠Δͷ͸͜ͷϨϓϦέʔγϣϯΠϯελϯεͷ ετϨʔδͷ෦෼͚ͩɻ 25
  6. λεΫʹ͍ͭͯ • ςʔϒϧ໊Λࢦఆͯ͠ϨϓϦέʔγϣϯΛ࣮ߦ͢Δɻ ςʔϒϧͷࢦఆํ๏͸̎छྨ • user: user ςʔϒϧͷΈΛର৅ͱ͢Δɻ • user_%:

    user_xxx ςʔϒϧʹ߹க͢ΔશͯͷςʔϒϧΛର৅ͱ͢ Δɻ • ֤λεΫຖʹιʔεσʔλͷϝλ৘ใΛอ͍࣋ͯ͠Δɻ • جຊతʹ͸λεΫ಺Ͱ͸ฒྻͰςʔϒϧ͕ϩʔυ͞ΕΔɻ(σϑΥϧτ8) 27
  7. ݱࡏͷฐࣾͰͷλεΫઃఆ • user-replication-task • party-replication-task • reserve-replication-task etc... • λεΫઃఆํ਑

    ্هͷΑ͏ʹׂͱάϧʔϓ୯ҐͰ খ͘͞ϨϓϦέʔγϣϯλεΫΛઃఆͯ͠ ҠߦΛਐΊ͍ͯΔɻ • ཧ༝ Ҡߦ׬ྃͨ͠ςʔϒϧΑΓDMSͷλεΫΛ࡟আ͍ͯ͘͠ࣄΛ૝ఆ͍ͯ͠ΔͨΊɻ 29
  8. 31

  9. 3. AWS DMSʹ͍ͭͯ ·ͱΊ • DMS͸ωοτϫʔΫӽ͠ʹϨϓϦέʔγϣϯΛ࣮ݱ͢ΔαʔϏε. • σʔλͷίϐʔݩͱઌΛࢦఆͯ͠ҠߦϧʔϧͱͳΔλεΫΛ࡞੒͢ΔࣄͰ σʔλͷҠߦ͸શͯDMSͷ੹຿Ͱ࣮ݱͯ͘͠ΕΔɻ •

    λεΫͷཻ౓Λଟͨ͘͠Γখͨ͘͞͠Γ͢ΔࣄͰ શମͷϨϓϦέʔγϣϯͷཻ౓Λௐ੔ग़དྷΔɻ • DMS୯ମͱͯ͠͸ϨϓϦέʔγϣϯΠϯελϯεͷӡ༻අ͕͔͔Δఔ౓ͳͷͰ ҆ՁͰਐΊΔࣄ͕ग़དྷΔɻ • ฐࣾ͸Ҡߦޙফ͠΍͍͢Α͏ʹDMSͷཻ౓Λখ͘͢͞ΔࣄͰ ؅ཧΛ͍ͯ͠Δɻ 32
  10. 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·Ͱ) ෳ਺ࢦఆՄೳ 36
  11. PostgreSQLͷڧΈ(खଓ͖ܕݴޠ) ࣮ߦؔ਺ΛҎԼͷ֤ݴޠͰఆ͕ٛग़དྷΔɻ ໊শ ݴޠ ഑෍ํ๏ PL/pgSQL SQL جຊ഑෍ PL/Perl Perl

    جຊ഑෍ PL/Python Python جຊ഑෍ PL/Java Java ֦ு PL/v8 JavaScript ֦ு ※ ͦͷଞ 38
  12. PostgreSQLͷڧΈ(खଓ͖ܕݴޠ) • Amazon RDS͸ PL/Python Λαϙʔτͯ͠ͳ͍ɻɻ • PL/v8Λ࢖͍ͬͯΔɻ • PL/Python͕࢖͑ͳͯ͘

    ͦ΋ͦ΋ɺpgSQLͱv8͙Β͍͔͠બ୒ࢶ͕ແ͔ͬͨɻ ϕϯνϚʔΫͱͯ͠ pgSQLΑΓv8ͷํ͕਺ഒ଎͍ɺ ͱͷࣄͰpl/v8Λ࠾༻ɻ • ※ฐࣾͰ͸ϐϡΞJavaScriptΛ࢖͍ͬͯΔ͕ɺ CoffeeScript΍React.js΋࢖͑ΔΒ͍͠ɻ 39
  13. Πϕϯτࠂ஌ • ୈ25ճ தࠃ஍ํDBษڧձ in ௗऔ • 2018-12-01(౔) 13:00ʙ PostgreSQL

    11͸ੌ͍ͧʂ MySQL 8.0͸ੌ͍ͧʂ → ʮͲ͏΍ͬͯόʔδϣϯΞοϓ͢Δͷʁʯ ख๏Λ͓࿩ग़དྷΔߨࢣਞͷํΛ͓ট͖ͯ͠ ͝঺հ͠·͢ʂ 47