{"id":73,"date":"2021-03-13T12:38:27","date_gmt":"2021-03-13T04:38:27","guid":{"rendered":"http:\/\/daishen.ltd\/?p=73"},"modified":"2021-03-13T12:38:27","modified_gmt":"2021-03-13T04:38:27","slug":"%e4%b8%bb%e4%bb%8e%e5%a4%8d%e5%88%b6%e9%ab%98%e7%ba%a7%e8%bf%9b%e9%98%b6","status":"publish","type":"post","link":"https:\/\/www.daishen.ltd\/?p=73","title":{"rendered":"\u4e3b\u4ece\u590d\u5236\u9ad8\u7ea7\u8fdb\u9636"},"content":{"rendered":"<h1>1. \u5ef6\u65f6\u4ece\u5e93<\/h1>\n<h2>1.1\u4ecb\u7ecd<\/h2>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u662f\u6211\u4eec\u8ba4\u4e3a\u914d\u7f6e\u7684\u4e00\u79cd\u7279\u6b8a\u4ece\u5e93.\u4eba\u4e3a\u914d\u7f6e\u4ece\u5e93\u548c\u4e3b\u5e93\u5ef6\u65f6N\u5c0f\u65f6.\n<\/code><\/pre>\n<h2>1.2 \u4e3a\u4ec0\u4e48\u8981\u6709\u5ef6\u65f6\u4ece<\/h2>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u6570\u636e\u5e93\u6545\u969c?\n\u7269\u7406\u635f\u574f\n\u4e3b\u4ece\u590d\u5236\u975e\u5e38\u64c5\u957f\u89e3\u51b3\u7269\u7406\u635f\u574f.\n\u903b\u8f91\u635f\u574f\n\u666e\u901a\u4e3b\u4ece\u590d\u5236\u6ca1\u529e\u6cd5\u89e3\u51b3\u903b\u8f91\u635f\u574f\n<\/code><\/pre>\n<h2>1.3 \u914d\u7f6e\u5ef6\u65f6\u4ece\u5e93<\/h2>\n<pre><code class=\"language-cpp\" lang=\"cpp\">SQL\u7ebf\u7a0b\u5ef6\u65f6:\u6570\u636e\u5df2\u7ecf\u5199\u5165relaylog\u4e2d\u4e86,SQL\u7ebf\u7a0b\"\u6162\u70b9\"\u8fd0\u884c\n\u4e00\u822c\u4f01\u4e1a\u5efa\u8bae3-6\u5c0f\u65f6,\u5177\u4f53\u770b\u516c\u53f8\u8fd0\u7ef4\u4eba\u5458\u5bf9\u4e8e\u6545\u969c\u7684\u53cd\u5e94\u65f6\u95f4\n\nmysql&gt;stop slave;\nmysql&gt;CHANGE MASTER TO MASTER_DELAY = 300;\nmysql&gt;start slave;\nmysql&gt; show slave status \\G\nSQL_Delay: 300\nSQL_Remaining_Delay: NULL\n<\/code><\/pre>\n<h2>1.4 \u5ef6\u65f6\u4ece\u5e93\u5e94\u7528<\/h2>\n<h3>1.4.1 \u6545\u969c\u6062\u590d\u601d\u8def<\/h3>\n<pre><code class=\"language-undefined\" lang=\"undefined\">(1)\u76d1\u63a7\u5230\u6570\u636e\u5e93\u903b\u8f91\u6545\u969c\n\n(2)\u505c\u4ece\u5e93sQL\u7ebf\u7a0b,\u8bb0\u5f55\u5df2\u7ecf\u56de\u653e\u7684\u4f4d\u7f6e\u70b9(\u622a\u53d6\u65e5\u5fd7\u8d77\u70b9)\nstop slave sql_thread ;\n\u67e5\u770b\nRelay_Log_File: db01-relay-bin.000002\nRelay_Log_Pos: 473\n\n(3)\u622a\u53d6relaylog\n\u8d77\u70b9:\nshow slave status \\G\nRelay_Log_File,Relay_Log_Pos\n\u7ec8\u70b9:drop\u4e4b.\u524d\u7684\u4f4d\u7f6e\u70b9\nshow relaylog events in ''\n\u8fdb\u884c\u622a\u53d6\n\n(4)\u6a21\u62dfsQL\u7ebf\u7a0b\u56de\u8bbf\u65e5\u5fd7\n\u4ece\u5e93 source\n\n(5) \u6062\u590d\u4e1a\u52a1\n\u60c5\u51b5\u4e00:\u5c31\u4e00\u4e2a\u5e93\u7684\u8bdd\n\u4ece\u5e93\u66ff\u4ee3\u4e3b\u5e93\u5de5\u4f5c\n\u60c5\u51b5\u4e8c:\n\u4ece\u5e93\u5bfc\u51fa\u6545\u969c\u5e93,\u8fd8\u539f\u5230\u4e3b\u5e93\u4e2d.\n\n<\/code><\/pre>\n<h3>1.4.2 \u6545\u969c\u6a21\u62df\u53ca\u6062\u590d<\/h3>\n<pre><code class=\"language-mysql\" lang=\"mysql\">1.\u4e3b\u5e93\u6570\u636e\u64cd\u4f5c\nmysql&gt;create database delay charset utf8mb4;\nmysql&gt;use delay\nmysql&gt;create table t1 (id int);\nmysql&gt;insert into t1 values(1);\nmysql&gt;drop database relay;\n<\/code><\/pre>\n<pre><code class=\"language-undefined\" lang=\"undefined\">2. \u505c\u6b62\u4ece\u5e93SQL\u7ebf\u7a0b\nstop slave sql_thread;\n<\/code><\/pre>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">3. \u627erelaylog\u7684\u622a\u53d6\u8d77\u70b9\u548c\u7ec8\u70b9\n\u8d77\u70b9:\nRelay_Log_File: db01-relay-bin.000002\nRelay_Log_Pos: 473\n\n\u7ec8\u70b9:\nshow relaylog events in 'db01-relay-bin.000002'\n\ndb01-relay-bin.000002 | 1476 | Query    |     7 |    2655 | drop database delay \n\ncd \/data\/3308\/data\n\nmysqlbinlog --start-position=473 --stop-position=1476  \/data\/3308\/data\/db01-relay-bin.000002&gt;\/tmp\/delay.sql\n<\/code><\/pre>\n<ol start=\"\">\n<li>\u4ece\u5e93\u6062\u590drelaylog<\/li>\n<\/ol>\n<pre><code class=\"language-shell\" lang=\"shell\">set sql_log_bin=0;\nsource \/tmp\/relay.sql\nset sql_log_bin=1;\n<\/code><\/pre>\n<p>5.\u4ece\u5e93\u8eab\u4efd\u89e3\u9664<\/p>\n<pre><code class=\"language-css\" lang=\"css\">mysql&gt;stop slave;\nmysql&gt;reset slave all\n<\/code><\/pre>\n<h1>2. \u534a\u540c\u6b65 ***<\/h1>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u89e3\u51b3\u4e3b\u4ece\u6570\u636e\u4e00\u81f4\u6027\u95ee\u9898\n\nACK , \u4ece\u5e93relay\u843d\u5730, I0\u7ebf\u7a0b\u4f1a\u8fd4\u56de\u4e00\u4e2aACK,\u4e3b\u5e93\u7684ACK_reciver.\u4e3b\u5e93\u4e8b\u52a1\u624d\u80fd\u63d0\u4ea4.\u5982\u679c\u4e00\u76f4ACK\u6ca1\u6536\u5230,\u8d85\u8fc710\u79d2\u949f\u4f1a\u5207\u6362\u4e3a\u5f02\u6b65\u590d\u5236.\n\n<\/code><\/pre>\n<h2>2.1 \u534a\u540c\u6b65\u590d\u5236\u5de5\u4f5c\u539f\u7406\u7684\u53d8\u5316<\/h2>\n<pre><code class=\"language-dart\" lang=\"dart\">1. \u4e3b\u5e93\u6267\u884c\u65b0\u7684\u4e8b\u52a1,commit\u65f6,\u66f4\u65b0 show master  status\\G ,\u89e6\u53d1\u4e00\u4e2a\u4fe1\u53f7\u7ed9\n2. binlog dump \u63a5\u6536\u5230\u4e3b\u5e93\u7684 show master status\\G\u4fe1\u606f,\u901a\u77e5\u4ece\u5e93\u65e5\u5fd7\u66f4\u65b0\u4e86\n3. \u4ece\u5e93IO\u7ebf\u7a0b\u8bf7\u6c42\u65b0\u7684\u4e8c\u8fdb\u5236\u65e5\u5fd7\u4e8b\u4ef6\n4. \u4e3b\u5e93\u4f1a\u901a\u8fc7dump\u7ebf\u7a0b\u4f20\u9001\u65b0\u7684\u65e5\u5fd7\u4e8b\u4ef6,\u7ed9\u4ece\u5e93IO\u7ebf\u7a0b\n5. \u4ece\u5e93IO\u7ebf\u7a0b\u63a5\u6536\u5230binlog\u65e5\u5fd7,\u5f53\u65e5\u5fd7\u5199\u5165\u5230\u78c1\u76d8\u4e0a\u7684relaylog\u6587\u4ef6\u65f6,\u7ed9\u4e3b\u5e93ACK_receiver\u7ebf\u7a0b\n6. ACK_receiver\u7ebf\u7a0b\u89e6\u53d1\u4e00\u4e2a\u4e8b\u4ef6,\u544a\u8bc9\u4e3b\u5e93commit\u53ef\u4ee5\u6210\u529f\u4e86\n7. \u5982\u679cACK\u8fbe\u5230\u4e86\u6211\u4eec\u9884\u8bbe\u503c\u7684\u8d85\u65f6\u65f6\u95f4,\u534a\u540c\u6b65\u590d\u5236\u4f1a\u5207\u6362\u4e3a\u539f\u59cb\u7684\u5f02\u6b65\u590d\u5236.\n<\/code><\/pre>\n<h2>2.2 \u914d\u7f6e\u534a\u540c\u6b65\u590d\u5236<\/h2>\n<pre><code class=\"language-dart\" lang=\"dart\">\u52a0\u8f7d\u63d2\u4ef6\n\u4e3b:\nINSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';\n\u4ece:\nINSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';\n\u67e5\u770b\u662f\u5426\u52a0\u8f7d\u6210\u529f:\nshow plugins;\n\u542f\u52a8:\n\u4e3b:\nSET GLOBAL rpl_semi_sync_master_enabled = 1;\n\u4ece:\nSET GLOBAL rpl_semi_sync_slave_enabled = 1;\n\u91cd\u542f\u4ece\u5e93\u4e0a\u7684IO\u7ebf\u7a0b\nSTOP SLAVE IO_THREAD;\nSTART SLAVE IO_THREAD;\n\u67e5\u770b\u662f\u5426\u5728\u8fd0\u884c\n\u4e3b:\nshow status like 'Rpl_semi_sync_master_status';\n\u4ece:\nshow status like 'Rpl_semi_sync_slave_status';\n<\/code><\/pre>\n<h1>3 . \u8fc7\u6ee4\u590d\u5236<\/h1>\n<h2>3.1 \u8bf4\u660e<\/h2>\n<p>\u4e3b\u5e93\uff1a<\/p>\n<pre><code class=\"language-dart\" lang=\"dart\">show master status;\n\nbinlog_do_db\t\t\u767d\u540d\u5355\nbinlog_ignore_db\t\u9ed1\u540d\u5355\n<\/code><\/pre>\n<p>\u4ece\u5e93\uff1a<\/p>\n<pre><code class=\"language-dart\" lang=\"dart\">show slave status\\G\n    \nReplicate_Do_DB: \t\t\u5e93\u7ea7\u522b\u767d\u540d\u5355\nReplicate_Ignore_DB: \t\u5e93\u7ea7\u522b\u9ed1\u540d\u5355\n\nReplicate_Do_Table: \t\u8868\u7ea7\u522b\u767d\u540d\u5355\nReplicate_Ignore_Table: \u8868\u7ea7\u522b\u9ed1\u540d\u5355\n\nReplicate_Wild_Do_Table: \t \u8868\u4e0b\u7684\u6a21\u7cca\u767d\u540d\u5355\nReplicate_Wild_Ignore_Table: \u8868\u4e0b\u7684\u6a21\u7cca\u9ed1\u540d\u5355\n    \n<\/code><\/pre>\n<p>3.2 \u5b9e\u73b0\u8fc7\u7a0b<\/p>\n<pre><code class=\"language-csharp\" lang=\"csharp\">\u4ece\u5e93\n[root@db01 ~]# vim \/data\/3308\/my.cnf \nreplicate_do_db=ppt\nreplicate_do_db=word\n[root@db01 ~]# systemctl restart mysqld3308\n\n\u4e3b\u5e93\uff1a\nMaster [(none)]&gt;create database word;\nQuery OK, 1 row affected (0.00 sec)\nMaster [(none)]&gt;create database ppt;\nQuery OK, 1 row affected (0.00 sec)\nMaster [(none)]&gt;create database excel;\nQuery OK, 1 row affected (0.01 sec)\n<\/code><\/pre>\n<h1>4. GTID\u590d\u5236<\/h1>\n<h2>4.1 GTID\u5f15\u5165<\/h2>\n<h2>4.2 GTID\u4ecb\u7ecd<\/h2>\n<pre><code class=\"language-objectivec\" lang=\"objectivec\">GTID(Global Transaction ID)\u662f\u5bf9\u4e8e\u4e00\u4e2a\u5df2\u63d0\u4ea4\u4e8b\u52a1\u7684\u552f\u4e00\u7f16\u53f7\uff0c\u5e76\u4e14\u662f\u4e00\u4e2a\u5168\u5c40(\u4e3b\u4ece\u590d\u5236)\u552f\u4e00\u7684\u7f16\u53f7\u3002\n\u5b83\u7684\u5b98\u65b9\u5b9a\u4e49\u5982\u4e0b\uff1a\nGTID = source_id \uff1atransaction_id\n7E11FA47-31CA-19E1-9E56-C43AA21293967:29\n\u4ec0\u4e48\u662fsever_uuid\uff0c\u548cServer-id \u533a\u522b\uff1f\n\u6838\u5fc3\u7279\u6027: \u5168\u5c40\u552f\u4e00,\u5177\u5907\u5e42\u7b49\u6027\n<\/code><\/pre>\n<h2>4.3 GTID\u6838\u5fc3\u53c2\u6570<\/h2>\n<p>\u91cd\u8981\u53c2\u6570\uff1a<\/p>\n<pre><code class=\"language-shell\" lang=\"shell\">gtid-mode=on                        --\u542f\u7528gtid\u7c7b\u578b\uff0c\u5426\u5219\u5c31\u662f\u666e\u901a\u7684\u590d\u5236\u67b6\u6784\nenforce-gtid-consistency=true       --\u5f3a\u5236GTID\u7684\u4e00\u81f4\u6027\nlog-slave-updates=1                 --\u5f3a\u5236slave\u66f4\u65b0\u662f\u5426\u8bb0\u5165\u65e5\u5fd7\n<\/code><\/pre>\n<h2>4.4 GTID\u590d\u5236\u914d\u7f6e\u8fc7\u7a0b\uff1a<\/h2>\n<h3>4.4.1 \u6e05\u7406\u73af\u5883<\/h3>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">pkill mysqld\n \\rm -rf \/data\/mysql\/data\/*\n \\rm -rf \/data\/binlog\/*\n<\/code><\/pre>\n<h3>4.4.2 \u51c6\u5907\u914d\u7f6e\u6587\u4ef6<\/h3>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">\u4e3b\u5e93db01\uff1a\ncat &gt; \/etc\/my.cnf &lt;&lt;EOF\n[mysqld]\nbasedir=\/application\/mysql\/\ndatadir=\/data\/mysql\/data\nsocket=\/tmp\/mysql.sock\nserver_id=51\nport=3306\nsecure-file-priv=\/tmp\nautocommit=0\nlog_bin=\/data\/binlog\/mysql-bin\nbinlog_format=row\ngtid-mode=on\nenforce-gtid-consistency=true\nlog-slave-updates=1\n[mysql]\nprompt=db01 [\\\\d]&gt;\nEOF\n\nslave1(db02)\uff1a\ncat &gt; \/etc\/my.cnf &lt;&lt;EOF\n[mysqld]\nbasedir=\/application\/mysql\ndatadir=\/data\/mysql\/data\nsocket=\/tmp\/mysql.sock\nserver_id=52\nport=3306\nsecure-file-priv=\/tmp\nautocommit=0\nlog_bin=\/data\/binlog\/mysql-bin\nbinlog_format=row\ngtid-mode=on\nenforce-gtid-consistency=true\nlog-slave-updates=1\n[mysql]\nprompt=db02 [\\\\d]&gt;\nEOF\n\nslave2(db03)\uff1a\ncat &gt; \/etc\/my.cnf &lt;&lt;EOF\n[mysqld]\nbasedir=\/applicationmysql\ndatadir=\/data\/mysql\/data\nsocket=\/tmp\/mysql.sock\nserver_id=53\nport=3306\nsecure-file-priv=\/tmp\nautocommit=0\nlog_bin=\/data\/binlog\/mysql-bin\nbinlog_format=row\ngtid-mode=on\nenforce-gtid-consistency=true\nlog-slave-updates=1\n[mysql]\nprompt=db03 [\\\\d]&gt;\nEOF\n<\/code><\/pre>\n<h3>4.4.3 \u521d\u59cb\u5316\u6570\u636e<\/h3>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">mysqld --initialize-insecure --user=mysql --basedir=\/application\/mysql  --datadir=\/data\/mysql\/data \n<\/code><\/pre>\n<h3>4.4.4 \u542f\u52a8\u6570\u636e\u5e93<\/h3>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">\/etc\/init.d\/mysqld start\n<\/code><\/pre>\n<h3>4.4.5 \u6784\u5efa\u4e3b\u4ece\uff1a<\/h3>\n<pre><code class=\"language-csharp\" lang=\"csharp\">master:51\nslave:52,53\n\n51:\ngrant replication slave  on *.* to repl@'10.0.0.%' identified by '123';\n\n52\\53:\nchange master to \nmaster_host='10.0.0.51',\nmaster_user='repl',\nmaster_password='123' ,\nMASTER_AUTO_POSITION=1;  #\u5f00\u542f\u4e3b\u4ece\u590d\u5236\u4ece1\u53f7GTID\u8bf7\u6c42\u4e8c\u8fdb\u5236\n\nstart slave;\n\n\nMASTER_AUTO_POSITION=1;\u8bfb\u53d6relaylog\u6700\u540e\u4e00\u4e2a\u4e8b\u52a1\u7684GTID\n<\/code><\/pre>\n<h2>4.5 GTID \u4ece\u5e93\u8bef\u5199\u5165\u64cd\u4f5c\u5904\u7406<\/h2>\n<pre><code class=\"language-rust\" lang=\"rust\">\u67e5\u770b\u76d1\u63a7\u4fe1\u606f:\nLast_SQL_Error: Error 'Can't create database 'oldboy'; database exists' on query. Default database: 'oldboy'. Query: 'create database oldboy'\n\nRetrieved_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3\nExecuted_Gtid_Set:  71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,\n7ca4a2b7-4aae-11e9-859d-000c298720f6:1\n\n\u6ce8\u5165\u7a7a\u4e8b\u7269\u7684\u65b9\u6cd5\uff1a\n\nstop slave;\nset gtid_next='99279e1e-61b7-11e9-a9fc-000c2928f5dd:3';\nbegin;commit;\nset gtid_next='AUTOMATIC';\n    \n\u8fd9\u91cc\u7684xxxxx:N \u4e5f\u5c31\u662f\u4f60\u7684slave sql thread\u62a5\u9519\u7684GTID\uff0c\u6216\u8005\u8bf4\u662f\u4f60\u60f3\u8981\u8df3\u8fc7\u7684GTID\u3002\n\u6700\u597d\u7684\u89e3\u51b3\u65b9\u6848\uff1a\u91cd\u65b0\u6784\u5efa\u4e3b\u4ece\u73af\u5883\n<\/code><\/pre>\n<h2>4.6 GTID \u590d\u5236\u548c\u666e\u901a\u590d\u5236\u7684\u533a\u522b<\/h2>\n<pre><code class=\"language-dart\" lang=\"dart\">\u975egtid\uff1a\nCHANGE MASTER TO\nMASTER_HOST='10.0.0.51',\nMASTER_USER='repl',\nMASTER_PASSWORD='123',\nMASTER_PORT=3307,\nMASTER_LOG_FILE='mysql-bin.000001',\nMASTER_LOG_POS=444,\nMASTER_CONNECT_RETRY=10;\n\ngtid\uff1a\nchange master to \nmaster_host='10.0.0.51',\nmaster_user='repl',\nmaster_password='123' ,\nMASTER_AUTO_POSITION=1;\nstart slave;\n\n\uff080\uff09\u5728\u4e3b\u4ece\u590d\u5236\u73af\u5883\u4e2d\uff0c\u4e3b\u5e93\u53d1\u751f\u8fc7\u7684\u4e8b\u52a1\uff0c\u5728\u5168\u5c40\u90fd\u662f\u7531\u552f\u4e00GTID\u8bb0\u5f55\u7684\uff0c\u66f4\u65b9\u4fbfFailover\n\uff081\uff09\u989d\u5916\u529f\u80fd\u53c2\u6570\uff083\u4e2a\uff09\n\uff082\uff09change master to \u7684\u65f6\u5019\u4e0d\u518d\u9700\u8981binlog \u6587\u4ef6\u540d\u548cposition\u53f7,MASTER_AUTO_POSITION=1;\n\uff083\uff09\u5728\u590d\u5236\u8fc7\u7a0b\u4e2d\uff0c\u4ece\u5e93\u4e0d\u518d\u4f9d\u8d56master.info\u6587\u4ef6\uff0c\u800c\u662f\u76f4\u63a5\u8bfb\u53d6\u6700\u540e\u4e00\u4e2arelaylog\u7684 GTID\u53f7\n\uff084\uff09 mysqldump\u5907\u4efd\u65f6\uff0c\u9ed8\u8ba4\u4f1a\u5c06\u5907\u4efd\u4e2d\u5305\u542b\u7684\u4e8b\u52a1\u64cd\u4f5c\uff0c\u4ee5\u4ee5\u4e0b\u65b9\u5f0f\n    SET @@GLOBAL.GTID_PURGED='8c49d7ec-7e78-11e8-9638-000c29ca725d:1';\n    \u544a\u8bc9\u4ece\u5e93\uff0c\u6211\u7684\u5907\u4efd\u4e2d\u5df2\u7ecf\u6709\u4ee5\u4e0a\u4e8b\u52a1\uff0c\u4f60\u5c31\u4e0d\u7528\u8fd0\u884c\u4e86\uff0c\u76f4\u63a5\u4ece\u4e0b\u4e00\u4e2aGTID\u5f00\u59cb\u8bf7\u6c42binlog\u5c31\u884c\u3002\n<\/code><\/pre>\n<h1>5.MHA\u9ad8\u53ef\u7528<\/h1>\n<h2>5.1 MHA\u73af\u5883\u642d\u5efa<\/h2>\n<h3>5.1.1 \u89c4\u5212:<\/h3>\n<p>1\u4e3b2\u4ece\uff0c\u72ec\u7acb\u6570\u636e\u5e93\u5b9e\u4f8b<\/p>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u4e3b\u5e93: 51    node \n\u4ece\u5e93: \n52      node\n53      node    manager\n<\/code><\/pre>\n<h3>5.1.2 \u51c6\u5907\u73af\u5883\uff08\u7565\u30021\u4e3b2\u4eceGTID\uff09<\/h3>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/daishen.ltd\/wp-content\/uploads\/2021\/03\/MHA\u9ad8\u53ef\u7528\u7ed3\u6784\u56fe-300x210.png'><img class=\"lazyload lazyload-style-7\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-74\" data-original=\"https:\/\/daishen.ltd\/wp-content\/uploads\/2021\/03\/MHA\u9ad8\u53ef\u7528\u7ed3\u6784\u56fe-300x210.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"mha\u9ad8\u53ef\u7528\u7ed3\u6784\u56fe\" width=\"529\" height=\"370\"  sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/div><\/p>\n<h4>MHA\u8f6f\u4ef6\u6784\u6210<\/h4>\n<pre><code class=\"language-undefined\" lang=\"undefined\">Manager\u5de5\u5177\u5305\u4e3b\u8981\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u5de5\u5177\uff1a\nmasterha_manger             \u542f\u52a8MHA \nmasterha_check_ssh      \t\u68c0\u67e5MHA\u7684SSH\u914d\u7f6e\u72b6\u51b5 \nmasterha_check_repl         \u68c0\u67e5MySQL\u590d\u5236\u72b6\u51b5 \nmasterha_master_monitor     \u68c0\u6d4bmaster\u662f\u5426\u5b95\u673a \nmasterha_check_status       \u68c0\u6d4b\u5f53\u524dMHA\u8fd0\u884c\u72b6\u6001 \nmasterha_master_switch  \t\u63a7\u5236\u6545\u969c\u8f6c\u79fb\uff08\u81ea\u52a8\u6216\u8005\u624b\u52a8\uff09\nmasterha_conf_host      \t\u6dfb\u52a0\u6216\u5220\u9664\u914d\u7f6e\u7684server\u4fe1\u606f\n\nNode\u5de5\u5177\u5305\u4e3b\u8981\u5305\u62ec\u4ee5\u4e0b\u51e0\u4e2a\u5de5\u5177\uff1a\n\u8fd9\u4e9b\u5de5\u5177\u901a\u5e38\u7531MHA Manager\u7684\u811a\u672c\u89e6\u53d1\uff0c\u65e0\u9700\u4eba\u4e3a\u64cd\u4f5c\nsave_binary_logs            \u4fdd\u5b58\u548c\u590d\u5236master\u7684\u4e8c\u8fdb\u5236\u65e5\u5fd7 \napply_diff_relay_logs       \u8bc6\u522b\u5dee\u5f02\u7684\u4e2d\u7ee7\u65e5\u5fd7\u4e8b\u4ef6\u5e76\u5c06\u5176\u5dee\u5f02\u7684\u4e8b\u4ef6\u5e94\u7528\u4e8e\u5176\u4ed6\u7684\npurge_relay_logs            \u6e05\u9664\u4e2d\u7ee7\u65e5\u5fd7\uff08\u4e0d\u4f1a\u963b\u585eSQL\u7ebf\u7a0b\uff09\n<\/code><\/pre>\n<h3>5.1.3 \u914d\u7f6e\u5173\u952e\u7a0b\u5e8f\u8f6f\u8fde\u63a5<\/h3>\n<pre><code class=\"language-shell\" lang=\"shell\">ln -s \/application\/mysql\/bin\/mysqlbinlog    \/usr\/bin\/mysqlbinlog\nln -s \/application\/mysql\/bin\/mysql          \/usr\/bin\/mysql\n<\/code><\/pre>\n<h3>5.1.4 \u914d\u7f6e\u5404\u8282\u70b9\u514d\u5bc6\u901a\u4fe1<\/h3>\n<pre><code class=\"language-shell\" lang=\"shell\">db01\uff1a\nrm -rf \/root\/.ssh \nssh-keygen\ncd \/root\/.ssh \nmv id_rsa.pub authorized_keys\nscp  -r  \/root\/.ssh  10.0.0.52:\/root \nscp  -r  \/root\/.ssh  10.0.0.53:\/root \n\u5404\u8282\u70b9\u9a8c\u8bc1\ndb01:\nfor i in 51 52 53; do  ssh 10.0.0.$i hostname; done \ndb02:\nfor i in 51 52 53; do  ssh 10.0.0.$i hostname; done \ndb03:\nfor i in 51 52 53; do  ssh 10.0.0.$i hostname; done \n<\/code><\/pre>\n<h3>5.1.5 \u5b89\u88c5\u8f6f\u4ef6<\/h3>\n<h4>\u4e0b\u8f7dmha\u8f6f\u4ef6<\/h4>\n<pre><code class=\"language-cpp\" lang=\"cpp\">mha\u5b98\u7f51\uff1ahttps:\/\/code.google.com\/archive\/p\/mysql-master-ha\/\ngithub\u4e0b\u8f7d\u5730\u5740\uff1ahttps:\/\/github.com\/yoshinorim\/mha4mysql-manager\/wiki\/Downloads\n<\/code><\/pre>\n<h4>\u6240\u6709\u8282\u70b9\u5b89\u88c5Node\u8f6f\u4ef6\u4f9d\u8d56\u5305<\/h4>\n<pre><code class=\"language-css\" lang=\"css\">yum install perl-DBD-MySQL -y\nrpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm\n<\/code><\/pre>\n<h4>\u5728db01\u4e3b\u5e93\u4e2d\u521b\u5efamha\u9700\u8981\u7684\u7528\u6237<\/h4>\n<pre><code class=\"language-css\" lang=\"css\"> grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';\n<\/code><\/pre>\n<h4>Manager\u8f6f\u4ef6\u5b89\u88c5\uff08db03\uff09<\/h4>\n<pre><code class=\"language-css\" lang=\"css\">yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes\nrpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm\n<\/code><\/pre>\n<h3>5.1.6 \u914d\u7f6e\u6587\u4ef6\u51c6\u5907(db03)<\/h3>\n<pre><code class=\"language-csharp\" lang=\"csharp\">\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\n mkdir -p \/etc\/mha\n\u521b\u5efa\u65e5\u5fd7\u76ee\u5f55\n mkdir -p \/var\/log\/mha\/app1\n    \napp1\uff1a\u6839\u636e\u81ea\u5df1\u7684\u4e1a\u52a1\u8fdb\u884c\u547d\u540d\n    \n\u7f16\u8f91mha\u914d\u7f6e\u6587\u4ef6\ncat &gt; \/etc\/mha\/app1.cnf &lt;&lt;EOF\n[server default]\nmanager_log=\/var\/log\/mha\/app1\/manager        \nmanager_workdir=\/var\/log\/mha\/app1            \nmaster_binlog_dir=\/data\/binlog       \nuser=mha                                   \npassword=mha                               \nping_interval=2\nrepl_password=123\nrepl_user=repl\nssh_user=root                               \n[server1]                                   \nhostname=10.0.0.51\nport=3306                                  \n[server2]            \nhostname=10.0.0.52\nport=3306\n[server3]\nhostname=10.0.0.53\nport=3306\nEOF\n<\/code><\/pre>\n<h3>5.1.7 \u72b6\u6001\u68c0\u67e5(db03)<\/h3>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">masterha_check_ssh  --conf=\/etc\/mha\/app1.cnf \nmasterha_check_repl  --conf=\/etc\/mha\/app1.cnf\n<\/code><\/pre>\n<h3>5.1.8 \u5f00\u542fMHA(db03)\uff1a<\/h3>\n<pre><code class=\"language-ruby\" lang=\"ruby\">nohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover  &lt; \/dev\/null&gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h3>5.1.9 \u67e5\u770bMHA\u72b6\u6001<\/h3>\n<pre><code class=\"language-ruby\" lang=\"ruby\">[root@db03 ~]# masterha_check_status --conf=\/etc\/mha\/app1.cnf\napp1 (pid:4719) is running(0:PING_OK), master:10.0.0.51\n[root@db03 ~]# mysql -umha -pmha -h 10.0.0.51 -e \"show variables like 'server_id'\"\nmysql: [Warning] Using a password on the command line interface can be insecure.\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| server_id     | 51    |\n+---------------+-------+\n[root@db03 ~]# mysql -umha -pmha -h 10.0.0.52 -e \"show variables like 'server_id'\"\nmysql: [Warning] Using a password on the command line interface can be insecure.\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| server_id     | 52    |\n+---------------+-------+\n[root@db03 ~]# mysql -umha -pmha -h 10.0.0.53 -e \"show variables like 'server_id'\"\nmysql: [Warning] Using a password on the command line interface can be insecure.\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| server_id     | 53    |\n+---------------+-------+\n<\/code><\/pre>\n<h2>5.2.MHA FailOver \u8fc7\u7a0b\u8be6\u89e3<\/h2>\n<h4>5.2.1\u4ec0\u4e48\u662fFailover?<\/h4>\n<pre><code>\u6545\u969c\u8f6c\u79fb\uff0c\n\u4e3b\u5e93\u5b95\u673a\u4e00\u76f4\u5230\u4e1a\u52a1\u6062\u590d\u6b63\u5e38\u7684\u5904\u7406\u8fc7\u7a0b(\u81ea\u52a8)\n<\/code><\/pre>\n<h4>5.2.2 Failover\u8ba9\u4f60\u5b9e\u73b0\u600e\u4e48\u505a?<\/h4>\n<pre><code>(1)\u5feb\u901f\u76d1\u63a7\u5230\u4e3b\u5e93\u5b95\u673a\n(2)\u9009\u62e9\u65b0\u4e3b\n(3)\u6570\u636e\u8865\u507f\n(4)\u89e3\u9664\u4ece\u5e93\u8eab\u4efd\n(5)\u5269\u4f59\u4ece\u5e93\u548c\u65b0\u4e3b\u5e93\u6784\u5efa\u4e3b\u4ece\u5173\u7cfb\n(6)\u5e94\u7528\u900f\u660e\n(7)\u6545\u969c\u8282\u70b9\u5904\u7406\n(8)\u6545\u969c\u63d0\u9192\n<\/code><\/pre>\n<h4>5.2.3 MHA\u7684Failover\u5982\u4f55\u5b9e\u73b0?<\/h4>\n<p>\u4ece\u542f\u52a8&#8212;&gt;\u6545\u969c&#8212;&gt;\u8f6c\u79fb&#8212;&gt;\u4e1a\u52a1\u6062\u590d<\/p>\n<pre><code>(1) MHA\u901a\u8fc7masterha_manger\u811a\u672c\u542f\u52a8MHA\u7684\u529f\u80fd.\n(2) \u5728manager\u542f\u52a8\u4e4b\u524d\u4f1a\u81ea\u52a8\u68c0\u67e5ssh\u4e92\u4fe1(masterha_check_ssh)\u548c\u4e3b\u4ece\u72b6\u6001(masterha_check_repl)\n(3) MHA-manager \u901a\u8fc7masterha_master_monitor\u811a\u672c(\u6bcf\u9694ping_interval\u79d2 )\n(4) masterha_master_monitor \u63a2\u6d4b\u4e3b\u5e933\u6b21\u65e0\u5fc3\u8df3\u4e4b\u540e,\u5c31\u8ba4\u4e3a\u4e3b\u5e93\u5b95\u673a\u4e86.\n(5)\u8fdb\u884c\u9009\u4e3b\u8fc7\u7a0b\n\t\u7b97\u6cd5\u4e00:\n\t\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u4e2d\u662f\u5426\u6709\u5f3a\u5236\u9009\u4e3b\u7684\u53c2\u6570?\n\tcandidate_master=1\n\tcheck_rep1_delay=0\n\t\u7b97\u6cd5\u4e8c:\n\t\u81ea\u52a8\u5224\u65ad\u6240\u6709\u4ece\u5e93\u7684\u65e5\u5fd7\u91cf.\u5c06\u6700\u63a5\u8fd1\u4e3b\u5e93\u6570\u636e\u7684\u4ece\u5e93\u4f5c\u4e3a\u65b0\u4e3b.\n\t\u7b97\u6cd5\u4e09:\n\t\u6309\u7167\u914d\u7f6e\u6587\u4ef6\u5148\u540e\u987a\u5e8f\u7684\u8fdb\u884c\u9009\u65b0\u4e3b\n\t\u6269\u5c55\u4e00\u4e0b\uff1a\n\tcandidate_master=1 \u5e94\u7528\u573a\u666f\n\t1.MHA+KeepAlive VIP (\u65e9\u671fMHA\u67b6\u6784)\n\t2.\u591a\u5730\u591a\u4e2d\u5fc3\n(6) \u6570\u636e\u8865\u507f\n\t\u5224\u65ad\u4e3b\u5e93SSH\u7684\u8fde\u901a\u6027\n\t\t\u60c5\u51b5\u4e00: SSH\u80fd\u8fde\n\t\t\u8c03\u7528savebinarylogs\u811a\u672c,\u7acb\u5373\u4fdd\u5b58\u7f3a\u5931\u90e8\u5206\u7684binlog\u5230\u5404\u4e2a\u4ece\u8282\u70b9,\u6062\u590d\n\t\t\n\t\t\u60c5\u51b5\u4e8c: SSH\u65e0\u6cd5\u8fde\u63a5\n\t\t\u8c03\u7528apply_ _diff_ relay_ _1ogs \u811a\u672c,\u8ba1\u7b97\u4ece\u5e93\u7684relay1og\u7684\u5dee\u5f02,\u6062\u590d\u52302\u53f7\u4ece\u5e93\n\t(6.1)\u63d0\u4f9b\u989d\u5916\u7684\u6570\u636e\u8865\u507f\u7684\u529f\u80fd@@\n(7) \u89e3\u9664\u4ece\u5e93\u8eab\u4efd\n(8)\u5269\u4f59\u4ece\u5e93\u548c\u65b0\u4e3b\u5e93\u6784\u5efa\u4e3b\u4ece\u5173\u7cfb\n(9) \u5e94\u7528\u900f\u660e@@\n(10) \u6545\u969c\u8282\u70b9\u81ea\u6108(\u5f85\u5f00\u53d1...)@@\n(11) \u6545\u969c\u63d0\u9192@@\n\n<\/code><\/pre>\n<h4>5.2.4MHA\u5e94\u7528\u900f\u660e\uff08vip\uff09<\/h4>\n<p>master_ip_failover<\/p>\n<pre><code class=\"language-shell\" lang=\"shell\">#!\/usr\/bin\/env perl\n\nuse strict;\nuse warnings FATAL =&gt; 'all';\n\nuse Getopt::Long;\nuse MHA::DBHelper;\n\nmy (\n  $command,        $ssh_user,         $orig_master_host,\n  $orig_master_ip, $orig_master_port, $new_master_host,\n  $new_master_ip,  $new_master_port,  $new_master_user,\n  $new_master_password\n);\nmy $vip = '10.0.0.55\/24';\nmy $key = \"1\";\nmy $ssh_start_vip = \"\/sbin\/ifconfig ens33:$key $vip\";\nmy $ssh_stop_vip = \"\/sbin\/ifconfig ens33:$key down\";\n\nGetOptions(\n  'command=s'             =&gt; \\$command,\n  'ssh_user=s'            =&gt; \\$ssh_user,\n  'orig_master_host=s'    =&gt; \\$orig_master_host,\n  'orig_master_ip=s'      =&gt; \\$orig_master_ip,\n  'orig_master_port=i'    =&gt; \\$orig_master_port,\n  'new_master_host=s'     =&gt; \\$new_master_host,\n  'new_master_ip=s'       =&gt; \\$new_master_ip,\n  'new_master_port=i'     =&gt; \\$new_master_port,\n  'new_master_user=s'     =&gt; \\$new_master_user,\n  'new_master_password=s' =&gt; \\$new_master_password,\n);\n\nexit &amp;main();\n\nsub main {\n  if ( $command eq \"stop\" || $command eq \"stopssh\" ) {\n\n    # $orig_master_host, $orig_master_ip, $orig_master_port are passed.\n    # If you manage master ip address at global catalog database,\n    # invalidate orig_master_ip here.\n    my $exit_code = 1;\n    eval {\n\n      # updating global catalog, etc\n      $exit_code = 0;\n    };\n    if ($@) {\n      warn \"Got Error: $@\\n\";\n      exit $exit_code;\n    }\n    exit $exit_code;\n  }\n    elsif ( $command eq \"start\" ) {\n\n        # all arguments are passed.\n        # If you manage master ip address at global catalog database,\n        # activate new_master_ip here.\n        # You can also grant write access (create user, set read_only=0, etc) here.\n        my $exit_code = 10;\n        eval {\n            print \"Enabling the VIP - $vip on the new master - $new_master_host \\n\";\n            &amp;start_vip();\n            &amp;stop_vip();\n            $exit_code = 0;\n        };\n        if ($@) {\n            warn $@;\n            exit $exit_code;\n        }\n        exit $exit_code;\n    }\n    elsif ( $command eq \"status\" ) {\n        print \"Checking the Status of the script.. OK \\n\";\n        `ssh $ssh_user\\@$orig_master_host \\\" $ssh_start_vip \\\"`;\n        exit 0;\n    }\n    else {\n        &amp;usage();\n        exit 1;\n    }\n}\n\n\nsub start_vip() {\n    `ssh $ssh_user\\@$new_master_host \\\" $ssh_start_vip \\\"`;\n}\n# A simple system call that disable the VIP on the old_master \nsub stop_vip() {\n   `ssh $ssh_user\\@$orig_master_host \\\" $ssh_stop_vip \\\"`;\n}\n\n\nsub usage {\n  print\n\"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\\n\";\n}\n<\/code><\/pre>\n<pre><code class=\"language-shell\" lang=\"shell\">dos2unix \/usr\/local\/bin\/master_ip_failover\n\nchmod +x \/usr\/local\/bin\/master_ip_failover \n\nvim \/etc\/mha\/app1.cnf\n\nmaster_ip_failover_script=\/usr\/local\/bin\/master_ip_failover\n\ndb01\u4e0a\n\u624b\u5de5\u5728\u4e3b\u5e93\u4e0a\u7ed1\u5b9avip\uff0c\u6ce8\u610f\u4e00\u5b9a\u8981\u548c\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684ethN\u4e00\u81f4\uff0c\u6211\u7684\u662feth0:1(1\u662fkey\u6307\u5b9a\u7684\u503c)\nifconfig ens33:1 10.0.0.55\/24\n\n\u91cd\u542fmha\nmasterha_stop --conf=\/etc\/mha\/app1.cnf\nnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h3>5.1.10 \u6545\u969c\u6a21\u62df\u53ca\u5904\u7406<\/h3>\n<pre><code class=\"language-shell\" lang=\"shell\">### \u505c\u4e3b\u5e93db01:    \n\/etc\/init.d\/mysqld stop\n\n\u89c2\u5bdfmanager  \u65e5\u5fd7 tail -f \/var\/log\/mha\/app1\/manager\n\u672b\u5c3e\u5fc5\u987b\u663e\u793asuccessfully\uff0c\u624d\u7b97\u6b63\u5e38\u5207\u6362\u6210\u529f\u3002                            \n<\/code><\/pre>\n<h4>\u4fee\u590d\u4e3b\u5e93<\/h4>\n<pre><code class=\"language-csharp\" lang=\"csharp\">[root@db01 ~]# \/etc\/init.d\/mysqld start\n<\/code><\/pre>\n<h4>\u6062\u590d\u4e3b\u4ece\u7ed3\u6784<\/h4>\n<pre><code class=\"language-shell\" lang=\"shell\">CHANGE MASTER TO \nMASTER_HOST='10.0.0.52',\nMASTER_PORT=3306, \nMASTER_AUTO_POSITION=1, \nMASTER_USER='repl', \nMASTER_PASSWORD='123';\nstart slave ;\n<\/code><\/pre>\n<h4>\u4fee\u6539\u914d\u7f6e\u6587\u4ef6<\/h4>\n<pre><code class=\"language-csharp\" lang=\"csharp\">[server1]\nhostname=10.0.0.51\nport=3306\n<\/code><\/pre>\n<h4>\u542f\u52a8MHA<\/h4>\n<pre><code class=\"language-ruby\" lang=\"ruby\">nohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover  &lt; \/dev\/null&gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h3>5.1.11 Manager\u989d\u5916\u53c2\u6570\u4ecb\u7ecd<\/h3>\n<pre><code class=\"language-shell\" lang=\"shell\">\u8bf4\u660e\uff1a\n\u4e3b\u5e93\u5b95\u673a\u8c01\u6765\u63a5\u7ba1\uff1f\n1. \u6240\u6709\u4ece\u8282\u70b9\u65e5\u5fd7\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u9ed8\u8ba4\u4f1a\u4ee5\u914d\u7f6e\u6587\u4ef6\u7684\u987a\u5e8f\u53bb\u9009\u62e9\u4e00\u4e2a\u65b0\u4e3b\u3002\n2. \u4ece\u8282\u70b9\u65e5\u5fd7\u4e0d\u4e00\u81f4\uff0c\u81ea\u52a8\u9009\u62e9\u6700\u63a5\u8fd1\u4e8e\u4e3b\u5e93\u7684\u4ece\u5e93\n3. \u5982\u679c\u5bf9\u4e8e\u67d0\u8282\u70b9\u8bbe\u5b9a\u4e86\u6743\u91cd\uff08candidate_master=1\uff09\uff0c\u6743\u91cd\u8282\u70b9\u4f1a\u4f18\u5148\u9009\u62e9\u3002\n\u4f46\u662f\u6b64\u8282\u70b9\u65e5\u5fd7\u91cf\u843d\u540e\u4e3b\u5e93100M\u65e5\u5fd7\u7684\u8bdd\uff0c\u4e5f\u4e0d\u4f1a\u88ab\u9009\u62e9\u3002\u53ef\u4ee5\u914d\u5408check_repl_delay=0\uff0c\u5173\u95ed\u65e5\u5fd7\u91cf\u7684\u68c0\u67e5\uff0c\u5f3a\u5236\u9009\u62e9\u5019\u9009\u8282\u70b9\u3002\n\n(1)  ping_interval=1\n#\u8bbe\u7f6e\u76d1\u63a7\u4e3b\u5e93\uff0c\u53d1\u9001ping\u5305\u7684\u65f6\u95f4\u95f4\u9694\uff0c\u5c1d\u8bd5\u4e09\u6b21\u6ca1\u6709\u56de\u5e94\u7684\u65f6\u5019\u81ea\u52a8\u8fdb\u884cfailover\n(2) candidate_master=1\n#\u8bbe\u7f6e\u4e3a\u5019\u9009master\uff0c\u5982\u679c\u8bbe\u7f6e\u8be5\u53c2\u6570\u4ee5\u540e\uff0c\u53d1\u751f\u4e3b\u4ece\u5207\u6362\u4ee5\u540e\u5c06\u4f1a\u5c06\u6b64\u4ece\u5e93\u63d0\u5347\u4e3a\u4e3b\u5e93\uff0c\u5373\u4f7f\u8fd9\u4e2a\u4e3b\u5e93\u4e0d\u662f\u96c6\u7fa4\u4e2d\u4e8b\u4ef6\u6700\u65b0\u7684slave\n(3)check_repl_delay=0\n#\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5982\u679c\u4e00\u4e2aslave\u843d\u540emaster 100M\u7684relay logs\u7684\u8bdd\uff0c\nMHA\u5c06\u4e0d\u4f1a\u9009\u62e9\u8be5slave\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7684master\uff0c\u56e0\u4e3a\u5bf9\u4e8e\u8fd9\u4e2aslave\u7684\u6062\u590d\u9700\u8981\u82b1\u8d39\u5f88\u957f\u65f6\u95f4\uff0c\u901a\u8fc7\u8bbe\u7f6echeck_repl_delay=0,MHA\u89e6\u53d1\u5207\u6362\u5728\u9009\u62e9\u4e00\u4e2a\u65b0\u7684master\u7684\u65f6\u5019\u5c06\u4f1a\u5ffd\u7565\u590d\u5236\u5ef6\u65f6\uff0c\u8fd9\u4e2a\u53c2\u6570\u5bf9\u4e8e\u8bbe\u7f6e\u4e86candidate_master=1\u7684\u4e3b\u673a\u975e\u5e38\u6709\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u5019\u9009\u4e3b\u5728\u5207\u6362\u7684\u8fc7\u7a0b\u4e2d\u4e00\u5b9a\u662f\u65b0\u7684master\n<\/code><\/pre>\n<h3>5.1.12 MHA \u7684vip\u529f\u80fd<\/h3>\n<h4>\u53c2\u6570<\/h4>\n<pre><code class=\"language-shell\" lang=\"shell\">master_ip_failover_script=\/usr\/local\/bin\/master_ip_failover\n\u6ce8\u610f\uff1a\/usr\/local\/bin\/master_ip_failover\uff0c\u5fc5\u987b\u4e8b\u5148\u51c6\u5907\u597d\n<\/code><\/pre>\n<h4>\u4fee\u6539\u811a\u672c\u5185\u5bb9<\/h4>\n<pre><code class=\"language-shell\" lang=\"shell\">vi  \/usr\/local\/bin\/master_ip_failover\nmy $vip = '10.0.0.55\/24';\nmy $key = '1';\nmy $ssh_start_vip = \"\/sbin\/ifconfig eth0:$key $vip\";\nmy $ssh_stop_vip = \"\/sbin\/ifconfig eth0:$key down\";\n<\/code><\/pre>\n<h4>\u66f4\u6539manager\u914d\u7f6e\u6587\u4ef6\uff1a<\/h4>\n<pre><code class=\"language-ruby\" lang=\"ruby\">vi \/etc\/mha\/app1.cnf\n\u6dfb\u52a0\uff1a\nmaster_ip_failover_script=\/usr\/local\/bin\/master_ip_failover\n\u6ce8\u610f\uff1a\n[root@db03 ~]# dos2unix \/usr\/local\/bin\/master_ip_failover \ndos2unix: converting file \/usr\/local\/bin\/master_ip_failover to Unix format ...\n[root@db03 ~]# chmod +x \/usr\/local\/bin\/master_ip_failover \n<\/code><\/pre>\n<h4>\u4e3b\u5e93\u4e0a\uff0c\u624b\u5de5\u751f\u6210\u7b2c\u4e00\u4e2avip\u5730\u5740<\/h4>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u624b\u5de5\u5728\u4e3b\u5e93\u4e0a\u7ed1\u5b9avip\uff0c\u6ce8\u610f\u4e00\u5b9a\u8981\u548c\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684ethN\u4e00\u81f4\uff0c\u6211\u7684\u662feth0:1(1\u662fkey\u6307\u5b9a\u7684\u503c)\nifconfig eth0:1 10.0.0.55\/24\n<\/code><\/pre>\n<h4>\u91cd\u542fmha<\/h4>\n<pre><code class=\"language-jsx\" lang=\"jsx\">masterha_stop --conf=\/etc\/mha\/app1.cnf\nnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h3>5.1.13 \u90ae\u4ef6\u63d0\u9192<\/h3>\n<pre><code class=\"language-jsx\" lang=\"jsx\">1. \u53c2\u6570\uff1a\nreport_script=\/usr\/local\/bin\/send\n2. \u51c6\u5907\u90ae\u4ef6\u811a\u672c\nsend_report\n(1)\u51c6\u5907\u53d1\u90ae\u4ef6\u7684\u811a\u672c(\u4e0a\u4f20 email_2019-\u6700\u65b0.zip\u4e2d\u7684\u811a\u672c\uff0c\u5230\/usr\/local\/bin\/\u4e2d)\n(2)\u5c06\u51c6\u5907\u597d\u7684\u811a\u672c\u6dfb\u52a0\u5230mha\u914d\u7f6e\u6587\u4ef6\u4e2d,\u8ba9\u5176\u8c03\u7528\n\n3. \u4fee\u6539manager\u914d\u7f6e\u6587\u4ef6\uff0c\u8c03\u7528\u90ae\u4ef6\u811a\u672c\nvi \/etc\/mha\/app1.cnf\nreport_script=\/usr\/local\/bin\/send\n\n\uff083\uff09\u505c\u6b62MHA\nmasterha_stop --conf=\/etc\/mha\/app1.cnf\n\uff084\uff09\u5f00\u542fMHA    \nnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n        \n(5) \u5173\u95ed\u4e3b\u5e93,\u770b\u8b66\u544a\u90ae\u4ef6  \n\u6545\u969c\u4fee\u590d\uff1a\n1. \u6062\u590d\u6545\u969c\u8282\u70b9\n\uff081\uff09\u5b9e\u4f8b\u5b95\u6389\n\/etc\/init.d\/mysqld start \n\uff082\uff09\u4e3b\u673a\u635f\u574f\uff0c\u6709\u53ef\u80fd\u6570\u636e\u4e5f\u635f\u574f\u4e86\n\u5907\u4efd\u5e76\u6062\u590d\u6545\u969c\u8282\u70b9\u3002\n2.\u6062\u590d\u4e3b\u4ece\u73af\u5883\n\u770b\u65e5\u5fd7\u6587\u4ef6\uff1a\nCHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';\nstart slave ;\n3.\u6062\u590dmanager\n3.1 \u4fee\u597d\u7684\u6545\u969c\u8282\u70b9\u914d\u7f6e\u4fe1\u606f\uff0c\u52a0\u5165\u5230\u914d\u7f6e\u6587\u4ef6\n[server1]\nhostname=10.0.0.51\nport=3306\n3.2 \u542f\u52a8manager   \nnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h3>5.1.14 binlog server\uff08db03\uff09<\/h3>\n<h4>\u53c2\u6570\uff1a<\/h4>\n<pre><code class=\"language-csharp\" lang=\"csharp\">binlogserver\u914d\u7f6e\uff1a\n\u627e\u4e00\u53f0\u989d\u5916\u7684\u673a\u5668\uff0c\u5fc5\u987b\u8981\u67095.6\u4ee5\u4e0a\u7684\u7248\u672c\uff0c\u652f\u6301gtid\u5e76\u5f00\u542f\uff0c\u6211\u4eec\u76f4\u63a5\u7528\u7684\u7b2c\u4e8c\u4e2aslave\uff08db03\uff09\nvim \/etc\/mha\/app1.cnf \n[binlog1]\nno_master=1\nhostname=10.0.0.53\nmaster_binlog_dir=\/data\/mysql\/binlog\n<\/code><\/pre>\n<h4>\u521b\u5efa\u5fc5\u8981\u76ee\u5f55<\/h4>\n<pre><code class=\"language-kotlin\" lang=\"kotlin\">mkdir -p \/data\/mysql\/binlog\nchown -R mysql.mysql \/data\/*\n\u4fee\u6539\u5b8c\u6210\u540e\uff0c\u5c06\u4e3b\u5e93binlog\u62c9\u8fc7\u6765\uff08\u4ece000001\u5f00\u59cb\u62c9\uff0c\u4e4b\u540e\u7684binlog\u4f1a\u81ea\u52a8\u6309\u987a\u5e8f\u8fc7\u6765\uff09\n<\/code><\/pre>\n<h4>\u62c9\u53d6\u4e3b\u5e93binlog\u65e5\u5fd7<\/h4>\n<pre><code class=\"language-shell\" lang=\"shell\">cd \/data\/mysql\/binlog     -----\u300b\u5fc5\u987b\u8fdb\u5165\u5230\u81ea\u5df1\u521b\u5efa\u597d\u7684\u76ee\u5f55\nmysqlbinlog  -R --host=10.0.0.52 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &amp;\n\u6ce8\u610f\uff1a\n\u62c9\u53d6\u65e5\u5fd7\u7684\u8d77\u70b9,\u9700\u8981\u4e3b\u5e93\u6b63\u5728\u4f7f\u7528\u7684\u4e8c\u8fdb\u5236\u65e5\u5fd7\u70b9\u4e3a\u8d77\u70b9\n<\/code><\/pre>\n<h4>\u91cd\u542fMHA<\/h4>\n<pre><code class=\"language-jsx\" lang=\"jsx\">masterha_stop --conf=\/etc\/mha\/app1.cnf\nnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n<\/code><\/pre>\n<h4>\u6545\u969c\u5904\u7406<\/h4>\n<pre><code class=\"language-undefined\" lang=\"undefined\">\u4e3b\u5e93\u5b95\u673a\uff0cbinlogserver \u81ea\u52a8\u505c\u6389\uff0cmanager \u4e5f\u4f1a\u81ea\u52a8\u505c\u6b62\u3002\n\u5904\u7406\u601d\u8def\uff1a\n1\u3001\u91cd\u65b0\u83b7\u53d6\u65b0\u4e3b\u5e93\u7684binlog\u5230binlogserver\u4e2d\n2\u3001\u91cd\u65b0\u914d\u7f6e\u6587\u4ef6binlog server\u4fe1\u606f\n3\u3001\u6700\u540e\u518d\u542f\u52a8MHA\n<\/code><\/pre>\n<h3>MHA\u7684\u6545\u969c\u6392\u67e5<\/h3>\n<p>\u642d\u5efa\u8fc7\u7a0b\u4e2d\u6392\u67e5<\/p>\n<pre><code>(1)\u68c0\u67e5\u811a\u672c\nmasterha check_ssh --conf=\/etc\/mha\/app1.cnf\nmasterha check_repl --conf=\/etc\/mha\/app1.cnf\n1\u4e3b2\u4ece\u590d\u5236\u73af\u5883\n(2)\n\u914d\u7f6e\u6587\u4ef6\n\u8282\u70b9\u5730\u5740,\u7aef\u53e3\nvip\u548csend\u811a\u672c\u6307\u5b9a\u4f4d\u7f6e\u548c\u6743\u9650\n(3) \u8f6f\u8fde\u63a5\n<\/code><\/pre>\n<p>\u5207\u6362\u8fc7\u7a0b\u7684\u95ee\u9898<\/p>\n<pre><code>\u67e5\u770b\/var\/1og\/mha\/app1\/manager\n\u811a\u672c\u95ee\u9898\u6bd4\u8f83\u591a\u4e00\u4e9b\nvip\nsend\nbinlog\n<\/code><\/pre>\n<p>\u6062\u590dMHA\u6545\u969c<\/p>\n<pre><code class=\"language-shell\" lang=\"shell\">(1)\u68c0\u67e5\u5404\u4e2a\u8282\u70b9\u662f\u5426\u542f\u52a8\n(2)\u627e\u5230\u4e3b\u5e93\u662f\u8c01?\n(3)\u6062\u590d1\u4e3b2\u4ece\ngrep \"CHANGE MASTER TO\" \/var\/log\/mha\/app1\/manager\n\n(4) \u68c0\u67e5\u914d\u7f6e\u6587\u4ef6,\u6062\u590d\u8282\u70b9\u4fe1\u606f\n(5) \u68c0\u67e5vip\u548cbinlogserver\n\t1.\u68c0\u67e5vip\u662f\u5426\u5728\u4e3b\u5e93,\u5982\u679c\u4e0d\u5728\uff0c\u624b\u5de5\u8c03\u6574\u5230\u4e3b\u5e93\n\t2.\u91cd\u65b0\u542f\u52a8binlogserver\u62c9\u53d6\n(6)\u542f\u52a8manager\n\u542f\u52a8\uff1a\tnohup masterha_manager --conf=\/etc\/mha\/app1.cnf --remove_dead_master_conf --ignore_last_failover &lt; \/dev\/null &gt; \/var\/log\/mha\/app1\/manager.log 2&gt;&amp;1 &amp;\n\t\n\u68c0\u67e5\uff1a\tmasterha_check_status --conf=\/etc\/mha\/app1.cnf\n<\/code><\/pre>\n<h2>3.\u7ba1\u7406\u5458\u5728\u9ad8\u53ef\u7528\u67b6\u6784\u7ef4\u62a4\u7684\u804c\u8d23<\/h2>\n<pre><code class=\"language-css\" lang=\"css\">1. \u642d\u5efa\uff1aMHA+VIP+SendReport+BinlogServer\n2. \u76d1\u63a7\u53ca\u6545\u969c\u5904\u7406\n3.  \u9ad8\u53ef\u7528\u67b6\u6784\u7684\u4f18\u5316\n \u6838\u5fc3\u662f\uff1a\u5c3d\u53ef\u80fd\u964d\u4f4e\u4e3b\u4ece\u7684\u5ef6\u65f6\uff0c\u8ba9MHA\u82b1\u5728\u6570\u636e\u8865\u507f\u4e0a\u7684\u65f6\u95f4\u5c3d\u91cf\u51cf\u5c11\u3002\n5.7 \u7248\u672c\uff0c\u5f00\u542fGTID\u6a21\u5f0f\uff0c\u5f00\u542f\u4ece\u5e93SQL\u5e76\u53d1\u590d\u5236\u3002 \n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1. \u5ef6\u65f6\u4ece\u5e93 1.1\u4ecb\u7ecd \u662f\u6211\u4eec\u8ba4\u4e3a\u914d\u7f6e\u7684\u4e00\u79cd\u7279\u6b8a\u4ece\u5e93.\u4eba\u4e3a\u914d\u7f6e\u4ece\u5e93\u548c\u4e3b\u5e93\u5ef6\u65f6N\u5c0f\u65f6. 1.2 \u4e3a\u4ec0\u4e48\u8981\u6709\u5ef6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-mysql"],"_links":{"self":[{"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=73"}],"version-history":[{"count":1,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.daishen.ltd\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}