{"id":941,"date":"2015-01-28T11:48:59","date_gmt":"2015-01-28T11:48:59","guid":{"rendered":"http:\/\/10sa.com\/sql_stories\/?p=941"},"modified":"2015-01-28T11:49:52","modified_gmt":"2015-01-28T11:49:52","slug":"elasticsearch-backup","status":"publish","type":"post","link":"http:\/\/10sa.com\/sql_stories\/?p=941","title":{"rendered":"Elasticsearch backup"},"content":{"rendered":"<p>Install <a href=\"http:\/\/stedolan.github.io\/jq\/\" title=\"jq\">JQ<\/a> to make Json more human readable.<\/p>\n<pre lang=bash> \r\n#!\/bin\/bash\r\n\r\n# Backup of elasticsearch\r\n# Scenario: make backup of every open index once a day\r\n\r\nfunction write_to_stderr { \r\n    echo \"$@\" 1>&2\r\n}\r\n\r\nINDEX_TO_EXLUDE=\"^_\\|SOME_SPECIAL_INDEX\"\r\nREPOSITORY=\"backup\"\r\n\r\nfor INDEX_NAME in `curl 'localhost:9200\/_cat\/indices?v' 2>\/dev\/null | grep \"\\sopen\\s\" |  awk '{print $3}' `; do\r\n\tINDEX_LOG_FILE=\"\/tmp\/bck.$INDEX_NAME.log\"\r\n\tIS_SPECIAL_INDEX=`echo \"$INDEX_NAME\" | grep -c \"$INDEX_TO_EXLUDE\" `\r\n\tRESULT=$?\r\n\tif [ \"$RESULT\" -eq \"0\" ]; then\r\n\t\tcontinue;\r\n\tfi\r\n\tSNAPSHOT_NAME=\"$INDEX_NAME@`date '+%Y.%m.%d-%H:%M'`\"\r\n\tURL=\"http:\/\/localhost:9201\/_snapshot\/$REPOSITORY\/$SNAPSHOT_NAME?wait_for_completion=true&pretty\"\r\n\tCOMMAND=\"{\r\n\t\t\\\"indices\\\": \\\"$INDEX_NAME\\\"\r\n\t}\"\r\n\t# curl writes to stderr is transferred  cause elasticsearch write there some statistics\r\n\tcurl --stderr \"$INDEX_LOG_FILE\".stats -XPUT \"$URL\" -d \"$COMMAND\" > \"$INDEX_LOG_FILE\"\r\n\tSTATE=`grep -v \"$SNAPSHOT_NAME\" \"$INDEX_LOG_FILE\" | jq '.snapshot.state'`\r\n\tif [ \"$STATE\" != '\"SUCCESS\"' ]; then\r\n\t\twrite_to_stderr $INDEX_NAME\r\n\tfi\t\r\ndone\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Install JQ to make Json more human readable. #!\/bin\/bash # Backup of elasticsearch # Scenario: make backup of every open index once a day function write_to_stderr { echo &#8220;$@&#8221; 1>&#038;2 } INDEX_TO_EXLUDE=&#8221;^_\\|SOME_SPECIAL_INDEX&#8221; REPOSITORY=&#8221;backup&#8221; for INDEX_NAME in `curl &#8216;localhost:9200\/_cat\/indices?v&#8217; 2>\/dev\/null | grep &#8220;\\sopen\\s&#8221; | awk &#8216;{print $3}&#8217; `; do INDEX_LOG_FILE=&#8221;\/tmp\/bck.$INDEX_NAME.log&#8221; IS_SPECIAL_INDEX=`echo &#8220;$INDEX_NAME&#8221; | grep -c &#8220;$INDEX_TO_EXLUDE&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/posts\/941"}],"collection":[{"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=941"}],"version-history":[{"count":3,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/posts\/941\/revisions"}],"predecessor-version":[{"id":966,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=\/wp\/v2\/posts\/941\/revisions\/966"}],"wp:attachment":[{"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=941"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/10sa.com\/sql_stories\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}