{"id":3822,"date":"2025-07-06T14:22:12","date_gmt":"2025-07-06T06:22:12","guid":{"rendered":"https:\/\/www.laixuexila.com\/?p=3822"},"modified":"2025-07-06T14:22:12","modified_gmt":"2025-07-06T06:22:12","slug":"%e9%80%82%e9%85%8d-docker-%e5%ae%b9%e5%99%a8%e7%9a%84-innodb-%e5%b4%a9%e6%ba%83%e6%81%a2%e5%a4%8d%ef%bc%88innodb_force_recovery%ef%bc%89%e6%b3%a8%e5%85%a5%e4%b8%8e%e9%87%8d%e5%90%af%e8%84%9a%e6%9c%ac","status":"publish","type":"post","link":"https:\/\/www.laixuexila.com\/index.php\/2025\/07\/06\/%e9%80%82%e9%85%8d-docker-%e5%ae%b9%e5%99%a8%e7%9a%84-innodb-%e5%b4%a9%e6%ba%83%e6%81%a2%e5%a4%8d%ef%bc%88innodb_force_recovery%ef%bc%89%e6%b3%a8%e5%85%a5%e4%b8%8e%e9%87%8d%e5%90%af%e8%84%9a%e6%9c%ac\/","title":{"rendered":"\u9002\u914d Docker \u5bb9\u5668\u7684 InnoDB \u5d29\u6e83\u6062\u590d\uff08innodb_force_recovery\uff09\u6ce8\u5165\u4e0e\u91cd\u542f\u811a\u672c\u65b9\u6848"},"content":{"rendered":"\n<p>\u4e0b\u9762\u4e3a\u4f60\u63d0\u4f9b\u4e00\u5957<strong>\u9002\u914d Docker \u5bb9\u5668\u7684 InnoDB \u5d29\u6e83\u6062\u590d\uff08<code>innodb_force_recovery<\/code>\uff09\u6ce8\u5165\u4e0e\u91cd\u542f\u811a\u672c\u65b9\u6848<\/strong>\uff0c\u7528\u4e8e\u5728\u5bb9\u5668\u5316\u90e8\u7f72\u73af\u5883\u4e2d\u51fa\u73b0 InnoDB \u8868\u635f\u574f\u65f6\u5e94\u6025\u5bfc\u51fa\u6570\u636e\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u573a\u666f\u8bf4\u660e<\/h2>\n\n\n\n<p>\u4f60\u53ef\u80fd\u9047\u5230\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker \u5bb9\u5668\u4e2d\u7684 MySQL \u670d\u52a1\u56e0 InnoDB \u8868\u635f\u574f\u65e0\u6cd5\u542f\u52a8<\/li>\n\n\n\n<li>\u5bb9\u5668\u5185\u65e0\u6cd5\u76f4\u63a5\u4fee\u6539 <code>\/etc\/my.cnf<\/code> \u6216\u6302\u8f7d\u4e86\u5916\u90e8\u914d\u7f6e<\/li>\n\n\n\n<li>\u5e0c\u671b\u4e34\u65f6\u6ce8\u5165 <code>innodb_force_recovery<\/code> \u5e76\u5b8c\u6210\u5e94\u6025\u6570\u636e\u5bfc\u51fa<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u3001\u65b9\u6cd5\u6982\u89c8<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u65b9\u5f0f<\/th><th>\u4f18\u70b9<\/th><th>\u7f3a\u70b9<\/th><\/tr><\/thead><tbody><tr><td>1. \u4fee\u6539\u5bb9\u5668\u5185\u914d\u7f6e\u6587\u4ef6 + \u91cd\u542f\u5bb9\u5668<\/td><td>\u5feb\u901f\u3001\u9002\u914d\u73b0\u6709\u5bb9\u5668<\/td><td>\u4fee\u6539\u5bb9\u5668\u5185\u90e8\u72b6\u6001<\/td><\/tr><tr><td>2. \u4f7f\u7528\u73af\u5883\u53d8\u91cf\u6302\u8f7d my.cnf \u6587\u4ef6<\/td><td>\u9002\u5408\u6709 volume \u7684\u573a\u666f<\/td><td>\u8981\u91cd\u5efa\u5bb9\u5668<\/td><\/tr><tr><td>3. \u547d\u4ee4\u6ce8\u5165\uff08exec \u914d\u7f6e + \u4e34\u65f6\u6267\u884c\uff09<\/td><td>\u5feb\u901f\u5e94\u6025\u3001\u811a\u672c\u5316<\/td><td>\u4e0d\u6301\u4e45\uff0c\u9700\u591a\u6b65\u9aa4\u63a7\u5236<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e0b\u9762\u63d0\u4f9b\u7684\u662f\u7b2c 1 \u79cd\u65b9\u5f0f\u7684\u811a\u672c\uff08\u6700\u76f4\u63a5\u3001\u6700\u517c\u5bb9\uff09\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001\u51c6\u5907\u4fe1\u606f<\/h2>\n\n\n\n<p>\u5047\u8bbe\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker \u5bb9\u5668\u540d\u79f0\u4e3a\uff1a<code>mysql_docker<\/code><\/li>\n\n\n\n<li>\u6570\u636e\u76ee\u5f55\u9ed8\u8ba4 <code>\/var\/lib\/mysql<\/code><\/li>\n\n\n\n<li>\u7528\u6237\u540d\uff1a<code>root<\/code>\uff0c\u5bc6\u7801\uff1a<code>your_pass<\/code><\/li>\n\n\n\n<li>\u4f60\u9700\u8981\u5c06 <code>innodb_force_recovery<\/code> \u8bbe\u7f6e\u4e3a <code>3<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001\u5e94\u6025\u5bfc\u51fa\u811a\u672c\uff08\u5bb9\u5668\u7248\uff09<\/h2>\n\n\n\n<p>\u4fdd\u5b58\u4e3a\uff1a<code>docker_innodb_recovery.sh<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\n# === \u57fa\u7840\u914d\u7f6e ===\nCONTAINER_NAME=\"mysql_docker\"\nMYSQL_USER=\"root\"\nMYSQL_PASS=\"your_pass\"\nBACKUP_DIR=\".\/docker_mysql_recovery_$(date +%F_%H%M)\"\nRECOVERY_LEVEL=3   # \u53ef\u8c03\u4e3a 1~6\n\n# === Step 1: \u505c\u6b62\u5bb9\u5668 ===\necho \"&#91;INFO] \u505c\u6b62\u5bb9\u5668 $CONTAINER_NAME...\"\ndocker stop $CONTAINER_NAME\n\n# === Step 2: \u6ce8\u5165 innodb_force_recovery \u914d\u7f6e ===\necho \"&#91;INFO] \u542f\u52a8\u5bb9\u5668\u5e76\u8bbe\u7f6e\u6062\u590d\u6a21\u5f0f...\"\ndocker commit $CONTAINER_NAME ${CONTAINER_NAME}_temp\n\ndocker run -d --name ${CONTAINER_NAME}_recovery \\\n  --rm \\\n  -e MYSQL_ROOT_PASSWORD=$MYSQL_PASS \\\n  --volumes-from $CONTAINER_NAME \\\n  ${CONTAINER_NAME}_temp \\\n  --innodb_force_recovery=$RECOVERY_LEVEL\n\n# \u7b49\u5f85 MySQL \u542f\u52a8\necho \"&#91;INFO] \u7b49\u5f85 MySQL \u542f\u52a8...\"\nsleep 10\n\n# === Step 3: \u5bfc\u51fa\u6570\u636e ===\nmkdir -p \"$BACKUP_DIR\"\n\necho \"&#91;INFO] \u83b7\u53d6\u7528\u6237\u6570\u636e\u5e93\u5217\u8868...\"\nDBS=$(docker exec ${CONTAINER_NAME}_recovery \\\n  mysql -u$MYSQL_USER -p$MYSQL_PASS -Nse \\\n  \"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('mysql','information_schema','performance_schema','sys');\")\n\nfor DB in $DBS; do\n  echo \"&#91;INFO] \u5bfc\u51fa\u6570\u636e\u5e93 $DB\"\n  docker exec ${CONTAINER_NAME}_recovery \\\n    mysqldump -u$MYSQL_USER -p$MYSQL_PASS \\\n    --single-transaction --skip-lock-tables --quick $DB \\\n    &gt; \"$BACKUP_DIR\/$DB.sql\"\ndone\n\n# === Step 4: \u505c\u6b62\u5bb9\u5668\u5e76\u6e05\u7406 ===\necho \"&#91;INFO] \u505c\u6b62\u5e94\u6025\u5bb9\u5668...\"\ndocker stop ${CONTAINER_NAME}_recovery\n\necho \"&#91;INFO] \u5220\u9664\u4e34\u65f6\u955c\u50cf ${CONTAINER_NAME}_temp\"\ndocker rmi ${CONTAINER_NAME}_temp\n\necho \"&#91;OK] \u5bfc\u51fa\u5b8c\u6210\uff0c\u6587\u4ef6\u4f4d\u4e8e $BACKUP_DIR\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u56db\u3001\u76ee\u5f55\u7ed3\u6784\uff08\u6267\u884c\u5b8c\u6bd5\u540e\uff09<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>.\n\u2514\u2500\u2500 docker_mysql_recovery_2025-07-06_1450\/\n    \u251c\u2500\u2500 db1.sql\n    \u251c\u2500\u2500 db2.sql\n    \u2514\u2500\u2500 ...<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e94\u3001\u53ef\u9009\u589e\u5f3a\uff08\u8fdb\u9636\uff09<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u76ee\u6807<\/th><th>\u5b9e\u73b0\u65b9\u5f0f<\/th><\/tr><\/thead><tbody><tr><td>\ud83d\udcec \u90ae\u4ef6\u901a\u77e5\u5bfc\u51fa\u72b6\u6001<\/td><td><code>mailx<\/code> \u6216 <code>sendgrid API<\/code><\/td><\/tr><tr><td>\ud83e\ude84 \u81ea\u52a8\u538b\u7f29\u5bfc\u51fa\u6587\u4ef6<\/td><td><code>tar -czf backup.tar.gz *.sql<\/code><\/td><\/tr><tr><td>\ud83d\udc33 \u591a\u5bb9\u5668\u6279\u91cf\u5904\u7406<\/td><td>\u4f7f\u7528 <code>docker ps --filter \"ancestor=mysql\"<\/code> \u7ed3\u5408<\/td><\/tr><tr><td>\ud83d\udce4 \u4e0a\u4f20 OSS \/ S3<\/td><td>\u4f7f\u7528 <code>awscli<\/code> \u6216 <code>coscmd<\/code> \u5de5\u5177<\/td><\/tr><tr><td>\ud83d\udd01 \u52a0\u5165\u76d1\u63a7\u548c\u5bb9\u707e\u673a\u5236<\/td><td>\u7528 Prometheus + exporter \u62a5\u8b66\u635f\u574f\u65e5\u5fd7<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u516d\u3001\u53c2\u8003\u8d44\u6599<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.percona.com\/blog\/innodb-corruption-recovery\/\">Percona \u5b98\u65b9\u6307\u5357 &#8211; InnoDB \u5d29\u6e83\u6062\u590d<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/forcing-innodb-recovery.html\">MySQL \u5b98\u65b9\u6587\u6863\uff1ainnodb_force_recovery<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/exec\/\">Docker exec \u5b98\u65b9\u6587\u6863<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e03\u3001\u6ce8\u610f\u4e8b\u9879<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9879\u76ee<\/th><th>\u5efa\u8bae<\/th><\/tr><\/thead><tbody><tr><td><code>RECOVERY_LEVEL \u2265 4<\/code><\/td><td><strong>\u4e25\u7981\u5199\u64cd\u4f5c<\/strong>\uff0c\u5bfc\u51fa\u540e\u8981\u91cd\u5efa\u6570\u636e<\/td><\/tr><tr><td>\u5907\u4efd\u5bfc\u51fa\u7684 <code>.sql<\/code> \u6587\u4ef6<\/td><td>\u53ef\u7528 <code>diff<\/code> \u9a8c\u8bc1\u5b8c\u6574\u6027<\/td><\/tr><tr><td>\u4fee\u6539\u914d\u7f6e\u540e\u6062\u590d\u6b63\u5e38\u6a21\u5f0f<\/td><td>\u91cd\u65b0\u542f\u52a8\u5bb9\u5668 + \u5220\u9664\u4e34\u65f6\u53c2\u6570<\/td><\/tr><tr><td>\u4e0d\u63a8\u8350\u957f\u65f6\u95f4\u8fd0\u884c\u6062\u590d\u6a21\u5f0f\u5bb9\u5668<\/td><td>\u4f1a\u5f71\u54cd buffer pool\/\u65e5\u5fd7\u884c\u4e3a<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u66f4\u591a\u8be6\u7ec6\u5185\u5bb9\u8bf7\u5173\u6ce8\u5176\u4ed6\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u9762\u4e3a\u4f60\u63d0\u4f9b\u4e00\u5957\u9002\u914d Docker \u5bb9\u5668\u7684 InnoDB \u5d29\u6e83\u6062\u590d\uff08innodb_force_recovery [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3823,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-3822","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-34"],"_links":{"self":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/3822","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/comments?post=3822"}],"version-history":[{"count":1,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/3822\/revisions"}],"predecessor-version":[{"id":3824,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/3822\/revisions\/3824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/media\/3823"}],"wp:attachment":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/media?parent=3822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/categories?post=3822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/tags?post=3822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}