
PostgreSQLã§ã¯ã2005幎
ã«ãªãªãŒã¹ãããéåžžã«å€ã
ããŒãžã§ã³8.0ãããç¹å®ã®æç¹ã«åŸ©å
ããããã«ç¹å¥ãª
æ§æãã¡ã€ã«recovery.confã䜿çšãããŠããŸããã ãã®åŸãåããã¡ã€ã«ãã¹ã¿ã³ãã€ã¢ãŒããšã¹ããªãŒãã³ã°ã¬ããªã±ãŒã·ã§ã³ã«äœ¿çšãããããã«ãªããŸããã
ãã ããPostgreSQL 12ã®æ¬¡ã®ãªãªãŒã¹ä»¥éãrecovery.confã¯æ©èœããªããªããŸãããç ŽæããŸããã
ãããããªãã§ããïŒ
Recovery.confã«ã¯1ã€ã®æ©èœããããŸãããããã¯ãDBMSã®éå§æã«ã®ã¿èªã¿åãããŸããã ãŸãã1幎ã«1åæªæºã§å¿
èŠãªãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªã調æŽã§ããå Žåã¯ãããŒã¿ããŒã¹å
šäœãåèµ·åããŠã¢ããã¹ããªãŒã ã¬ããªã±ãŒã·ã§ã³ãµãŒããŒã®ã¢ãã¬ã¹ã倿Žããå¿
èŠããããŸãã ãã®å¶éãåé¿ããããã«ãL3ã«ãŒãã£ã³ã°ã®äœ¿çšãè€è£œã¹ããŒã ã®ã«ã¹ã±ãŒãïŒãã¹ãŠããã¹ãŠã§ã¯ãªããå°ãªããšãäžéšã®ã¿ïŒãããã«ã¯ïŒ
å®çšŒåç°å¢ã§ã¯èŠãããªãå Žåã§ãïŒ
walbouncerãªã©ãããŸããŸãªåé¯ã®æ¹æ³ãèŠ
ãŸãã ã
ã¬ããªã«ã®æ¬¡ã®ã¹ã±ãžã¥ãŒã«ãããåèµ·ååŸãã¬ããªã±ãŒã·ã§ã³ãã©ã¡ãŒã¿ã倿Žããå¿
èŠãããããããããéžæããããšã«ããŸããããSIGHUPã§primary_conninfoãåèªã¿èŸŒã¿ããããã«PostgreSQLã«æããã®ã«è²»çšã¯ããããŸããïŒ
ãã¹ãŠãã²ã©ã倿ããŸããã ååãšããŠãèµ·åããã»ã¹ã§å€æŽããå¿
èŠãããã®ã¯1ã€ã®å€æ°ã®ã¿ã§ãããããWalReceiverã®åèµ·åãèŠæ±ããŸããããã§ãè€è£œã¯æ°ããã¢ãã¬ã¹ã§æ£ããç¶è¡ãããŸãã ãããæ£ããå®è£
ããããšã¯æ®ã£ãŠããŸãã æ°é±éåŸãSIGHUPã·ã°ãã«ã§recovery.confãåèªã¿èŸŒã¿ããããšã§ããããçµäºããŸãããããã®ãããã¯æ¢åã®ããŒã¿ããŒã¹ã®åäœãç Žå£ããŸããã§ããã
ãããŠåæ°ãæã£ãŠã
圌ãPostgreSQLéçºè
ã®ã¡ãŒãªã³ã°ãªã¹ãã«
éããŸããã Michael Paquierãããªãè¿
éã«çãããã®ïŒ
ãããã®ããã€ããåèªã¿èŸŒã¿å¯èœã«ããåã«ãããããæåã«GUCã«åãæ¿ããŠããããã®ããã«ãã©ã¡ãŒã¿ãŒã®SIGHUPåŠçãåçºæããªãã§ã¿ãŸãããã
ãã£ãšãæ€çŽ¢ãšã³ãžã³ã«ééã£ã質åãããŠããããšãããããŸããã åé¡ã¯ãrecovery.confã®åèªã¿åãã§ã¯ãªããå¥ã®recovery.confããä»ã®ãã¹ãŠã®DBMSãã©ã¡ãŒã¿ãŒã«äœ¿çšãããGUCã€ã³ãã©ã¹ãã©ã¯ãã£ïŒã°ã©ã³ãçµ±åæ§æïŒãžã®ãã©ã¡ãŒã¿ãŒã®å€æã«é¢ãããã®ã§ããã ã€ãŸããééããªãããã®ãããªãããã¯å¿
èŠãããŸãããããã¯æãŸãããããŸããã æåã«ãããããã¹ãŠã®èšå®ãrecovery.confããæšæºèšå®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«è»¢éããŸãããã
ãã®æ²èгçãªãã¥ãŒã¹ã§ãç§ã¯çããŠèããŸããïŒãã§ãç§»ããŸãããïŒãã æ£ããæ€çŽ¢ã¯ãšãªã§ã¢ãŒã«ã€ãããããã£ã¹ã«ãã·ã§ã³ãèªã¿ã
èšå®ã®è»¢éã«é¢ããæåŸã®
ãã£ã¹ã«ãã·ã§ã³ãéããŸã
ã ïŒãªã³ã¯ã¯Michael Paquierã®åçã§èŠªåã«æäŸãããŸãããè¿
éãªåçã ãã§ãªããå¥éæè¬ããŸãïŒã ãã®ãšãã2018幎5æã«ããããã¯1å¹Žä»¥äžæŸæ£ãããŸããã ããã§ã¯ãããããå§ããŸãããã ãããšããç¶ããããšèšãæ¹ãæ£ããã§ããããïŒ ãšã³ã¿ãŒãã€ã³ã¡ã³ããã©ã³ã«ãããšïŒ
- ãããã®ææ°ã®å
¬éããŒãžã§ã³ãžã®å€æŽãèªãã§ãªã¹ããã
- ãããã®å€æŽãè§£æããå¿
èŠãªãã®ãã³ãŒãããŒã¹ã®çŸåšã®ããŒãžã§ã³ã«è»¢éããŸã
- ããã¥ã¡ã³ãå
ã®recovery.confããã³ãã®ãã©ã¡ãŒã¿ãžã®ãã¹ãŠã®åç
§ãä¿®æ£
- ä¿®çãã¹ã
- ã¡ãŒãªã³ã°ãªã¹ãã«æ°ããããããéä¿¡ããŸã
- ãã£ãŒãããã¯ãåŸã
- åžæã«å¿ããŠäœããä¿®æ£ãããã©ã°ã©ã5ã«æ»ã
- ããããå床æåŠããããšãæåŠããïŒ1幎åïŒ
ã¢ã¯ã·ã§ã³ãã©ã³ã®ããã«èãããŸããïŒ ããŠãããã§ããã«æ²¿ã£ãŠé²ã¿ãŸãïŒ
ã©ã®ãããã®æéãçãéãç§ã¯5çªãæã瀺ãã2018幎6æ21æ¥ã«
æ°ãããã£ã¹ã«ãã·ã§ã³ã¹ã¬ããã§æ°ããããŒãžã§ã³ã®ããããå
¬éã
ãŸãã ã ãã®åŸããã¹ã«ãŽã£ã«ã®éã®å·ããæ²é»ã®å§è¿«çãªæ²é»ã®äžã§3ã¶æã 9ææ«ãã³ã¢éçºè
ã®1人ã§ããã³ãããæš©ãæã€Peter Eisentrautã¯ãçªç¶ãããã«é¢å¿ã瀺ããŸããã ç·šéãæ°åç¹°ãè¿ããåŸãç§ã¯éãã«æ°æ¥éããããã¹ããæ£æ©ããŠèгå
ããããã«ç«ã¡å»ããŸããããããŒã¿ãŒã»ã¢ã€ãŒã³ãã©ãŠãããã®èœèçãªæçŽãå±ããŸããã
ãããã調ã¹ãŠãããã€ãã®å°ããªæ¹è¯ãè¡ããŸããã ãŸããããã¥ã¡ã³ããããåºç¯å²ã«æŽæ°ããŸããã æ·»ä»ã®ãããã¯ç§ã«ã³ãããå¯èœã§ãã
ã€ãŸããPeter Eisentrautã¯åœŒã®è£éã§ããã€ãã®ããããªããšãä¿®æ£ããããã¥ã¡ã³ããæŽæ°ããrecovery-config.sgmlã»ã¯ã·ã§ã³ãå®å
šã«çŒãä»ãããã®åœ¢åŒã§ãããã¯ãã§ã«åãå
¥ãããããšèããŠããŸãã ããã幞éã«ãããããäžè¬çã«ã³ãããã®æºåãæŽã£ãç¶æ
ã«éãããšããŠããããã¯postgresql 13ã§ã®ã¿èµ·ãããšæããŸããã
ãããŠæ°æ¥åŸãã€ãŸããã®2018幎11æ25æ¥ã«ãããŒã¿ãŒã»ã¢ã€ãŒã³ãã©ãŠãã¯æ¬åœã«
ãã®ããããåãå
¥ããŸã ïŒ
recovery.confèšå®ãpostgresql.confïŒãŸãã¯ä»ã®GUCãœãŒã¹ïŒã§èšå®ãããããã«ãªããŸããã çŸåšã圱é¿ãåããèšå®ã¯ãã¹ãŠPGC_POSTMASTERã§ãã ããã¯ãå°æ¥ã®ã±ãŒã¹ãã€ã±ãŒã¹ã§æ¹åãããå¯èœæ§ããããŸãã
å埩ã¯ããã¡ã€ã«recovery.signalã«ãã£ãŠéå§ãããããã«ãªããŸããã ã¹ã¿ã³ãã€ã¢ãŒãã¯ããã¡ã€ã«standby.signalã«ãã£ãŠéå§ãããŸãã standby_modeèšå®ã¯ãªããªããŸããã recovery.confãã¡ã€ã«ãèŠã€ãã£ãå Žåããšã©ãŒãçºè¡ãããŸãã
ç§»åã®äžéšãšããŠãtrigger_fileèšå®ã®ååãPromote_trigger_fileã«å€æŽãããŸããã
ããã¥ã¡ã³ãã®ç« ããªã«ããªæ§æããããµãŒããŒæ§æãã«çµ±åãããŸããã
pg_basebackup -Rãpostgresql.auto.confã«èšå®ã远å ããstandby.signalãã¡ã€ã«ãäœæããããã«ãªããŸããã
èè
ïŒè€äºæ£å€«<masaoïŒdotïŒfujiiïŒatïŒgmailïŒdotïŒcom>
äœæè
ïŒSimon Riggs <simonïŒatïŒ2ndquadrantïŒdotïŒcom>
èè
ïŒAbhijit Menon-Sen <amsïŒatïŒ2ndquadrantïŒdotïŒcom>
äœæè
ïŒSergei Kornilov <skïŒatïŒzsrvïŒdotïŒorg>
2é±éãçµéãããã®ã³ãããã¯ããŒã«ããã¯ãããŠããŸããã ããã ãããŠã圌ãã¯è¡ãããããªãããã§ãã ãããã ç¹ã«4æã®postgresql 12ã®æ©èœããªãŒãºãªãªãŒã¹ãŸã§ã«ã¯ãŸã å°ãæéããããŸãã®ã§ãã³ãã¥ããã£ãåã³ããããæ¹åã«åäœã倿Žããããšã決å®ãããã©ããã¯äžæã§ãã ãã ããrecovery.confã®æ°ã¯ãŸã å¢ããŠããªãããã§ãã
ããã§ãäœãå€ãã£ãã®ã
äœããããŸããrecovery.confãã¡ã€ã«ãèŠã€ãã£ãå ŽåãDBMSã¯èµ·åãæåŠããŸããããã¯ãå€ãã®å€ãåœä»€ã®1ã€ã䜿çšããŠãããŠãŒã¶ãŒãããŒã¿ããŒã¹ããã®ãã¡ã€ã«ã®æ§æãç¡èŠããçç±ã«é©ããªãããã«ããããã§ãã
å€ãstandby_modeèšå®ã¯ãªããªããŸããã ããã§ããªã«ããªã¢ãŒããæå¹ã«ããããã®recovery.confã®ååšèªäœãã2ã€ã®ãã¡ã€ã«ïŒä»»æã®ã³ã³ãã³ããéåžžã¯ç©ºïŒã«çœ®ãæããããŸããã
- $ PGDATA / recovery.signal-ã€ããªãã®ãŒã®åŸç¶è
standby_mode = offãã¢ãŒã«ã€ãããã®åŸ©å
ã¯ãæ§æãã¡ã€ã«ã§æå®ããããã€ã³ããŸã§å®è¡ãããŸãã
- $ PGDATA / standby.signal-ãããããstandby_mode = onã ãã®ãã¡ã€ã«ã¯ãã¹ãŠã®ã¬ããªã«ã«è¡šç€ºãããŸãã
ããŒã¿ããŒã¹ã®èµ·åããã»ã¹ã§äž¡æ¹ã®ãã¡ã€ã«ãèŠã€ãã£ãå Žåã¯ãã¹ã¿ã³ãã€ã¢ãŒãã«ãããšèŠãªããŸãã
æç¢ºã«ããããã«ããã©ã¡ãŒã¿ã®å€æŽããã¬ãŒãã«æžããå ŽåïŒ
å€ãrecovery.conf
| PostgreSQL 12以épostgresql.conf
|
---|
primary_conninfo
| primary_conninfo
|
primary_slot_name
| primary_slot_name
|
trigger_file
| Promo_trigger_file
|
recovery_min_apply_delay
| recovery_min_apply_delay
|
recovery_target
| recovery_target
|
recovery_target_name
| recovery_target_name
|
recovery_target_time
| recovery_target_time
|
recovery_target_xid
| recovery_target_xid
|
recovery_target_lsn
| recovery_target_lsn
|
recovery_target_inclusive
| recovery_target_inclusive
|
recovery_target_timeline
| recovery_target_timeline
|
recovery_target_action
| recovery_target_action
|
restore_command
| restore_command
|
archive_cleanup_command
| archive_cleanup_command
|
recovery_end_command
| recovery_end_command
|
äœã倿ŽãããŠããªãããšãå°ãããããŸãã çŸæç¹ã§ã¯ïŒpromote_trigger_fileã®promote_ãã¬ãã£ãã¯ã¹ãé€ããŠïŒããã¹ãŠã®æ°ãããã©ã¡ãŒã¿ãŒã¯å€ããã©ã¡ãŒã¿ãŒãšãŸã£ããåãååãä»ããããåãå¯èœãªå€ãåããŸãã å®éã«ã¯ããªã«ããªã¿ãŒã²ããã®èšå®ã«é¢ããŠã¯ãŸã 倿ŽããããŸãã 以åã«èª°ããããã䜿çšãããã©ããã¯ããããŸããããããã¯ææžåãããåäœã§ãããè€æ°ã®recovery_targetãrecovery_target_lsnãrecovery_target_nameãrecovery_target_timeãŸãã¯recovery_target_xidãåæã«æå®ã§ããŸããã äŸãã°
recovery_target_lsn = '1/1D9FEA00' recovery_target_xid = '5238954'
recovery.confã®æåŸã®è¡ã¯ãå®éã«ã¯ãªã«ããªã«äœ¿çšãããŸããã ããã¯ããã§ããŸãããå埩ã®ç®æšã¯æå€§1ã€ã§ç€ºãå¿
èŠããããŸãã ãã ããGUCã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããžãã¯ã«ãããåãååã®ãã©ã¡ãŒã¿ãŒãäœåºŠãæå®ã§ããŸãã
recovery_target_lsn = '1/1D9FEA00' recovery_target_lsn = '1/16AC7D0'
ããã¯åãå
¥ããããæåŸã«æå®ãããèšå®å€ã«åŸ©å
ãããŸãã
ãããŠãäžè¬çã«ãããã¯PostgreSQLã®å€éšããèŠãã倿Žã«ã€ããŠèšãå¿
èŠããããã¹ãŠã§ãã pg_basebackup -RïŒ--write-recovery-confïŒã¯ãã®ãŸãŸã§ãæå³ãããšããã«åäœããŸãããrecovery.confã®ä»£ããã«postgresql.auto.confã«ãã©ã¡ãŒã¿ãŒã远å ããstandby.signalãã¡ã€ã«ãäœæããŸãã
æ®å¿µãªãããããããçŸåšç®ã«èŠãããã¹ãŠã®å€æŽã§ãããšèšã£ããšããããã¯ãŸãã«ç§ãèšã£ãŠããããšã§ãã æ°ãããã©ã¡ãŒã¿ãŒã¯ãã¹ãŠPGC_POSTMASTERãšããŠèšå®ãããŸããã€ãŸããPostgreSQLã®èµ·åæã«ã®ã¿å€æŽã§ããŸãã æ¢ã«è¿°ã¹ãããã«ãããã¯éçºè
ã³ãã¥ããã£ã®äžéšã®èŠä»¶ã§ãããæåã«ãã¹ãŠã®èšå®ã転éããŠãããå®è¡äžã®ããŒã¿ããŒã¹ã§å€æŽã§ãããã©ããã確èªããŸãã ãã®ãããå€ãåäœãæ¢ã«å£ããŠããŠãè¯ãæ¹åãžã®å€æŽããŸã ããããããŠããªããšããPostgreSQLã¯çŽ æŽãããéçºæ®µéã«ãããŸãã
primary_conninfoãšprimary_slot_nameããã®å Žã§å€æŽã§ããããã«ãã
ãããããã§ã«
å
¬éããŠããŸãã äœãèµ·ãããèŠãŠã¿ãŸãããã
ãã¿ãŸãããrecovery.confãå£ããŸãã
UPD 2019幎4æ7æ¥
æ©èœããªãŒãºããŒãžã§ã³12ã®æçµæ¥ãŸã§ã«ãèŠçŽã§ããŸãã ã¬ããªã±ãŒã·ã§ã³èšå®ã®å€æŽã¯ãªãªãŒã¹ã«å«ãŸããŠããŸããã§ããã ãã¡ããããããå¥åŠãªè©±ã§ãã ãããããããç§ãåºç€ãšããŠåã£ãSimon Riggsãããã«ã¯ãæ¥ç¶èšå®ã倿Žãããšãã«walreceiverãåèµ·åããããã®ç·šéããã§ã«å«ãŸããŠããŸããã ããã¥ã¡ã³ããšãã¹ããè£è¶³ããå¥ã®ãããã§ããããéžæããŸããã 6åã®ãããæŽæ°ãšæ°ãæã®è°è«ã®åŸãwalreceiverãåèµ·åãããšãããŒã¿ããŒã¹ã¯restore_commandããã®ãã¡ã€ã«ã®åŸ©å
ã«åãæ¿ããããšãããšããæãããªäºå®ãçŸããŸãã ãªãããã®çç±ã§walreceiverãã·ã£ããããŠã³ããããšã§ããªã¬ãŒããããéåžžã«åçŽãªã¹ããŒããã·ã³ã®åäœã ããããããã¯ãæãŸãããªããã®ãã§ããããšãããããŸããã ããŠãããªããèšãããšãã§ããªãåã«ïŒ ãªããšãããçŽããŸããããã«ã¬ã³ããŒã«ã¯ãã§ã«ããŒãžã§ã³12ã®æçµcommitfestãããã誰ããããèŠãŸããã§ããã äžè¬ã«ãããã¯ç°¡åãªããšã§ã¯ãªããPostgreSQLã®ãããã¯ããã§ãã ããããç§ã¯äººã
ã®ãªã¹ãã«èªåãå«ãããã¹ãŠã®æš©å©ãæã£ãŠããŸãããã®ãããã§ã
æãå£®å€§ã§æªå®æã®æªå®æã®REINDEX CONCURRENTLYãããŒãžã§ã³12
ã«å«ãŸããŠããŸããïŒ
æåŸã«èšåãã䟡å€ãããã®ã¯ãå€ãã®èšå®ããªã³ã¶ãã©ã€ã§å€æŽ
ããæ©äŒãããããšã§ãïŒarchive_cleanup_commandãpromote_trigger_fileãrecovery_end_commandãrecovery_min_apply_delay