{"id":229,"date":"2024-03-08T06:58:39","date_gmt":"2024-03-07T22:58:39","guid":{"rendered":"https:\/\/669082.xyz\/?p=229"},"modified":"2024-03-17T05:00:20","modified_gmt":"2024-03-16T21:00:20","slug":"%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%8e%e7%bd%91%e7%ab%99%e5%85%a8%e8%87%aa%e5%8a%a8%e5%a4%87%e4%bb%bd%e8%84%9a%e6%9c%ac_%e8%bf%9c%e7%a8%8b%e5%a4%87%e4%bb%bd","status":"publish","type":"post","link":"https:\/\/669082.xyz\/index.php\/2024\/03\/08\/%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%8e%e7%bd%91%e7%ab%99%e5%85%a8%e8%87%aa%e5%8a%a8%e5%a4%87%e4%bb%bd%e8%84%9a%e6%9c%ac_%e8%bf%9c%e7%a8%8b%e5%a4%87%e4%bb%bd\/","title":{"rendered":"\u6570\u636e\u5e93\u4e0e\u7f51\u7ad9\u5168\u81ea\u52a8\u5907\u4efd\u811a\u672c_\u8fdc\u7a0b\u5907\u4efd"},"content":{"rendered":"<h5>\u8fdc\u7a0b\u5907\u4efd \u4e00\u822c\u7528\u4e8e\u591a\u4e2a\u8fd0\u884c\u7684\u7f51\u7ad9\u81ea\u52a8\u5907\u4efd\u5230\u4e00\u53f0\u5907\u4efd\u673a<\/h5>\n<h5>\u4e00\u822c\u7528crontab\u5b9a\u65f6\u5668\u8fd0\u884c<\/h5>\n<h5>\u5206\u4e3a\u4e24\u90e8\u5206<\/h5>\n<h5>\u63a5\u6536\u7aef(\u5907\u4efd\u673a) \u63a5\u6536\u4e0a\u4f20 \u5e76\u5904\u7406<\/h5>\n<h5>\u53d1\u9001\u7aef(\u8fd0\u884c\u7740\u7684\u7f51\u7ad9) \u53ef\u4ee5\u662f\u591a\u53f0  \u5907\u4efd \u538b\u7f29 \u4e0a\u4f20<\/h5>\n<h4>\u53d1\u9001\u7aef\u4ee3\u7801<\/h4>\n<pre><code class=\"language-shell\">#!\/bin\/bash\n\n#\u5907\u4efd\u673a\u63a5\u6536\u4e0a\u4f20\u7684url \nuploadUrl=&quot;http:\/\/127.0.0.1\/?key=abcdefg&quot;\n\n#\u5907\u4efd\u6240\u4f7f\u7528\u7684\u76ee\u5f55 \u9700\u63d0\u524d\u521b\u5efa\nBCK_DIR=&quot;\/www\/mybak&quot;\n\n#\u5907\u4efd\u6570\u636e\u5e93\u914d\u7f6e  \u8fd9\u91cc\u6700\u597d\u7528root \u4e00\u6b21\u5907\u4efd\u6240\u6709\u6570\u636e\u5e93\nDB_USER=&quot;root&quot;\nDB_PASS=&quot;123456&quot;\nBIN_DIR=&quot;\/www\/server\/mysql\/bin&quot;\n\n#\u5907\u4efd\u7f51\u7ad9\u914d\u7f6e\n#\u662f\u5426\u5907\u4efd\u7f51\u7ad9\nIS_BAK_WEBSITE=&quot;1&quot;\n#\u9700\u8981\u5907\u4efd\u7684\u7f51\u7ad9\u76ee\u5f55 \nWEBSITE_DIR=&quot;\/www\/wwwroot&quot;\n\n#\u5f53\u524d\u65e5\u671f\ndateDIR=`date +&quot;%y-%m-%d&quot;`\n\n#\u521b\u5efa\u4e00\u4e2adata\u76ee\u5f55\u7528\u4e8e\u653e\u5907\u4efd\u7684\u6570\u636e\u5e93\ncd $BCK_DIR\nmkdir -p data\n\nfor i in `$BIN_DIR\/mysql -u$DB_USER -p$DB_PASS -e &quot;show databases&quot;  | grep -v &quot;Database&quot; | grep -v &quot;information_schema&quot; | grep -v &quot;mysql&quot; | grep -v &quot;performance_schema&quot; | grep -v &quot;sys&quot;`\n\ndo\n  $BIN_DIR\/mysqldump -u$DB_USER -p$DB_PASS $i &gt; $BCK_DIR\/data\/${i}_${dateDIR}.sql\ndone\n\n#\u5907\u4efd\u7f51\u7ad9\nif [ &quot;$IS_BAK_WEBSITE&quot; = &quot;1&quot; ]; then\n    cp -r $WEBSITE_DIR $BCK_DIR\/website\nfi\n\n#\u538b\u7f29\ncd $BCK_DIR; tar -czvf backup_${dateDIR}.tar.gz * --remove-files\n\n#\u4e0a\u4f20\ncd $BCK_DIR; curl -F &quot;file=@backup_${dateDIR}.tar.gz&quot; -X POST &quot;${uploadUrl}&quot;\n\n#\u5220\u9664\u6587\u4ef6\ncd $BCK_DIR; rm -rf backup_${dateDIR}.tar.gz<\/code><\/pre>\n<h4>\u63a5\u6536\u7aef\u811a\u672c php\u7684<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\/\/\u914d\u7f6e\u4fe1\u606f\n\/\/\u5907\u4efd\u4fdd\u5b58\u7684\u76ee\u5f55 \u9700\u63d0\u524d\u521b\u5efa\n$backupDIr = &quot;\/www\/wwwroot\/bak&quot;;\n\n\/\/\u4fdd\u5b58\u591a\u5c11\u4efd\u5907\u4efd \u7528\u4e8e\u81ea\u52a8\u5220\u9664\u65e7\u7684\u5907\u4efd\n$backUpLimit = 2;\n\n\/\/\u8fde\u63a5key \u53ea\u6709key\u6b63\u786e\u624d\u80fd\u4e0a\u4f20\n$connectKey = &#039;abcdefg&#039;;\n\n\/\/\u8bbe\u7f6e\u672c\u673a\u6700\u5c11\u4fdd\u7559\u591a\u5c11\u78c1\u76d8\u7a7a\u95f4 \u5feb\u6ee1\u4e86\u5c31\u4e0d\u4fdd\u5b58\u4e86 \u5355\u4f4d\u662f G\n$needRaminSpace = 5;\n\n\/\/\u5224\u65ad\u78c1\u76d8\u7a7a\u95f4\n$freeSpaceG = floor(disk_free_space(&quot;\/&quot;) \/ (1024 * 1024 * 1024));\nif($freeSpaceG &lt; $needRaminSpace){\n    echo &#039;\u78c1\u76d8\u7a7a\u95f4\u4e0d\u8db3,\u62d2\u7edd\u4fdd\u5b58&#039;;die;\n}\n\n\/\/\u83b7\u53d6\u5bf9\u65b9IP  \u56e0\u4e3a\u53ef\u80fd\u6709\u591a\u4e2a\u7ad9\u5907\u4efd\u8fc7\u6765\n\/\/\u6765\u83b7\u53d6\u5bf9\u65b9IP \u7528\u4e8e\u521b\u5efa\u76ee\u5f55 \u6216\u8005 \u4fdd\u5b58\u5230\u5bf9\u5e94\u76ee\u5f55 \u6216\u8005\u5220\u9664\u591a\u4f59\u7684\u6587\u4ef6\n$remoteIp = $_SERVER[&#039;REMOTE_ADDR&#039;];\n\/\/\u4fdd\u5b58\u76ee\u5f55  \u52a0\u4e0aIP\n$backupDIr = $backupDIr . &#039;\/&#039; . $remoteIp;\n\n\/\/\u5224\u65adkey\nif( !is_array($_GET) ||  count($_GET) == 0 || !isset($_GET[&quot;key&quot;]) || $_GET[&quot;key&quot;] != $connectKey){\n    echo &#039;keyError&#039;;die;\n} \n\n\/\/\u6765\u63a5\u6536\u6587\u4ef6\u4e0a\u4f20 \u8fd9\u91cc\u4ec5\u5141\u8bb8 .gz\u540e\u7f00\u7684\u6587\u4ef6 \u4e3a\u4e86\u5b89\u5168\nif( (!isset($_FILES[&#039;file&#039;])) || (substr($_FILES[&quot;file&quot;][&quot;name&quot;], -3) != &#039;.gz&#039;) || ($_FILES[&quot;file&quot;][&quot;error&quot;] &gt; 0) ){\n    echo &#039;fileError&#039;;die;\n}\n\n\/\/\u5224\u65ad\u76ee\u5f55\u662f\u5426\u5b58\u5728\nif ( !is_dir($backupDIr) ) {\n    mkdir($backupDIr);\n}\n\n\/\/\u5b9a\u4e49\u6587\u4ef6\u5b58\u653e\u4f4d\u7f6e  \u52a0\u4e2a\u65f6\u95f4\u6233\u5427 \u4e0b\u9762\u518d\u5220\u9664\u6587\u4ef6\u65f6\u5019  \u7528\u8fd9\u4e2a\u65f6\u95f4\u6233\u5224\u65ad\u65b0\u65e7\n$saveFileName = $backupDIr . &#039;\/&#039; . $_FILES[&quot;file&quot;][&quot;name&quot;]  . &#039;_&#039; . time();\n\n\/\/\u8f6c\u5b58\nmove_uploaded_file($_FILES[&quot;file&quot;][&quot;tmp_name&quot;], $saveFileName);\n\n\/\/\u6700\u540e\u518d\u6765\u6839\u636e\u6587\u4ef6\u7684\u65b0\u65e7 \u53ea\u4fdd\u7559\u6307\u5b9a\u7684\u6587\u4ef6\u4e2a\u6570\n\/\/\u83b7\u53d6\u67d0\u76ee\u5f55\u4e0b\u6240\u6709\u6587\u4ef6\u3001\u76ee\u5f55\u540d\uff08\u4e0d\u5305\u62ec\u5b50\u76ee\u5f55\u4e0b\u6587\u4ef6\u3001\u76ee\u5f55\u540d\uff09  \n$handler = opendir($backupDIr);  \nwhile ( ( $filename = readdir($handler) ) !== false ) {\n    \/\/ \u52a1\u5fc5\u4f7f\u7528!==\uff0c\u9632\u6b62\u76ee\u5f55\u4e0b\u51fa\u73b0\u7c7b\u4f3c\u6587\u4ef6\u540d\u201c0\u201d\u7b49\u60c5\u51b5  \n    if ($filename !== &quot;.&quot; &amp;&amp; $filename !== &quot;..&quot;) \n    {       \n            \/\/\u628a\u6587\u4ef6\u540d\u91cc\u524d\u9762\u4fdd\u5b58\u7684\u65f6\u95f4\u6233\u505a\u4e3akey  \u540e\u976210\u4f4d\n            $timeStamp = substr($filename, -10);\n            $files[$timeStamp] = $filename;\n     } \n}  \nclosedir($handler);  \n\n\/\/$files \u91cc\u4fdd\u5b58\u7740\u6240\u6709\u6587\u4ef6\u540d key\u5c31\u662f\u90a3\u4e2a\u65f6\u95f4\u6233 value\u5c31\u662f\u6587\u4ef6\u540d\n\/\/\u5982\u679c\u5927\u4e8e\u6307\u5b9a\u7684\u6587\u4ef6\u4e2a\u6570 \u624d\u505a\u64cd\u4f5c\nif ( count($files) &gt; $backUpLimit) {\n    \/\/\u9700\u8981\u5220\u9664\u6587\u4ef6\u7684\u4e2a\u6570\n    $needDeleteCount = count($files) - $backUpLimit;\n\n    \/\/\u628a\u65f6\u95f4\u6233\u5355\u72ec\u62ff\u51fa\u6765\u5f04\u4e2a\u6570\u7ec4  \u65b9\u4fbf\u7b5b\u9009\n    $timeStampArr = array_keys($files);\n\n    for ($i=0; $i &lt; $needDeleteCount; $i++) { \n        \/\/\u627e\u51fa\u6700\u5c0f\u7684\n        $minTimeStamp = min($timeStampArr);\n\n        \/\/\u5220\u9664\u6587\u4ef6  \u8fd9\u4e2a\u65f6\u95f4\u5f53key\n        unlink($backupDIr . &#039;\/&#039; . $files[$minTimeStamp]);\n\n        \/\/\u518d\u628a\u4fdd\u5b58\u65f6\u95f4\u7684\u6570\u7ec4\u91cc\u5f53\u524d\u5143\u7d20\u5220\u6389 \u8fdb\u884c\u4e0b\u6b21\u5faa\u73af\n        $deleteKey = array_search($minTimeStamp, $timeStampArr);\n        unset($timeStampArr[$deleteKey]);\n    }\n}\n\necho &#039;\u5907\u4efd\u673a\u8fd4\u56de_ok&#039;;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8fdc\u7a0b\u5907\u4efd \u4e00\u822c\u7528\u4e8e\u591a\u4e2a\u8fd0\u884c\u7684\u7f51\u7ad9\u81ea\u52a8\u5907\u4efd\u5230\u4e00\u53f0\u5907\u4efd\u673a \u4e00\u822c\u7528crontab\u5b9a\u65f6\u5668\u8fd0\u884c \u5206\u4e3a\u4e24\u90e8\u5206 \u63a5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,9],"tags":[],"class_list":["post-229","post","type-post","status-publish","format-standard","hentry","category-linux","category-php"],"_links":{"self":[{"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/posts\/229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/comments?post=229"}],"version-history":[{"count":4,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/posts\/229\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/posts\/229\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/669082.xyz\/index.php\/wp-json\/wp\/v2\/tags?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}