天天看點

mysql主從和mysql主主和半同步複制

<code>一、準備(主從都需要配置):</code>

<code>    </code><code>yum </code><code>-</code><code>y install mysql mysql</code><code>-</code><code>server       </code><code>#安裝mysql</code>

<code>  </code><code>yum </code><code>-</code><code>y install ntpdate           </code><code>#安裝時間同步</code>

<code>  </code><code>echo </code><code>'*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &amp;&gt;/dev/null'</code> <code>&gt;&gt;</code><code>/</code><code>var</code><code>/</code><code>spool</code><code>/</code><code>cron</code><code>/</code><code>root   </code><code>#配置網絡時間同步</code>

<code>  </code><code>service mysqld start          </code><code>#啟動服務</code>

<code>  </code><code>chkconfig </code><code>-</code><code>-</code><code>add mysqld            </code><code>#添加為系統服務</code>

<code>  </code><code>chkconfig  mysqld on         </code><code>#開啟預設運作級别</code>

<code>    </code> 

<code>二、主伺服器配置:主配置檔案預設為:</code><code>/</code><code>etc</code><code>/</code><code>my.cnf</code>

<code>    </code><code>[mysqld]</code>

<code>  </code><code>datadir</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code>

<code>  </code><code>socket</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code><code>/</code><code>mysql.sock</code>

<code>  </code><code>user</code><code>=</code><code>mysql</code>

<code>  </code><code>symbolic</code><code>-</code><code>links</code><code>=</code><code>0</code>

<code>  </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>          <code>#開啟二進制日志檔案</code>

<code>  </code><code>server</code><code>-</code><code>id</code><code>=</code><code>1</code>             <code>#設定伺服器id,保證全局唯一</code>

<code>  </code><code>sync</code><code>-</code><code>binlog</code><code>=</code><code>1</code>            <code>#全局唯一的server-id</code>

<code>  </code><code>innodb</code><code>-</code><code>flush</code><code>-</code><code>logs</code><code>-</code><code>at</code><code>-</code><code>trx</code><code>-</code><code>commit</code><code>=</code><code>1</code>           

<code>  </code><code>innodb</code><code>-</code><code>support</code><code>-</code><code>xa</code><code>=</code><code>1</code>

<code>        </code> 

<code>  </code><code>service mysqld restart    </code><code>#重新開機動服務</code>

<code>  </code><code>mysql&gt; show </code><code>global</code> <code>variables like </code><code>'%server%'</code><code>;      </code><code>#資料庫id</code>

<code>  </code><code>mysql&gt; show master logs;      </code><code>#檢視資料庫二進制日志</code>

<code>  </code><code>mysql&gt; show master status;    </code><code>#檢視主伺服器狀态,記住二進制日志名,配置從伺服器會用</code>

<code>  </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.50'</code> <code>identified by </code><code>'123.com'</code><code>;</code>

<code>      </code><code>#授權192.168.0.50主機上的copy使用者對所有庫有複制權限</code>

<code>  </code><code>mysql&gt; select Host,User,Password </code><code>from</code> <code>mysql.user;    </code><code>#檢視使用者</code>

<code>三、從伺服器配置:</code>

<code>    </code><code>datadir</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code>

<code>    </code><code>socket</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code><code>/</code><code>mysql.sock</code>

<code>    </code><code>user</code><code>=</code><code>mysql</code>

<code>    </code><code>symbolic</code><code>-</code><code>links</code><code>=</code><code>0</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log     </code><code>#啟用中繼日志</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>10</code>        <code>#伺服器id,全局唯一</code>

<code>    </code><code>read</code><code>-</code><code>only</code><code>=</code><code>1</code>         <code>#将伺服器設定為隻讀模式(對擁有root權限的使用者無效)</code>

<code>    </code><code>service mysqld restart            </code><code>#重新開機動服務</code>

<code>    </code><code>mysql&gt; change master to master_host</code><code>=</code><code>'192.168.0.10'</code><code>,master_user</code><code>=</code><code>'copy'</code><code>,</code>

<code>           </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000001'</code><code>,master_log_pos</code><code>=</code><code>590</code><code>;</code>

<code>    </code><code>master_host                </code><code>#主伺服器位址</code>

<code>    </code><code>master_user                </code><code>#擁有複制權限的使用者</code>

<code>    </code><code>master_password            </code><code>#密碼</code>

<code>    </code><code>master_log_file            </code><code>#從哪個二進制日志開始複制</code>

<code>    </code><code>master_log_pos             </code><code>#從二進制日志的什麼位置開始複制</code>

<code>            </code> 

<code>    </code><code>mysql&gt; start slave;        </code><code>#開啟從伺服器</code>

<code>    </code><code>mysql&gt; show slave status\G;   </code><code>#檢視從伺服器狀态</code>

<code>四、驗證主從:</code>

<code>    </code><code>主伺服器:</code>

<code>        </code><code>mysql&gt; create database db_test;   </code><code>#建立資料庫</code>

<code>    </code><code>從伺服器:</code>

<code>    </code><code>mysql&gt; show databases;         </code><code>#檢視伺服器是否同步</code>

<code>五、主主複制</code>

<code>    </code><code>伺服器A:</code>

<code>        </code><code>[mysqld]                </code><code>#添加内容</code>

<code>    </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>          <code>#啟用二進制日志</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log         </code><code>#啟用中繼日志</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>1</code>             <code>#伺服器id,全局唯一</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>offset</code><code>=</code><code>1</code>         <code>#自增列起始</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>increment</code><code>=</code><code>2</code>      <code>#自增列一次步進(例:1,3,5,7,9...)</code>

<code>    </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.50'</code> <code>identified by </code><code>'123.com'</code><code>;</code>

<code>    </code><code>mysql&gt; change master to master_host</code><code>=</code><code>'192.168.0.50'</code><code>,master_user</code><code>=</code><code>'copy'</code><code>,</code>

<code>          </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000001'</code><code>,master_log_pos</code><code>=</code><code>106</code><code>;</code>

<code>    </code><code>mysql&gt; start slave;   </code>

<code>    </code><code>mysql&gt; show slave status\G;  </code>

<code>                </code> 

<code>    </code><code>伺服器B:              </code>

<code>        </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>10</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>offset</code><code>=</code><code>2</code>         <code>#自增列起始</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>increment</code><code>=</code><code>2</code>      <code>#自增列一次步進(例:2,4,6,8,10...)</code>

<code>        </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.10'</code> <code>identified by </code><code>'123.com'</code><code>; </code>

<code>        </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000003'</code><code>,master_log_pos</code><code>=</code><code>106</code><code>;</code>

<code>六、半同步複制</code>

<code>    </code><code>要想使用半同步複制,必須滿足以下幾個條件:</code>

<code>        </code><code>1.</code> <code>MySQL </code><code>5.5</code><code>及以上版本</code>

<code>    </code><code>2.</code> <code>變量have_dynamic_loading為YES</code>

<code>    </code><code>3.</code> <code>異步複制已經存在</code>

<code>    </code><code>主:</code>

<code>    </code><code>mysql&gt; INSTALL PLUGIN rpl_semi_sync_master SONAME </code><code>'semisync_master.so'</code><code>;     </code><code>#安裝插件</code>

<code>    </code><code>mysql&gt; show plugins;           </code><code>#檢視插件是否安裝成功</code>

<code>    </code><code>mysql&gt; </code><code>SET</code> <code>GLOBAL rpl_semi_sync_master_enabled </code><code>=</code> <code>1</code><code>; </code><code>#啟用半同步</code>

<code>    </code><code>mysql&gt; show status like </code><code>'Rpl_semi_sync_master_status'</code><code>;   </code><code>#檢視是否在運作</code>

<code>    </code><code>從:</code>

<code>    </code><code>mysql&gt; INSTALL PLUGIN rpl_semi_sync_slave SONAME </code><code>'semisync_slave.so'</code><code>;       </code><code>#安裝插件</code>

<code>    </code><code>mysql&gt; show plugins;</code>

<code>    </code><code>mysql&gt; </code><code>SET</code> <code>GLOBAL rpl_semi_sync_slave_enabled </code><code>=</code> <code>1</code><code>;      </code><code>#啟用半同步</code>

<code>    </code><code>mysql&gt; STOP SLAVE          </code><code>#關閉複制線程</code>

<code>    </code><code>mysql&gt; START SLAVE            </code><code>#開啟複制線程</code>

<code>    </code><code>mysql&gt; show status like </code><code>'Rpl_semi_sync_slave_status'</code><code>;    </code><code>#檢視是否在運作</code>

<code>    </code><code>mysql&gt; show variables like </code><code>'%Rpl%'</code><code>;      </code><code>#檢視和半同步相關的伺服器變量</code>

<code>        </code><code>rpl_semi_sync_master_enabled        </code><code>#是否啟用半同步</code>

<code>        </code><code>rpl_semi_sync_master_timeout        </code><code>#等待逾時時間</code>

<code>        </code><code>rpl_semi_sync_master_wait_for_slave_count</code>

<code>            </code><code>#需要等待多少個slave應答,才能傳回給用戶端</code>

<code>    </code><code>mysql&gt; show status like </code><code>'%Rpl_semi%'</code><code>;        </code><code>#半同步狀态</code>

<code>        </code><code>Rpl_semi_sync_master_clients            </code><code>#目前半同步複制從的個數</code>

<code>七、和複制相關的檔案</code>

<code>    </code><code>從節點:</code>

<code>        </code><code>master.info:用于儲存slave連接配接至master時的相關資訊(賬号,密碼,伺服器位址,複制的二進制檔案等)</code>

<code>    </code><code>relay</code><code>-</code><code>log.info:儲存目前slave節點上已經複制到的二進制檔案位置,和relay</code><code>-</code><code>log的位置 </code>

<code>   </code> 

本文轉自  紅塵世間  51CTO部落格,原文連結:http://blog.51cto.com/hongchen99/1936473