{"id":2966,"date":"2024-04-14T23:07:30","date_gmt":"2024-04-14T15:07:30","guid":{"rendered":"https:\/\/199604.com\/?p=2966"},"modified":"2026-03-13T15:39:27","modified_gmt":"2026-03-13T07:39:27","slug":"pxc%e5%9f%ba%e4%ba%8edocker%e6%90%ad%e5%bb%bamysql%e9%9b%86%e7%be%a4","status":"publish","type":"post","link":"https:\/\/199604.com\/2966","title":{"rendered":"PXC\u57fa\u4e8edocker\u642d\u5efamysql\u96c6\u7fa4"},"content":{"rendered":"<h1>PXC\u57fa\u4e8edocker\u642d\u5efamysql\u96c6\u7fa4<\/h1>\n<h2>\u8bf4\u660e<\/h2>\n<p>Percona XtraDB Cluster(\u7b80\u79f0PXC)\uff0c\u662f\u7531percona\u516c\u53f8\u63a8\u51fa\u7684mysql\u96c6\u7fa4\u89e3\u51b3\u65b9\u6848\u3002\u7279\u70b9\u662f\u6bcf\u4e2a\u8282\u70b9\u90fd\u80fd\u8fdb\u884c\u8bfb\u5199\uff0c\u4e14\u90fd\u4fdd\u5b58\u5168\u91cf\u7684\u6570\u636e\u3002\u4e5f\u5c31\u662f\u8bf4\u5728\u4efb\u4f55\u4e00\u4e2a\u8282\u70b9\u8fdb\u884c\u5199\u5165\u64cd\u4f5c\uff0c\u90fd\u4f1a\u540c\u6b65\u7ed9\u5176\u5b83\u6240\u6709\u8282\u70b9\u5199\u5165\u5230\u81ea\u5df1\u7684\u78c1\u76d8\u3002<\/p>\n<h2>\u73af\u5883<\/h2>\n<p><strong>\u4e09\u53f0\u673a\u5668<\/strong>\uff0c\u8bbe\u7f6e<code>\/etc\/hosts<\/code><\/p>\n<pre><code class=\"language-shell \">10.196.69.88 node88\n10.196.69.90 node90\n10.196.69.92 node92\n<\/code><\/pre>\n<h3>\u5b89\u88c5docker\u548c\u5b89\u88c5docker-compose<\/h3>\n<p>\u7701\u7565\uff0c\u5177\u4f53\u53c2\u8003\u4e00\u952e\u90e8\u7f72\u811a\u672c\u3002<\/p>\n<pre><code class=\"language-shell \">Docker version 20.10.17\ndocker-compose version 1.29.2\n<\/code><\/pre>\n<h2>PXC\u96c6\u7fa4\u5b89\u88c5<\/h2>\n<h3>1.\u955c\u50cf\u62c9\u53d6<\/h3>\n<p>Docker\u7684\u955c\u50cf\u4ed3\u5e93\u4e2d\u5305\u542b\u4e86PXC\u6570\u636e\u5e93\u7684\u955c\u50cf\uff0c\u5730\u5740\uff1a<br \/>\n<code>https:\/\/hub.docker.com\/r\/percona\/percona-xtradb-cluster<\/code><\/p>\n<p>\u56e0\u751f\u4ea7\u4e3a\u5185\u7f51\uff0c\u540e\u7eed\u6839\u636e\u5185\u7f51\u955c\u50cf\u4ed3\u5e93\u62c9\u53d6\u5bf9\u5e94\u7248\u672c\uff0c\u5f53\u524d\u4f7f\u7528\u7248\u672c\u4e3a\uff1a<code>percona\/percona-xtradb-cluster:8.0.36<\/code><\/p>\n<h3>2.\u521b\u5efa\u8bc1\u4e66<\/h3>\n<p>percona\u96c6\u7fa4\u8981\u6c42\u5fc5\u987b\u5b89\u88c5\u8bc1\u4e66\uff0c\u96c6\u7fa4\u5b9e\u73b0\u52a0\u5bc6\u901a\u8baf\uff0c\u53c2\u8003\uff1a<code>https:\/\/docs.percona.com\/percona-xtradb-cluster\/8.0\/docker.html<\/code><\/p>\n<pre><code class=\"language-shell \">mkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/config\nmkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/cert\nmkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/logs\nmkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/data\nmkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/socket\n\n\n#\u521b\u5efacustom.cnf\u6587\u4ef6\u5230config\ncd \/AppHome\/docker\/mysql-cluster\/config\n\nvim custom.cnf\n# \u5185\u5bb9\u5982\u4e0b:\n[mysqld]\nssl-ca = \/cert\/ca.pem\nssl-cert = \/cert\/server-cert.pem\nssl-key = \/cert\/server-key.pem\n\n[client]\nssl-ca = \/cert\/ca.pem\nssl-cert = \/cert\/client-cert.pem\nssl-key = \/cert\/client-key.pem\n\n[sst]\nencrypt = 4\nssl-ca = \/cert\/ca.pem\nssl-cert = \/cert\/server-cert.pem\nssl-key = \/cert\/server-key.pem\n<\/code><\/pre>\n<h4>\u751f\u6210\u8bc1\u4e66<\/h4>\n<pre><code class=\"language-shell \"># \u5176\u4e2d\u4e00\u53f0\u673a\u5668\u6267\u884c\ndocker run --name pxc-cert --rm -v \/AppHome\/docker\/mysql-cluster\/cert:\/cert \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtradb-cluster:8.0.36 mysql_ssl_rsa_setup -d \/cert\n\n# \u8bbe\u7f6e\u8bc1\u4e66\u5bf9\u5e94\u6743\u9650\nchown -R 1001:1001 \/AppHome\/docker\/mysql-cluster\/cert\n\n# \u62f7\u8d1d\u5230\u5176\u4ed6\u8282\u70b9\u673a\u5668\nscp \/AppHome\/docker\/mysql-cluster\/cert\/* node90:\/AppHome\/docker\/mysql-cluster\/cert\/\nscp \/AppHome\/docker\/mysql-cluster\/cert\/* node92:\/AppHome\/docker\/mysql-cluster\/cert\/\n<\/code><\/pre>\n<blockquote><p>\n  \u8bc1\u4e66\u5fc5\u987b\u6240\u6709\u8282\u70b9\u90fd\u4e00\u81f4\uff01\u5728\u4e00\u53f0\u673a\u5668\u751f\u6210\u540e\u62f7\u8d1d\u5230\u5176\u4ed6\u673a\u5668\u3002\n<\/p><\/blockquote>\n<h3>3.\u642d\u5efapxc\u96c6\u7fa4<\/h3>\n<h4>\u8282\u70b91\u542f\u52a8pxc<\/h4>\n<pre><code class=\"language-shell \">docker run -d \\\n--privileged \\\n--restart always \\\n--name=mysql-node88 \\\n--net=host \\\n-e TZ=Asia\/Shanghai \\\n-e CLUSTER_NAME=PXC \\\n-e MYSQL_ROOT_PASSWORD=pwd \\\n-e XTRABACKUP_PASSWORD=pwd \\\n-e EXTRABACKUP_PASSWROD=pwd \\\n-v \/AppHome\/docker\/mysql-cluster\/data:\/var\/lib\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/logs:\/var\/log\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/cert:\/cert \\\n-v \/AppHome\/docker\/mysql-cluster\/config:\/etc\/percona-xtradb-cluster.conf.d \\\n-v \/AppHome\/docker\/mysql-cluster\/socket:\/tmp \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtradb-cluster:8.0.36\n<\/code><\/pre>\n<h4>\u8282\u70b92 \u52a0\u5165pxc\u96c6\u7fa4<\/h4>\n<pre><code class=\"language-shell \">docker run -d \\\n--privileged \\\n--restart always \\\n--name=mysql-node90 \\\n--net=host \\\n-e TZ=Asia\/Shanghai \\\n-e CLUSTER_NAME=PXC \\\n-e CLUSTER_JOIN=10.196.69.88 \\\n-e MYSQL_ROOT_PASSWORD=pwd \\\n-e XTRABACKUP_PASSWORD=pwd \\\n-e EXTRABACKUP_PASSWROD=pwd \\\n-v \/AppHome\/docker\/mysql-cluster\/data:\/var\/lib\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/logs:\/var\/log\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/cert:\/cert \\\n-v \/AppHome\/docker\/mysql-cluster\/config:\/etc\/percona-xtradb-cluster.conf.d \\\n-v \/AppHome\/docker\/mysql-cluster\/socket:\/tmp \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtradb-cluster:8.0.36\n<\/code><\/pre>\n<blockquote><p>\n  **\u6ce8\u610f **<\/p>\n<p>  <strong><code>--name=mysql-node90<\/code><\/strong><\/p>\n<p>  <strong><code>-e CLUSTER_JOIN=10.196.69.88<\/code><\/strong>\n<\/p><\/blockquote>\n<h4>\u8282\u70b93 \u52a0\u5165pxc\u96c6\u7fa4<\/h4>\n<pre><code class=\"language-shell \">docker run -d \\\n--privileged \\\n--restart always \\\n--name=mysql-node92 \\\n--net=host \\\n-e TZ=Asia\/Shanghai \\\n-e CLUSTER_NAME=PXC \\\n-e CLUSTER_JOIN=10.196.69.88 \\\n-e MYSQL_ROOT_PASSWORD=pwd \\\n-e XTRABACKUP_PASSWORD=pwd \\\n-e EXTRABACKUP_PASSWROD=pwd \\\n-v \/AppHome\/docker\/mysql-cluster\/data:\/var\/lib\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/logs:\/var\/log\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/cert:\/cert \\\n-v \/AppHome\/docker\/mysql-cluster\/config:\/etc\/percona-xtradb-cluster.conf.d \\\n-v \/AppHome\/docker\/mysql-cluster\/socket:\/tmp \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtradb-cluster:8.0.36\n<\/code><\/pre>\n<blockquote><p>\n  **\u6ce8\u610f **<\/p>\n<p>  <strong><code>--name=mysql-node92<\/code><\/strong><\/p>\n<p>  <strong><code>-e CLUSTER_JOIN=10.196.69.88<\/code><\/strong>\n<\/p><\/blockquote>\n<h3>4.\u642d\u5efa\u9a8c\u8bc1<\/h3>\n<h4>\u65e5\u5fd7\u67e5\u770b<\/h4>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/qn.199604.com\/typoraImg\/image-20240412163036443.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/qn.199604.com\/typoraImg\/image-20240412163036443.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20240412163036443\" \/><\/div><\/p>\n<h4>sql\u67e5\u770b\u5f53\u524d\u52a0\u5165\u8282\u70b9<\/h4>\n<pre><code class=\"language-sql \">show status like 'wsrep%';\nshow status like '%wsrep_cluster%';\nselect * from performance_schema.pxc_cluster_view;\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/qn.199604.com\/typoraImg\/image-20240412163206475.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/qn.199604.com\/typoraImg\/image-20240412163206475.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20240412163206475\" \/><\/div><\/p>\n<h3>5.\u9a8c\u8bc1\u8fc7\u7a0b\u5b58\u5728\u95ee\u9898<\/h3>\n<h4>PXC\u96c6\u7fa4\u6ce8\u610f\u4e8b\u9879<\/h4>\n<h5><strong>1.\u4ece\u8282\u70b9\u542f\u52a8\u4e4b\u540e\u95ea\u9000<\/strong><\/h5>\n<p>\u7b2c\u4e00\u79cd\u60c5\u51b5\u662f\u7531\u4e8e\u4e3b\u8282\u70b9\u8fd8\u6ca1\u6709\u542f\u52a8\uff0c\u5c31\u542f\u52a8\u4e86\u4ece\u8282\u70b9\uff0c\u90a3\u8fd9\u4e2a\u65f6\u5019\u4ece\u8282\u70b9\u80af\u5b9a\u662f\u95ea\u9000\u7684\u3002<br \/>\n\u6240\u4ee5\u9700\u8981\u5148\u542f\u52a8\u4e3b\u8282\u70b9\uff0c\u518d\u542f\u52a8\u4ece\u8282\u70b9\u3002<\/p>\n<h5><strong>2.\u4ece\u8282\u70b9\u542f\u52a8\u4e4b\u540e\u95ea\u9000<\/strong><\/h5>\n<p>\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u662f\u7531\u4e8ePXC\u5728\u9000\u51fa\u7684\u65f6\u5019\u4f1a\u7ed9\u96c6\u7fa4\u4e2d\u6700\u540e\u9000\u51fa\u7684\u90a3\u53f0\u6253\u4e0a\u6807\u8bb0\uff0c\u5f53\u96c6\u7fa4\u91cd\u65b0\u542f\u52a8\u7684\u65f6\u5019\u9700\u8981\u5148\u542f\u52a8\u6700\u540e\u5173\u95ed\u7684\u90a3\u53f0\u8282\u70b9\u673a\u5668\u3002(\u6700\u540e\u5173\u95ed\u7684\u53d8\u4e3a\u4e3b\u8282\u70b9)<\/p>\n<p>\u53ef\u67e5\u770b<code>data\/grastate.data<\/code>\u6587\u4ef6\u5185\u5bb9\uff0c<code>safe_to_bootstrap: 1<\/code>\u4e3a\u5fc5\u987b\u5148\u542f\u52a8\u7684\u8282\u70b9\uff0c\u540e\u7eed\u8282\u70b9\u9700\u8981\u52a0\u5165\u5230\u6b64ip\u3002<\/p>\n<h5>3.<strong>\u4e3b\u8282\u70b9\u542f\u52a8\u4e4b\u540e\u95ea\u9000<\/strong><\/h5>\n<p>\u5f53\u4e3b\u8282\u70b9\u7a81\u7136\u5b95\u673a\uff0c\u4ece\u8282\u70b9\u90fd\u6b63\u5e38\u8fd0\u884c\uff0c\u8fd9\u65f6\u5019\u4e3b\u8282\u70b9\u4e0d\u80fd\u6309\u7167\u4e3b\u8282\u70b9\u542f\u52a8\u3002<\/p>\n<p>\u8fd9\u65f6\u5019\u9700\u8981\u5220\u9664\u4e3b\u8282\u70b9\u7684\u5bb9\u5668\uff0c\u68c0\u67e5\u6570\u636e\u5377\u4e0a\u7684<code>safe_to_bootstrap<\/code>\u662f\u5426\u4e3a0\uff0c\u5982\u679c\u4e0d\u662f\u5219\u6539\u4e3a0\u3002\u7136\u540e\u4ee5\u4ece\u8282\u70b9\u7684\u65b9\u5f0f\u521b\u5efa\u5bb9\u5668\uff0c\u52a0\u5165\u96c6\u7fa4\u3002\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55PXC\u8282\u70b9\uff0c\u7136\u540e\u4ece\u8282\u70b9\u52a0\u5165PXC\u96c6\u7fa4\u5373\u53ef\u3002<\/p>\n<h6>\u5982\u6a21\u62dfnode88\u4e3b\u8282\u70b9\u6545\u969c<\/h6>\n<pre><code class=\"language-shell \">docker stop mysql-node88\n# \u6a21\u62df\u91cd\u65b0\u91cd\u542f\ndocker start mysql-node88\n##########\u542f\u52a8\u51fa\u5dee\uff0c\u9519\u8bef\u65e5\u5fd7#########################################################\n2024-04-12T00:54:37.645683Z 0 [Note] [MY-000000] [Galera] Service thread queue flushed.\n2024-04-12T00:54:37.645766Z 0 [Note] [MY-000000] [Galera] ####### Assign initial position for certification: b8cea80c-f862-11ee-a576-570e9e18be0c:39, protocol version: -1\n2024-04-12T00:54:37.645872Z 0 [Note] [MY-000000] [WSREP] Starting replication\n2024-04-12T00:54:37.645905Z 0 [Note] [MY-000000] [Galera] Connecting with bootstrap option: 1\n2024-04-12T00:54:37.645915Z 0 [Note] [MY-000000] [Galera] Setting GCS initial position to b8cea80c-f862-11ee-a576-570e9e18be0c:39\n2024-04-12T00:54:37.645924Z 0 [ERROR] [MY-000000] [Galera] It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .\n2024-04-12T00:54:37.645934Z 0 [ERROR] [MY-000000] [WSREP] Provider\/Node (gcomm:\/\/) failed to establish connection with cluster (reason: 7)\n2024-04-12T00:54:37.645943Z 0 [ERROR] [MY-010119] [Server] Aborting\n2024-04-12T00:54:37.646355Z 0 [System] [MY-010910] [Server] \/usr\/sbin\/mysqld: Shutdown complete (mysqld 8.0.36-28.1)  Percona XtraDB Cluster (GPL), Release rel28, Revision bfb687f, WSREP version 26.1.4.3.\n2024-04-12T00:54:37.647783Z 0 [ERROR] [MY-010065] [Server] Failed to shutdown components infrastructure.\n2024-04-12T00:54:37.648029Z 0 [Note] [MY-000000] [Galera] dtor state: CLOSED\n2024-04-12T00:54:37.648056Z 0 [Note] [MY-000000] [Galera] MemPool(TrxHandleSlave): hit ratio: 0, misses: 0, in use: 0, in pool: 0\n2024-04-12T00:54:37.649795Z 0 [Note] [MY-000000] [Galera] apply mon: entered 0\n2024-04-12T00:54:37.652215Z 0 [Note] [MY-000000] [Galera] apply mon: entered 0\n2024-04-12T00:54:37.654757Z 0 [Note] [MY-000000] [Galera] apply mon: entered 0\n2024-04-12T00:54:37.654783Z 0 [Note] [MY-000000] [Galera] cert index usage at exit 0\n2024-04-12T00:54:37.654790Z 0 [Note] [MY-000000] [Galera] cert trx map usage at exit 0\n2024-04-12T00:54:37.654794Z 0 [Note] [MY-000000] [Galera] deps set usage at exit 0\n2024-04-12T00:54:37.654805Z 0 [Note] [MY-000000] [Galera] avg deps dist 0\n2024-04-12T00:54:37.654813Z 0 [Note] [MY-000000] [Galera] avg cert interval 0\n\n# \u5220\u9664\u539f\u6765\u5bb9\u5668\ndocker rm -f mysql-node88\n\n# \u67e5\u627e\u5b58\u6d3b\u8282\u70b9\uff0c\u5982mysql-node92\u662f\u5b58\u6d3b\u8282\u70b9\uff0c\u52a0\u5165\u5373\u53ef\ndocker run -d \\\n--privileged \\\n--restart always \\\n--name=mysql-node88 \\\n--net=host \\\n-e TZ=Asia\/Shanghai \\\n-e CLUSTER_NAME=PXC \\\n-e CLUSTER_JOIN=10.196.69.92 \\\n-e MYSQL_ROOT_PASSWORD=pwd \\\n-e XTRABACKUP_PASSWORD=pwd \\\n-e EXTRABACKUP_PASSWROD=pwd \\\n-v \/AppHome\/docker\/mysql-cluster\/data:\/var\/lib\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/logs:\/var\/log\/mysql \\\n-v \/AppHome\/docker\/mysql-cluster\/cert:\/cert \\\n-v \/AppHome\/docker\/mysql-cluster\/config:\/etc\/percona-xtradb-cluster.conf.d \\\n-v \/AppHome\/docker\/mysql-cluster\/socket:\/tmp \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtradb-cluster:8.0.36\n\n#\u57fa\u672c\u4e0a\u8282\u70b9\u6062\u590d\u540c\u6b65\u3002\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/qn.199604.com\/typoraImg\/image-20240412164106580.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/qn.199604.com\/typoraImg\/image-20240412164106580.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20240412164106580\" \/><\/div><\/p>\n<h2>\u6570\u636e\u5e93\u8d1f\u8f7d\u5747\u8861<\/h2>\n<p>\u53c2\u8003\u4f7f\u7528<code>Haproxy<\/code>\u505a\u8d1f\u8f7d\u5747\u8861\u5b98\u7f51\uff1a<code>https:\/\/docs.percona.com\/percona-xtradb-cluster\/8.0\/haproxy.html<\/code><\/p>\n<blockquote><p>\n  \u6682\u672a\u90e8\u7f72\u3002\n<\/p><\/blockquote>\n<h2>\u6570\u636e\u5e93\u5907\u4efd<\/h2>\n<h3>\u5168\u91cf\u5907\u4efd<\/h3>\n<pre><code class=\"language-shell \">cd \/AppHome\/docker\/mysql-cluster\/\nmkdir -m 777 -p \/AppHome\/docker\/mysql-cluster\/full_backup\n\ncd \/AppHome\/docker\/mysql-cluster\/full_backup\nmkdir -m 777 $(date +\"%Y%m%d\")\ncd $(date +\"%Y%m%d\")\n\ndocker run --rm -v \/AppHome\/docker\/mysql-cluster\/full_backup\/$(date +\"%Y%m%d\"):\/backup \\\n--volumes-from mysql-node92 \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtrabackup:8.0 \\\nxtrabackup --backup --datadir=\/var\/lib\/mysql --target-dir=\/backup \\\n--user=root --password=pwd -S \/tmp\/mysql.sock\n\n# \u67e5\u770b\u5907\u4efd\u4fe1\u606f \u6b64\u65f6\u53ef\u67e5\u770b \/data\/db_backup\/inc_backup\/20230430\/full \u76ee\u5f55\u4e0b\u7684 xtrabackup_checkpoints \u6216\u8005 xtrabackup_info \u6587\u4ef6\u4e2d\u7684\u4fe1\u606f\ncd \/AppHome\/docker\/mysql-cluster\/full_backup\/$(date +\"%Y%m%d\")\ncat xtrabackup_checkpoints\nbackup_type = full-backuped\nfrom_lsn = 0\nto_lsn = 34134266\nlast_lsn = 34134266\nflushed_lsn = 34134256\nredo_memory = 0\nredo_frames = 0\n<\/code><\/pre>\n<h3>\u5168\u91cf\u8fd8\u539f<\/h3>\n<pre><code class=\"language-shell \"># 1. \u9884\u5904\u7406\u5f85\u8fd8\u539f\u6570\u636e\ndocker run --rm -v \/AppHome\/docker\/mysql-cluster\/full_backup\/20240415:\/backup \\\nreg-hub.gzeport.com\/tools\/percona\/percona-xtrabackup:8.0 \\\nxtrabackup --prepare --apply-log-only --target-dir=\/backup\n\n# 2. \u5220\u9664\u5bb9\u5668\uff0c\u6e05\u7a7adata\u4e0b\u7684\u6240\u6709\u6587\u4ef6\uff0c\u91cd\u65b0\u521b\u5efamysql\u5bb9\u5668\ndocker stop mysql-node92\ndocker rm mysql-node92\n\ncd \/AppHome\/docker\/mysql-cluster\/data\nrm -rf \/AppHome\/docker\/mysql-cluster\/data\/*\n\n# \u91cd\u65b0\u521b\u5efa\u5bb9\u5668\ndocker........\n\n# 3.\u590d\u5236\u5f85\u8fd8\u539f\u6570\u636e\u5230PXC\u8282\u70b9\u6570\u636e\u76ee\u5f55\ndocker cp \/AppHome\/docker\/mysql-cluster\/full_backup\/20240415. mysql-node92:\/var\/lib\/mysql\n\n# 4.\u7ed9\u5bb9\u5668mysql\u7528\u6237\u6388\u6743\uff08\u4e0d\u6388\u6743\u91cd\u542f\u5bb9\u5668\u4f1a\u56e0\u4e3a\u6ca1\u6709\u6743\u9650\u5bb9\u5668\u542f\u52a8\u5931\u8d25\uff09\ndocker exec -it -u 0 mysql-node92 chown -R mysql:mysql \/var\/lib\/mysql\n\n# \u91cd\u542fPXC\u8282\u70b9\ndocker restart mysql-node92\n\n# \u91cd\u65b0\u8fdb\u5165\u5bb9\u5668\uff0c\u67e5\u770b\u6570\u636e\uff0c\u53d1\u73b0\u6570\u636e\u5df2\u7ecf\u6062\u590d\u5230\u4e4b\u524d\u7684\u4e86\n<\/code><\/pre>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/qn.199604.com\/typoraImg\/image-20240415114058213.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/qn.199604.com\/typoraImg\/image-20240415114058213.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20240415114058213\" \/><\/div><\/p>\n<h2>\u53c2\u8003<\/h2>\n<p>1.<code>https:\/\/docs.percona.com\/percona-xtradb-cluster\/8.0<\/code><\/p>\n<p>2.<code>https:\/\/blog.csdn.net\/dh_2017\/article\/details\/108045552<\/code><\/p>\n<p>3.<code>https:\/\/blog.51cto.com\/u_13482808\/7543833<\/code><\/p>\n<p>4.<code>https:\/\/blog.csdn.net\/W1324926684\/article\/details\/130512670<\/code><\/p>\n<h2>\u8865\u5145-shell\u5907\u4efd\u5168\u91cf\u811a\u672c<\/h2>\n<pre><code class=\"language-shell \">#!\/bin\/bash\n#\n# desc:\u5229\u7528percona-xtrabackup\u5168\u91cf\u5907\u4efdpxc\u6570\u636e\u5e93\u96c6\u7fa4\n\nBACKUP_DIR=\/AppHome\/docker\/mysql-cluster\/full_backup\nCURRENT_DAY=$(date '+%Y%m%d')\nCURRENT_TIMES=$(date '+%Y%m%d-%H%M')\nSAVE_DAY=5\nLOG_DIR=${BACKUP_DIR}\/logs\nLOG_FILE=${LOG_DIR}\/${CURRENT_TIMES}.log\n\ncheckOK(){\n    if [ $? -ne 0 ];then\n    echo \"\u547d\u4ee4\u6267\u884c\u51fa\u73b0\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5...\"\n    exit 10\n    fi\n}\n\nbackup(){\n  echo -e \"current time is : $(date '+%Y-%m-%d %H:%M:%S')\"\n  echo -e \"[$(date '+%Y-%m-%d %H:%M:%S')] -- Starting backup MySQL databases ...\"\n  echo -e \"[$(date '+%Y-%m-%d %H:%M:%S')] -- Backup file to ${BACKUP_DIR}\/${CURRENT_DAY}\/${CURRENT_TIMES}.zip\"\n  mkdir -m 777 -p ${BACKUP_DIR}\/${CURRENT_DAY}\/\n  docker run --rm -v ${BACKUP_DIR}\/${CURRENT_DAY}:\/backup --volumes-from mysql-node92 reg-hub.gzeport.com\/tools\/percona\/percona-xtrabackup:8.0 xtrabackup --backup --datadir=\/var\/lib\/mysql --target-dir=\/backup --user=root --password=pwd -S \/tmp\/mysql.sock\n  checkOK\n  if [ -d \"${BACKUP_DIR}\/${CURRENT_DAY}\" ]; then\n      echo -e \"[$(date '+%Y-%m-%d %H:%M:%S')] -- Starting zip file ...\"\n      cd ${BACKUP_DIR}\/\n      checkOK\n      zip -r ${CURRENT_TIMES}.zip .\/${CURRENT_DAY}\n      checkOK\n      if [ -f \"${CURRENT_TIMES}.zip\" ]; then\n        echo -e \"[$(date '+%Y-%m-%d %H:%M:%S')] -- rm ${BACKUP_DIR}\/${CURRENT_DAY} file ...\"\n        rm -rf ${BACKUP_DIR}\/${CURRENT_DAY}\n      fi\n  fi\n}\n\ndelfile(){\n  echo -e \"[$(date '+%Y-%m-%d %H:%M:%S')] -- Delete the ${SAVE_DAY} days ago backup file\"\n  find ${BACKUP_DIR}\/ -mtime +${SAVE_DAY} -exec ls {} \\;\n  find ${BACKUP_DIR}\/ -mtime +${SAVE_DAY} -exec rm -rf {} \\;\n}\n\nrun(){\n  echo \"log path : $LOG_FILE\"\n  mkdir -p  ${LOG_DIR}\n  backup |tee -a ${LOG_FILE}\n  echo -e \"\\n\"\n  delfile |tee -a ${LOG_FILE}\n}\n\nrun\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>PXC\u57fa\u4e8edocker\u642d\u5efamysql\u96c6\u7fa4 \u8bf4\u660e Percona XtraDB Cluster(\u7b80\u79f0PXC)\uff0c\u662f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[294],"tags":[22,509],"class_list":["post-2966","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-mysql","tag-pxc"],"_links":{"self":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/2966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/comments?post=2966"}],"version-history":[{"count":4,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/2966\/revisions"}],"predecessor-version":[{"id":3530,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/posts\/2966\/revisions\/3530"}],"wp:attachment":[{"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/media?parent=2966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/categories?post=2966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/199604.com\/wp-json\/wp\/v2\/tags?post=2966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}