MYSQL雙主全庫同步復制的示例詳解

環境:

A、B兩臺服務器分別安裝mysql-5.7.18服務端,配置成互為主從同步。

linux系統版本為CentOS7

A服務器ip:192.168.1.7?? 主機名:test1

B服務器ip:192.168.1.8?? 主機名:test2

(同一局域網下)

一、準備

  1.修改主機名

   命令:hostnamectl? set-hostname? xxx

   (查看主機名 命令:hostname)

  2.關閉防火墻

   1)查看防火墻狀態

    命令:firewall-cmd? –state

    結果:running

   2)防火墻是運行狀態,先關閉防火墻服務

    命令:systemctl? mask? firewalld

   3)關閉防火墻

    命令:systemctl? stop? firewalld

   4)檢查防火墻狀態

    命令:firewall-cmd? –state

    結果:not? running

  3.關閉selinux策略

   1)查看selinux運行狀態

    命令:getenforce

    結果:Enforcing

    MYSQL雙主全庫同步復制的示例詳解

   2)永久性關閉(需重啟電腦),編輯selinux文件vi? /etc/sysconfig/selinux修改SELINUX=disabled

    MYSQL雙主全庫同步復制的示例詳解

   3)為關閉狀態

    MYSQL雙主全庫同步復制的示例詳解

二、配置主服務器(master)從服務器(slave)

  1.打開A服務器的my.cnf文件vi? /etc/my.cnf,在文件的[mysqld]下添加如下內容

   server-id=1?????? #必須與其他服務器不同,且必須為1~232之間的正整數值

log-bin=mysql-bin     log-bin-index=mysql-bin

   MYSQL雙主全庫同步復制的示例詳解

   在B服務器my.cnf文件中的[mysqld]下添加上圖內容,只更改server-id值即可。

server-id=2????     log-bin=mysql-bin     log-bin-index=mysql-bin

  2.在A服務器中的mysql安裝路徑下(rpm安裝路徑為/var/lib/mysql)創建全庫備份文件all.sql。

   創建命令:

touch??/var/lib/mysql/all.sql

   備份命令:

[root@test1?mysql]#?mysqldump?-uroot?-p123?--all-databases?>?/var/lib/mysql/all.sql

   把all.sql文件拷貝到B服務器中的某個路徑下(以/var/lib/mysql路徑為例)進行恢復。

   恢復命令:

[root@test2?/]#?mysql?-uroot?-p123?<p>  3.在A、B服務器的mysql中創建用戶用于同步。</p><p>   創建用戶:</p><pre class="brush:sql;toolbar:false">mysql&gt;?create?user?'tongbu'@'%'?identified?by?'tongbu';

   授權:

mysql&gt;?grant?all?on?*.*?to?'tongbu'@'%';

   刪除用戶:

mysql&gt;?drop?user?'用戶名'@'%';

?   A、B服務器用戶創建完成后,測試用戶相互是否可以遠程登陸mysql。

[root@test1?/]#?mysql?-utongbu?-ptongbu?-h192.168.1.8     [root@test2?/]#?mysql?-utongbu?-ptongbu?-h192.168.1.7

   測試無問題后重啟A、B服務器中的mysql服務:[root@test /]# service mysqld restart

  4.設置A為主服務器,B為從服務器。

   1)查看A服務器mysql中的二進制日志名和偏移量值

    命令:mysql> show master statusG

    如下圖

    MYSQL雙主全庫同步復制的示例詳解

   2)在B服務器中配置連接服務器

mysql&gt;?stop?slave;      mysql&gt;?change?master?to        -&gt;?master_host='192.168.1.7',        -&gt;?master_user='tongbu',        -&gt;?master_password='tongbu',        -&gt;?master_log_file='mysql-bin.000024',        -&gt;?master_log_pos=154;      mysql&gt;?start?slave;

    mysql> show slave statusG 輸入此命令查看Slave_IO_Running和Slave_SQL_Running的值是否為Yes,如下圖

    MYSQL雙主全庫同步復制的示例詳解

  5.設置B為主服務器,A為從服務器。

   1)查看B服務器mysql中的二進制日志名和偏移量

    命令:mysql> show master statusG

    MYSQL雙主全庫同步復制的示例詳解

   2)在A服務器中配置連接服務器。

mysql&gt;?stop?slave;      mysql&gt;?change?master?to        -&gt;?master_host='192.168.1.8',        -&gt;?master_user='tongbu',        -&gt;?master_password='tongbu',        -&gt;?master_log_file='mysql-bin.000027',        -&gt;?master_log_pos=154;      mysql&gt;?start?slave;      mysql&gt;?show?slave?statusG?查看Slave_IO_Running和Slave_SQL_Running的值是否為Yes

?

至此兩臺mysql數據庫互為主從同步配置完成。

錯誤排查:

1.Slave_IO_Running狀態錯誤

 檢查MySQL>?show?slave?statusG;時,Slave_IO_Running狀態為Connecting錯誤,出現的原因主要分為三種,需要檢查配置:

 1)網絡不通??

 2)賬戶權限配置錯誤,如密碼不對、賬號錯誤、地址錯誤??

 3)二進制文件位置不對

2.主備數據沖突或不同造成的異常

 主鍵沖突、表已存在等錯誤代碼如1062,1032,1060等,可以在mysql配置文件指定略過此類異常并繼續下條sql同步,這樣可以避免很多主從同步的異常中斷。打開/etc/ mysql下的my.cnf文件,在[mysqld]后添加如下代碼:

slave-skip-errors?=?1062,1032,1060

3. 跳過異常恢復同步

mysql?&gt;slave?stop;   mysql?&gt;SET?GLOBAL?sql_slave_skip_counter?=?1;   mysql?&gt;slave?start;

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享