{"id":3709,"date":"2025-11-02T13:55:33","date_gmt":"2025-11-02T11:55:33","guid":{"rendered":"https:\/\/ru.davidka.net\/ru\/?p=3709"},"modified":"2025-11-03T19:41:53","modified_gmt":"2025-11-03T17:41:53","slug":"%d0%b3%d0%bb%d0%b0%d0%b2%d0%b0-2-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d0%b3%d0%be-%d1%80%d0%b5%d0%b7%d0%b5%d1%80%d0%b2%d0%bd%d0%be%d0%b3%d0%be-%d0%ba%d0%be","status":"publish","type":"post","link":"https:\/\/ru.davidka.net\/ru\/%D0%93%D0%9B%D0%90%D0%92%D0%90-2-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%B3%D0%BE-%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\/","title":{"rendered":"\u0413\u041b\u0410\u0412\u0410 2: \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0426\u0435\u043b\u044c \u0433\u043b\u0430\u0432\u044b:<\/strong> \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/claude.ai\/chat\/01-inventory.md\">\u2190 \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430<\/a> | <a href=\"https:\/\/claude.ai\/chat\/00-INDEX.md\">\u041d\u0430\u0437\u0430\u0434 \u043a \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e<\/a> | <a href=\"https:\/\/claude.ai\/chat\/03-prepare-infrastructure.md\">\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430 \u2192<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"3709\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ol class=\"rtoc-mokuji decimal_ol level-1\"><li class=\"rtoc-item\"><a href=\"#rtoc-1\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u044b<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-2\">1. \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-3\">1.1 \u041f\u0440\u0430\u0432\u0438\u043b\u043e 3-2-1<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-4\">1.2 \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-5\">1.3 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-6\">2. \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (mysqldump)<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-7\">2.1 \u041f\u043e\u043b\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0432\u0441\u0435\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-8\">2.2 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b mysqldump<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-9\">2.3 \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-10\">2.4 \u0414\u0430\u043c\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u0445\u0435\u043c\u044b)<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-11\">2.5 \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0430\u0437<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-12\">3. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (XtraBackup)<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-13\">3.1 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Percona XtraBackup<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-14\">3.2 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 backup \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-15\">3.3 \u041f\u043e\u043b\u043d\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0430\u043f<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-16\">3.4 \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 XtraBackup<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-17\">4. \u0411\u044d\u043a\u0430\u043f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-18\">4.1 \u041f\u043e\u043b\u043d\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-19\">4.2 \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-20\">5. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-21\">5.1 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 SQL \u0434\u0430\u043c\u043f\u0430<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-22\">5.2 \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-23\">5.3 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-24\">6. \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-25\">6.1 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-26\">6.2 \u0421\u043a\u0440\u0438\u043f\u0442 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-27\">7. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-28\">7.1 \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 AWS S3<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-29\">7.2 \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 (rsync)<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-30\">7.3 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0431\u044d\u043a\u0430\u043f\u0430<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-31\">8. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-32\">8.1 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0431\u044d\u043a\u0430\u043f\u0430<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-33\">8.2 \u0416\u0443\u0440\u043d\u0430\u043b \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-34\">\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u044b<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-35\">\u2705 \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-36\">\ud83d\udcca \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-37\">\ud83d\udd0d \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-38\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-39\">\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433<\/a><\/li><\/ol><\/div><h2 id=\"rtoc-1\"  class=\"wp-block-heading\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u044b<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#1-%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F-%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#2-%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5-%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B5-%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (mysqldump)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#3-%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5-%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B5-%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (XtraBackup)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#4-%D0%B1%D1%8D%D0%BA%D0%B0%D0%BF-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2\">\u0411\u044d\u043a\u0430\u043f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#5-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D1%86%D0%B5%D0%BB%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B1%D1%8D%D0%BA%D0%B0%D0%BF%D0%BE%D0%B2\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#6-%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F\">\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#7-%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5-%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5\">\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/20a0329c-0bd2-4a97-b9df-ad56eb4a2f7d#8-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B1%D1%8D%D0%BA%D0%B0%D0%BF%D0%BE%D0%B2\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/a><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-2\"  class=\"wp-block-heading\">1. \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n\n\n\n<h3 id=\"rtoc-3\"  class=\"wp-block-heading\">1.1 \u041f\u0440\u0430\u0432\u0438\u043b\u043e 3-2-1<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">3 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\n2 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a + S3)\n1 \u043a\u043e\u043f\u0438\u044f off-site (\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435)\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-4\"  class=\"wp-block-heading\">1.2 \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u041c\u0435\u0442\u043e\u0434<\/th><th>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/th><th>\u0420\u0430\u0437\u043c\u0435\u0440<\/th><th>Downtime<\/th><th>\u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/th><th>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f<\/th><\/tr><\/thead><tbody><tr><td><strong>mysqldump<\/strong><\/td><td>\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f<\/td><td>\u0411\u043e\u043b\u044c\u0448\u043e\u0439<\/td><td>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439<\/td><td>100%<\/td><td>\u2705 \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/td><\/tr><tr><td><strong>XtraBackup<\/strong><\/td><td>\u0411\u044b\u0441\u0442\u0440\u0430\u044f<\/td><td>\u0421\u0440\u0435\u0434\u043d\u0438\u0439<\/td><td>\u041d\u0435\u0442<\/td><td>100%<\/td><td>\u2705 \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439<\/td><\/tr><tr><td><strong>LVM snapshot<\/strong><\/td><td>\u041e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u0430\u044f<\/td><td>\u0411\u043e\u043b\u044c\u0448\u043e\u0439<\/td><td>\u0421\u0435\u043a\u0443\u043d\u0434\u044b<\/td><td>99%<\/td><td>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0442\u0430<\/td><\/tr><tr><td><strong>File copy<\/strong><\/td><td>\u0421\u0440\u0435\u0434\u043d\u044f\u044f<\/td><td>\u0411\u043e\u043b\u044c\u0448\u043e\u0439<\/td><td>\u041f\u043e\u043b\u043d\u044b\u0439<\/td><td>100%<\/td><td>\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"rtoc-5\"  class=\"wp-block-heading\">1.3 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">\u0414\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 MySQL \u2192 MariaDB:\n\n1. \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u043c\u043f (mysqldump)\n   - \u0414\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 MariaDB\n   - \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\n   \n2. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0430\u043f (XtraBackup)\n   - \u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0442\u0430 \u043a MySQL\n   - \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\n\n3. Snapshot \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432\n   - \u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \/etc\/mysql\/\n   - Runtime \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-6\"  class=\"wp-block-heading\">2. \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (mysqldump)<\/h2>\n\n\n\n<h3 id=\"rtoc-7\"  class=\"wp-block-heading\">2.1 \u041f\u043e\u043b\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0432\u0441\u0435\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# full_mysqldump.sh\n\nBACKUP_DIR=&quot;\/backup\/mysql\/dumps&quot;\nDATE=$(date +%Y%m%d_%H%M%S)\nBACKUP_FILE=&quot;$BACKUP_DIR\/full_backup_$DATE.sql&quot;\nLOG_FILE=&quot;$BACKUP_DIR\/backup.log&quot;\n\nmkdir -p &quot;$BACKUP_DIR&quot;\n\necho &quot;&#091;$(date)] Starting full database dump...&quot; | tee -a &quot;$LOG_FILE&quot;\n\nmysqldump \\\n    --user=root \\\n    --password \\\n    --all-databases \\\n    --routines \\\n    --triggers \\\n    --events \\\n    --single-transaction \\\n    --quick \\\n    --lock-tables=false \\\n    --master-data=2 \\\n    --flush-logs \\\n    --hex-blob \\\n    --default-character-set=utf8mb4 \\\n    --result-file=&quot;$BACKUP_FILE&quot; \\\n    2&gt;&amp;1 | tee -a &quot;$LOG_FILE&quot;\n\nif &#091; ${PIPESTATUS&#091;0]} -eq 0 ]; then\n    echo &quot;&#091;$(date)] Backup completed: $BACKUP_FILE&quot; | tee -a &quot;$LOG_FILE&quot;\n    \n    # \u0421\u0436\u0430\u0442\u0438\u0435\n    gzip &quot;$BACKUP_FILE&quot;\n    \n    # \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\n    md5sum &quot;${BACKUP_FILE}.gz&quot; &gt; &quot;${BACKUP_FILE}.gz.md5&quot;\n    \n    # \u0420\u0430\u0437\u043c\u0435\u0440\n    ls -lh &quot;${BACKUP_FILE}.gz&quot; | tee -a &quot;$LOG_FILE&quot;\n    \n    echo &quot;&#091;$(date)] Backup successful!&quot; | tee -a &quot;$LOG_FILE&quot;\nelse\n    echo &quot;&#091;$(date)] BACKUP FAILED!&quot; | tee -a &quot;$LOG_FILE&quot;\n    exit 1\nfi\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-8\"  class=\"wp-block-heading\">2.2 \u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b mysqldump<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">--all-databases              # \u0412\u0441\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\n--routines                   # Stored procedures \u0438 functions\n--triggers                   # \u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b\n--events                     # Scheduled events\n--single-transaction         # \u0414\u043b\u044f InnoDB \u0431\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a\n--quick                      # \u041d\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b\n--lock-tables=false          # \u041d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n--master-data=2              # \u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c binlog \u043f\u043e\u0437\u0438\u0446\u0438\u044e (\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439)\n--flush-logs                 # \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 binlog\n--hex-blob                   # BLOB \u0432 HEX (\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e)\n--default-character-set      # \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 (utf8mb4 \u0434\u043b\u044f emoji)\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-9\"  class=\"wp-block-heading\">2.3 \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# separate_dumps.sh\n\nBACKUP_DIR=&quot;\/backup\/mysql\/separate&quot;\nDATE=$(date +%Y%m%d_%H%M%S)\nOUTPUT_DIR=&quot;$BACKUP_DIR\/$DATE&quot;\n\nmkdir -p &quot;$OUTPUT_DIR&quot;\n\n# \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435)\nDATABASES=$(mysql -u root -p -N -e &quot;SHOW DATABASES;&quot; | \\\n    grep -Ev &quot;^(information_schema|performance_schema|mysql|sys)$&quot;)\n\nfor DB in $DATABASES; do\n    echo &quot;&#091;$(date)] Backing up database: $DB&quot;\n    \n    mysqldump \\\n        --user=root \\\n        --password \\\n        --databases &quot;$DB&quot; \\\n        --routines \\\n        --triggers \\\n        --events \\\n        --single-transaction \\\n        --result-file=&quot;$OUTPUT_DIR\/${DB}.sql&quot;\n    \n    # \u0421\u0436\u0430\u0442\u0438\u0435\n    gzip &quot;$OUTPUT_DIR\/${DB}.sql&quot;\n    \n    echo &quot;&#091;$(date)] Completed: $DB&quot;\ndone\n\necho &quot;&#091;$(date)] All databases backed up to: $OUTPUT_DIR&quot;\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-10\"  class=\"wp-block-heading\">2.4 \u0414\u0430\u043c\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0441\u0445\u0435\u043c\u044b)<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># \u0422\u043e\u043b\u044c\u043a\u043e CREATE TABLE, \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445\nmysqldump \\\n    --user=root \\\n    --password \\\n    --all-databases \\\n    --no-data \\\n    --routines \\\n    --triggers \\\n    --events \\\n    &gt; schema_only_$(date +%Y%m%d).sql\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-11\"  class=\"wp-block-heading\">2.5 \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0430\u0437<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# optimized_dump.sh\n\n# \u0414\u043b\u044f \u0431\u0430\u0437 &gt;100GB \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0430\u043c\u043f\nmysqldump \\\n    --user=root \\\n    --password \\\n    --all-databases \\\n    --single-transaction \\\n    --quick \\\n    --extended-insert \\\n    --max-allowed-packet=512M \\\n    --net-buffer-length=32K \\\n    | gzip -c &gt; backup_$(date +%Y%m%d).sql.gz\n\n# \u0418\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 mydumper \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\nmydumper \\\n    --user=root \\\n    --password=yourpass \\\n    --outputdir=\/backup\/mydumper_$(date +%Y%m%d) \\\n    --threads=4 \\\n    --compress \\\n    --build-empty-files \\\n    --routines \\\n    --events \\\n    --triggers\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-12\"  class=\"wp-block-heading\">3. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (XtraBackup)<\/h2>\n\n\n\n<h3 id=\"rtoc-13\"  class=\"wp-block-heading\">3.1 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Percona XtraBackup<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># Ubuntu\/Debian\nwget https:\/\/repo.percona.com\/apt\/percona-release_latest.$(lsb_release -sc)_all.deb\nsudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb\nsudo apt update\nsudo apt install percona-xtrabackup-80 -y\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\nxtrabackup --version\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-14\"  class=\"wp-block-heading\">3.2 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 backup \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">CREATE USER &#039;xtrabackup&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;BackupPass123!&#039;;\nGRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO &#039;xtrabackup&#039;@&#039;localhost&#039;;\nGRANT SELECT ON mysql.* TO &#039;xtrabackup&#039;@&#039;localhost&#039;;\nFLUSH PRIVILEGES;\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-15\"  class=\"wp-block-heading\">3.3 \u041f\u043e\u043b\u043d\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0430\u043f<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# xtrabackup_full.sh\n\nBACKUP_DIR=&quot;\/backup\/xtrabackup&quot;\nDATE=$(date +%Y%m%d_%H%M%S)\nFULL_BACKUP=&quot;$BACKUP_DIR\/full_$DATE&quot;\n\nmkdir -p &quot;$FULL_BACKUP&quot;\n\necho &quot;&#091;$(date)] Starting XtraBackup full backup...&quot;\n\nxtrabackup \\\n    --backup \\\n    --user=xtrabackup \\\n    --password=BackupPass123! \\\n    --target-dir=&quot;$FULL_BACKUP&quot; \\\n    --parallel=4 \\\n    --compress \\\n    --compress-threads=4\n\nif &#091; $? -eq 0 ]; then\n    echo &quot;&#091;$(date)] XtraBackup completed: $FULL_BACKUP&quot;\n    \n    # \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432\n    tar -czf &quot;${FULL_BACKUP}.tar.gz&quot; -C &quot;$BACKUP_DIR&quot; &quot;full_$DATE&quot;\n    \n    # \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443\n    rm -rf &quot;$FULL_BACKUP&quot;\n    \n    echo &quot;&#091;$(date)] Backup archived: ${FULL_BACKUP}.tar.gz&quot;\nelse\n    echo &quot;&#091;$(date)] XtraBackup FAILED!&quot;\n    exit 1\nfi\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-16\"  class=\"wp-block-heading\">3.4 \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 XtraBackup<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">\u2705 \u0413\u043e\u0440\u044f\u0447\u0438\u0439 \u0431\u044d\u043a\u0430\u043f (\u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 MySQL)\n\u2705 \u041d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n\u2705 \u0411\u044b\u0441\u0442\u0440\u0435\u0435 mysqldump \u0432 5-10 \u0440\u0430\u0437\n\u2705 \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u044d\u043a\u0430\u043f\u043e\u0432\n\u2705 Point-in-time recovery\n\u2705 \u0421\u0436\u0430\u0442\u0438\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443\n\u2705 \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-17\"  class=\"wp-block-heading\">4. \u0411\u044d\u043a\u0430\u043f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/h2>\n\n\n\n<h3 id=\"rtoc-18\"  class=\"wp-block-heading\">4.1 \u041f\u043e\u043b\u043d\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# backup_configs.sh\n\nBACKUP_DIR=&quot;\/backup\/mysql\/configs&quot;\nDATE=$(date +%Y%m%d_%H%M%S)\n\nmkdir -p &quot;$BACKUP_DIR&quot;\n\necho &quot;&#091;$(date)] Backing up MySQL configuration files...&quot;\n\n# \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\nsudo tar -czf &quot;$BACKUP_DIR\/mysql_configs_$DATE.tar.gz&quot; \\\n    \/etc\/mysql\/ \\\n    \/etc\/my.cnf 2&gt;\/dev\/null || true\n\n# Runtime \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\nmysql -u root -p -e &quot;SHOW VARIABLES;&quot; &gt; &quot;$BACKUP_DIR\/variables_$DATE.txt&quot;\nmysql -u root -p -e &quot;SHOW GLOBAL STATUS;&quot; &gt; &quot;$BACKUP_DIR\/status_$DATE.txt&quot;\n\n# \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0435\u0440\u0441\u0438\u0438\nmysql -V &gt; &quot;$BACKUP_DIR\/version_$DATE.txt&quot;\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432\nmysql -u root -p -e &quot;SHOW PLUGINS;&quot; &gt; &quot;$BACKUP_DIR\/plugins_$DATE.txt&quot;\n\n# Binary log \u043f\u043e\u0437\u0438\u0446\u0438\u044f\nmysql -u root -p -e &quot;SHOW MASTER STATUS\\G&quot; &gt; &quot;$BACKUP_DIR\/master_status_$DATE.txt&quot;\n\necho &quot;&#091;$(date)] Configuration backup completed: $BACKUP_DIR&quot;\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-19\"  class=\"wp-block-heading\">4.2 \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# export_variables.sh\n\nOUTPUT_FILE=&quot;mysql_variables_$(date +%Y%m%d).txt&quot;\n\nmysql -u root -p -e &quot;\nSELECT \n    VARIABLE_NAME,\n    VARIABLE_VALUE\nFROM performance_schema.global_variables\nWHERE VARIABLE_NAME IN (\n    &#039;innodb_buffer_pool_size&#039;,\n    &#039;innodb_log_file_size&#039;,\n    &#039;max_connections&#039;,\n    &#039;table_open_cache&#039;,\n    &#039;query_cache_size&#039;,\n    &#039;tmp_table_size&#039;,\n    &#039;max_heap_table_size&#039;,\n    &#039;thread_cache_size&#039;,\n    &#039;key_buffer_size&#039;,\n    &#039;binlog_format&#039;,\n    &#039;gtid_mode&#039;,\n    &#039;server_id&#039;\n)\nORDER BY VARIABLE_NAME;\n&quot; &gt; &quot;$OUTPUT_FILE&quot;\n\necho &quot;Key variables exported to: $OUTPUT_FILE&quot;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-20\"  class=\"wp-block-heading\">5. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/h2>\n\n\n\n<h3 id=\"rtoc-21\"  class=\"wp-block-heading\">5.1 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 SQL \u0434\u0430\u043c\u043f\u0430<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# verify_dump.sh\n\nBACKUP_FILE=&quot;$1&quot;\n\nif &#091; ! -f &quot;$BACKUP_FILE&quot; ]; then\n    echo &quot;Error: Backup file not found: $BACKUP_FILE&quot;\n    exit 1\nfi\n\necho &quot;Verifying backup: $BACKUP_FILE&quot;\n\n# \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0435\u0441\u043b\u0438 .gz\nif &#091;&#091; &quot;$BACKUP_FILE&quot; == *.gz ]]; then\n    gunzip -c &quot;$BACKUP_FILE&quot; &gt; \/tmp\/verify_backup.sql\n    VERIFY_FILE=&quot;\/tmp\/verify_backup.sql&quot;\nelse\n    VERIFY_FILE=&quot;$BACKUP_FILE&quot;\nfi\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b SQL\nif grep -q &quot;CREATE DATABASE&quot; &quot;$VERIFY_FILE&quot; &amp;&amp; \\\n   grep -q &quot;CREATE TABLE&quot; &quot;$VERIFY_FILE&quot;; then\n    echo &quot;\u2705 Backup file structure is valid&quot;\nelse\n    echo &quot;\u274c Backup file may be corrupted!&quot;\n    exit 1\nfi\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\nFILE_SIZE=$(stat -f%z &quot;$VERIFY_FILE&quot; 2&gt;\/dev\/null || stat -c%s &quot;$VERIFY_FILE&quot;)\nif &#091; &quot;$FILE_SIZE&quot; -gt 1000 ]; then\n    echo &quot;\u2705 Backup file size OK: $(numfmt --to=iec $FILE_SIZE)&quot;\nelse\n    echo &quot;\u26a0\ufe0f  Warning: Backup file is very small: $FILE_SIZE bytes&quot;\nfi\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 SQL \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 (\u043d\u0430 sample)\nhead -1000 &quot;$VERIFY_FILE&quot; | mysql --batch --skip-column-names -e &quot;SELECT &#039;OK&#039;;&quot; 2&gt;&amp;1\nif &#091; $? -eq 0 ]; then\n    echo &quot;\u2705 SQL syntax check passed&quot;\nelse\n    echo &quot;\u274c SQL syntax errors detected&quot;\nfi\n\n# \u041e\u0447\u0438\u0441\u0442\u043a\u0430\nif &#091; &quot;$VERIFY_FILE&quot; = &quot;\/tmp\/verify_backup.sql&quot; ]; then\n    rm -f \/tmp\/verify_backup.sql\nfi\n\necho &quot;Verification complete&quot;\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-22\"  class=\"wp-block-heading\">5.2 \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# test_restore.sh\n\nBACKUP_FILE=&quot;$1&quot;\nTEST_DB=&quot;test_restore_$(date +%Y%m%d_%H%M%S)&quot;\n\necho &quot;Testing restore from: $BACKUP_FILE&quot;\n\n# \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443\nmysql -u root -p -e &quot;CREATE DATABASE $TEST_DB;&quot;\n\n# \u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 1000 \u0441\u0442\u0440\u043e\u043a\nif &#091;&#091; &quot;$BACKUP_FILE&quot; == *.gz ]]; then\n    gunzip -c &quot;$BACKUP_FILE&quot; | head -1000 | mysql -u root -p &quot;$TEST_DB&quot;\nelse\n    head -1000 &quot;$BACKUP_FILE&quot; | mysql -u root -p &quot;$TEST_DB&quot;\nfi\n\nif &#091; $? -eq 0 ]; then\n    echo &quot;\u2705 Test restore successful&quot;\n    mysql -u root -p -e &quot;DROP DATABASE $TEST_DB;&quot;\n    exit 0\nelse\n    echo &quot;\u274c Test restore FAILED!&quot;\n    exit 1\nfi\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-23\"  class=\"wp-block-heading\">5.3 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# verify_checksums.sh\n\nBACKUP_DIR=&quot;\/backup\/mysql\/dumps&quot;\n\necho &quot;Verifying checksums in: $BACKUP_DIR&quot;\n\ncd &quot;$BACKUP_DIR&quot; || exit 1\n\nfor file in *.sql.gz; do\n    if &#091; -f &quot;${file}.md5&quot; ]; then\n        echo &quot;Checking: $file&quot;\n        md5sum -c &quot;${file}.md5&quot;\n        \n        if &#091; $? -eq 0 ]; then\n            echo &quot;\u2705 $file - OK&quot;\n        else\n            echo &quot;\u274c $file - CHECKSUM MISMATCH!&quot;\n        fi\n    else\n        echo &quot;\u26a0\ufe0f  No checksum for: $file&quot;\n    fi\ndone\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-24\"  class=\"wp-block-heading\">6. \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/h2>\n\n\n\n<h3 id=\"rtoc-25\"  class=\"wp-block-heading\">6.1 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">\/backup\/mysql\/\n\u251c\u2500\u2500 dumps\/                          # \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043c\u043f\u044b\n\u2502   \u251c\u2500\u2500 20251101_120000\/\n\u2502   \u2502   \u251c\u2500\u2500 full_backup.sql.gz\n\u2502   \u2502   \u251c\u2500\u2500 full_backup.sql.gz.md5\n\u2502   \u2502   \u2514\u2500\u2500 backup.log\n\u2502   \u2514\u2500\u2500 20251102_120000\/\n\u251c\u2500\u2500 separate\/                       # \u0420\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043c\u043f\u044b\n\u2502   \u2514\u2500\u2500 20251101_120000\/\n\u2502       \u251c\u2500\u2500 production_db.sql.gz\n\u2502       \u251c\u2500\u2500 analytics_db.sql.gz\n\u2502       \u2514\u2500\u2500 staging_db.sql.gz\n\u251c\u2500\u2500 xtrabackup\/                     # \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u044d\u043a\u0430\u043f\u044b\n\u2502   \u251c\u2500\u2500 full_20251101_120000.tar.gz\n\u2502   \u2514\u2500\u2500 full_20251102_120000.tar.gz\n\u251c\u2500\u2500 configs\/                        # \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\u2502   \u251c\u2500\u2500 mysql_configs_20251101.tar.gz\n\u2502   \u251c\u2500\u2500 variables_20251101.txt\n\u2502   \u2514\u2500\u2500 status_20251101.txt\n\u251c\u2500\u2500 binlogs\/                        # Binary logs\n\u2502   \u2514\u2500\u2500 20251101\/\n\u2502       \u251c\u2500\u2500 mysql-bin.000001\n\u2502       \u2514\u2500\u2500 mysql-bin.000002\n\u2514\u2500\u2500 scripts\/                        # \u0421\u043a\u0440\u0438\u043f\u0442\u044b\n    \u251c\u2500\u2500 full_mysqldump.sh\n    \u251c\u2500\u2500 xtrabackup_full.sh\n    \u2514\u2500\u2500 verify_dump.sh\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-26\"  class=\"wp-block-heading\">6.2 \u0421\u043a\u0440\u0438\u043f\u0442 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# rotate_backups.sh\n\nBACKUP_DIR=&quot;\/backup\/mysql\/dumps&quot;\nRETENTION_DAYS=30\n\necho &quot;Rotating backups older than $RETENTION_DAYS days in $BACKUP_DIR...&quot;\n\n# \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0441\u0442\u0430\u0440\u0448\u0435 N \u0434\u043d\u0435\u0439\nfind &quot;$BACKUP_DIR&quot; -type f -name &quot;*.sql.gz&quot; -mtime +$RETENTION_DAYS -delete\nfind &quot;$BACKUP_DIR&quot; -type f -name &quot;*.md5&quot; -mtime +$RETENTION_DAYS -delete\n\n# \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\nfind &quot;$BACKUP_DIR&quot; -type d -empty -delete\n\necho &quot;Rotation completed&quot;\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u044d\u043a\u0430\u043f\u044b\necho -e &quot;\\nRemaining backups:&quot;\ndu -sh &quot;$BACKUP_DIR&quot;\/* | sort -h\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-27\"  class=\"wp-block-heading\">7. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/h2>\n\n\n\n<h3 id=\"rtoc-28\"  class=\"wp-block-heading\">7.1 \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432 AWS S3<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# s3_upload.sh\n\nBACKUP_FILE=&quot;$1&quot;\nS3_BUCKET=&quot;s3:\/\/company-mysql-backups\/production\/&quot;\n\nif &#091; ! -f &quot;$BACKUP_FILE&quot; ]; then\n    echo &quot;Error: File not found: $BACKUP_FILE&quot;\n    exit 1\nfi\n\necho &quot;Uploading to S3: $BACKUP_FILE&quot;\n\naws s3 cp &quot;$BACKUP_FILE&quot; &quot;$S3_BUCKET&quot; \\\n    --storage-class STANDARD_IA \\\n    --server-side-encryption AES256 \\\n    --metadata &quot;created=$(date -Iseconds)&quot;\n\nif &#091; $? -eq 0 ]; then\n    echo &quot;\u2705 Backup uploaded to S3 successfully&quot;\n    echo &quot;S3 URL: ${S3_BUCKET}$(basename $BACKUP_FILE)&quot;\nelse\n    echo &quot;\u274c S3 upload FAILED!&quot;\n    exit 1\nfi\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-29\"  class=\"wp-block-heading\">7.2 \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 (rsync)<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# remote_sync.sh\n\nLOCAL_BACKUP=&quot;\/backup\/mysql\/&quot;\nREMOTE_HOST=&quot;backup-server.company.com&quot;\nREMOTE_USER=&quot;backup&quot;\nREMOTE_PATH=&quot;\/backups\/mysql-prod\/&quot;\nSSH_KEY=&quot;\/root\/.ssh\/backup_key&quot;\n\necho &quot;Syncing backups to remote server...&quot;\n\nrsync -avz --progress \\\n    --delete-after \\\n    -e &quot;ssh -i $SSH_KEY&quot; \\\n    &quot;$LOCAL_BACKUP&quot; \\\n    &quot;$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH&quot;\n\nif &#091; $? -eq 0 ]; then\n    echo &quot;\u2705 Remote sync completed&quot;\nelse\n    echo &quot;\u274c Remote sync FAILED!&quot;\n    exit 1\nfi\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-30\"  class=\"wp-block-heading\">7.3 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0431\u044d\u043a\u0430\u043f\u0430<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# backup_and_upload.sh\n\n# 1. \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\n.\/full_mysqldump.sh\nBACKUP_FILE=&quot;\/backup\/mysql\/dumps\/full_backup_$(date +%Y%m%d_*)*.sql.gz&quot;\n\n# 2. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\n.\/verify_dump.sh &quot;$BACKUP_FILE&quot;\n\n# 3. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 S3\nif &#091; $? -eq 0 ]; then\n    .\/s3_upload.sh &quot;$BACKUP_FILE&quot;\nfi\n\n# 4. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\n.\/remote_sync.sh\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-31\"  class=\"wp-block-heading\">8. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/h2>\n\n\n\n<h3 id=\"rtoc-32\"  class=\"wp-block-heading\">8.1 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0431\u044d\u043a\u0430\u043f\u0430<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# create_manifest.sh\n\nBACKUP_FILE=&quot;$1&quot;\nMANIFEST=&quot;${BACKUP_FILE}.manifest.txt&quot;\n\ncat &gt; &quot;$MANIFEST&quot; &lt;&lt; EOF\n==========================================\nMySQL Backup Manifest\n==========================================\nBackup Date: $(date)\nServer Hostname: $(hostname)\nMySQL Version: $(mysql -V)\nBackup File: $BACKUP_FILE\nFile Size: $(ls -lh &quot;$BACKUP_FILE&quot; | awk &#039;{print $5}&#039;)\n\nChecksum:\n$(md5sum &quot;$BACKUP_FILE&quot;)\n\nDatabases Included:\nEOF\n\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0438\u0437 \u0434\u0430\u043c\u043f\u0430\nif &#091;&#091; &quot;$BACKUP_FILE&quot; == *.gz ]]; then\n    gunzip -c &quot;$BACKUP_FILE&quot; | grep &quot;^CREATE DATABASE&quot; | sed &#039;s\/.*`\\(.*\\)`.*\/\\1\/&#039; &gt;&gt; &quot;$MANIFEST&quot;\nelse\n    grep &quot;^CREATE DATABASE&quot; &quot;$BACKUP_FILE&quot; | sed &#039;s\/.*`\\(.*\\)`.*\/\\1\/&#039; &gt;&gt; &quot;$MANIFEST&quot;\nfi\n\ncat &gt;&gt; &quot;$MANIFEST&quot; &lt;&lt; EOF\n\nBinary Log Position:\nEOF\n\nmysql -u root -p -e &quot;SHOW MASTER STATUS\\G&quot; &gt;&gt; &quot;$MANIFEST&quot; 2&gt;\/dev\/null\n\necho &quot;Manifest created: $MANIFEST&quot;\n<\/code><\/pre>\n\n\n\n<h3 id=\"rtoc-33\"  class=\"wp-block-heading\">8.2 \u0416\u0443\u0440\u043d\u0430\u043b \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#!\/bin\/bash\n# log_backup.sh\n\nLOG_FILE=&quot;\/backup\/mysql\/backup_journal.log&quot;\nBACKUP_FILE=&quot;$1&quot;\n\ncat &gt;&gt; &quot;$LOG_FILE&quot; &lt;&lt; EOF\n---\nDate: $(date -Iseconds)\nFile: $(basename &quot;$BACKUP_FILE&quot;)\nSize: $(ls -lh &quot;$BACKUP_FILE&quot; | awk &#039;{print $5}&#039;)\nMD5: $(md5sum &quot;$BACKUP_FILE&quot; | awk &#039;{print $1}&#039;)\nStatus: SUCCESS\n---\nEOF\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-34\"  class=\"wp-block-heading\">\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u044b<\/h2>\n\n\n\n<h3 id=\"rtoc-35\"  class=\"wp-block-heading\">\u2705 \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u0421\u043e\u0437\u0434\u0430\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u043c\u043f (mysqldump)<\/li>\n\n\n\n<li>[ ] \u0421\u043e\u0437\u0434\u0430\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0430\u043f (XtraBackup)<\/li>\n\n\n\n<li>[ ] \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/li>\n\n\n\n<li>[ ] \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b runtime \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/li>\n\n\n\n<li>[ ] \u0412\u0441\u0435 \u0431\u044d\u043a\u0430\u043f\u044b \u0441\u0436\u0430\u0442\u044b (gzip)<\/li>\n\n\n\n<li>[ ] \u0421\u043e\u0437\u0434\u0430\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b (MD5)<\/li>\n\n\n\n<li>[ ] \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438<\/li>\n\n\n\n<li>[ ] \u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/li>\n\n\n\n<li>[ ] \u0411\u044d\u043a\u0430\u043f\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/li>\n\n\n\n<li>[ ] \u0421\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u044b)<\/li>\n<\/ul>\n\n\n\n<h3 id=\"rtoc-36\"  class=\"wp-block-heading\">\ud83d\udcca \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u044d\u043a\u0430\u043f\u043e\u0432<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u0422\u0438\u043f \u0431\u044d\u043a\u0430\u043f\u0430<\/th><th>\u0420\u0430\u0437\u043c\u0435\u0440<\/th><th>\u0412\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f<\/th><th>\u041b\u043e\u043a\u0430\u0446\u0438\u044f<\/th><\/tr><\/thead><tbody><tr><td>mysqldump (\u043f\u043e\u043b\u043d\u044b\u0439)<\/td><td>___ GB<\/td><td>___ \u043c\u0438\u043d<\/td><td>\/backup\/mysql\/dumps\/<\/td><\/tr><tr><td>mysqldump (\u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435)<\/td><td>___ GB<\/td><td>___ \u043c\u0438\u043d<\/td><td>\/backup\/mysql\/separate\/<\/td><\/tr><tr><td>XtraBackup<\/td><td>___ GB<\/td><td>___ \u043c\u0438\u043d<\/td><td>\/backup\/mysql\/xtrabackup\/<\/td><\/tr><tr><td>\u041a\u043e\u043d\u0444\u0438\u0433\u0438<\/td><td>___ MB<\/td><td>___ \u0441\u0435\u043a<\/td><td>\/backup\/mysql\/configs\/<\/td><\/tr><tr><td><strong>\u0418\u0422\u041e\u0413\u041e<\/strong><\/td><td>___ GB<\/td><td>___ \u043c\u0438\u043d<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"rtoc-37\"  class=\"wp-block-heading\">\ud83d\udd0d \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442<\/li>\n\n\n\n<li>[ ] SQL \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432\u0430\u043b\u0438\u0434\u0435\u043d<\/li>\n\n\n\n<li>[ ] \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0411\u0414<\/li>\n\n\n\n<li>[ ] \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e<\/li>\n\n\n\n<li>[ ] \u0424\u0430\u0439\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-38\"  class=\"wp-block-heading\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/h2>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\"># \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0445 \u0431\u044d\u043a\u0430\u043f\u043e\u0432\ndu -sh \/backup\/mysql\/*\n\n# \u041d\u0430\u0439\u0442\u0438 \u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u044d\u043a\u0430\u043f\u044b\nfind \/backup\/mysql -type f -mtime +30\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435\ndf -h \/backup\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0431\u044d\u043a\u0430\u043f\u043e\u0432 \u0441 \u0434\u0430\u0442\u0430\u043c\u0438\nls -lht \/backup\/mysql\/dumps\/*.sql.gz | head -10\n\n# \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0411\u0414 \u0438 \u0431\u044d\u043a\u0430\u043f\u0430\nmysql -u root -p -e &quot;SELECT SUM(data_length+index_length)\/1024\/1024 AS MB FROM information_schema.tables;&quot;\nls -lh \/backup\/mysql\/dumps\/*.sql.gz\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"rtoc-39\"  class=\"wp-block-heading\">\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043a:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/claude.ai\/chat\/03-prepare-infrastructure.md\">\u2192 \u0413\u041b\u0410\u0412\u0410 3: \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MySQL \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/li>\n\n\n\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 MariaDB<\/li>\n\n\n\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/li>\n\n\n\n<li>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u0426\u0435\u043b\u044c \u0433\u043b\u0430\u0432\u044b: \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/p>\n","protected":false},"author":1,"featured_media":3716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[971],"tags":[975,976,973,972,974],"class_list":["post-3709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-971","tag-db","tag-dba","tag-mariadb","tag-mysql","tag-974"],"acf":[],"_links":{"self":[{"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/posts\/3709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/comments?post=3709"}],"version-history":[{"count":0,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/posts\/3709\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/media\/3716"}],"wp:attachment":[{"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/media?parent=3709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/categories?post=3709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ru.davidka.net\/ru\/wp-json\/wp\/v2\/tags?post=3709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}