mysql主從復制搭建


原理:

MySQL主從復制涉及到三個線程,一個運行在主節點(log dump thread),其余兩個(I/O thread, SQL thread)運行在從節點,如下圖所示:

l 主節點 binary log dump 線程

當從節點連接主節點時,主節點會創建一個log dump 線程,用於發送bin-log的內容。在讀取bin-log中的操作時,此線程會對主節點上的bin-log加鎖,當讀取完成,甚至在發動給從節點之前,鎖會被釋放。

l 從節點I/O線程

當從節點上執行`start slave`命令之后,從節點會創建一個I/O線程用來連接主節點,請求主庫中更新的bin-log。I/O線程接收到主節點binlog dump 進程發來的更新之后,保存在本地relay-log中。

l 從節點SQL線程

SQL線程負責讀取relay log中的內容,解析成具體的操作並執行,最終保證主從數據的一致性。

對於每一個主從連接,都需要三個進程來完成。當主節點有多個從節點時,主節點會為每一個當前連接的從節點建一個binary log dump 進程,而每個從節點都有自己的I/O進程,SQL進程。從節點用兩個線程將從主庫拉取更新和執行分成獨立的任務,這樣在執行同步數據任務的時候,不會降低讀操作的性能。比如,如果從節點沒有運行,此時I/O進程可以很快從主節點獲取更新,盡管SQL進程還沒有執行。如果在SQL進程執行之前從節點服務停止,至少I/O進程已經從主節點拉取到了最新的變更並且保存在本地relay日志中,當服務再次起來之后,就可以完成數據的同步。

開始之前先交代下開發環境:

window10 家庭版系統

docker 執行 mysql:5.6

映射到本地的 3307和3306兩個端口,其中 3307是master 數據庫服務器、3306是slave 數據庫服務器

數據庫主服務器操作:

1.1創建用戶並授權

// 創建用戶
create user "slave_admin"@"%" identified by "123456";
// 用戶授權
grant replication slave on *.* to "slave_admin"@"192.168.99.100";
// 刷新權限
flush privileges;

1.2修改配置文件(/etc/mysql/mysql.conf.d)

[mysqld]
log-bin=mysql-bin
server-id=3307

1.3重啟數據庫查看主數據庫的當前狀態

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

從數據庫服務器操作:

2.1修改配置文件(/etc/mysql/mysql.conf.d)並重啟mysql

server-id=3306

2.2設置從服務器的信息並啟動

mysql> change master to
    -> master_host = "192.168.99.100:3307",
    -> master_port = 3307,
    -> master_user = "slave_admin",
    -> master_password = "123456",
    -> master_log_file = "mysql-bin.000001",
    -> master_log_pos = 120;
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

2.3查看是否配置成功

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 192.168.99.100:3307
                  Master_User: slave_admin
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 120
               Relay_Log_File: mysqld-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes  //主要查看這兩個指標狀態
            Slave_SQL_Running: Yes    //主要查看這兩個指標狀態
 
        

到這里主從配置就配置完了!

可能遇到的問題:

在2.3那一步的時候不一定就能夠正好 “Slave_IO_Running” 和 “Slave_SQL_Running” 的值都是 YES 這個時候可以這么檢查下

 第一種 當 “Slave_IO_Running” 的值為 Connecting 時是因為slave數據庫服務器去訪問 master數據庫服務器的 bin-log 時失敗導致的,這時候應該檢查 2.2中設置的參數是不是正確,如果參數無誤的話就要檢測下在 slave服務器連接 master數據庫是否能夠成功;

第二種 當 “Slave_SQL_Running” 的值為 No 時可以執行如下命令

 

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

 

或者重新執行2.2這一步!其他的問題我配置的過程中就沒有碰到啦~~~

 

 

 

 

 

                                                            ——部分參考網絡文件,如有侵權請聯系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM