天天看點

Mysql資料庫之主從同步

介紹

Mysql主從同步,是為了實作資料自動同步服務的服務結構,可以解決資料庫單點故障等問題.主從同步結構中主要有兩種角色:主伺服器和從伺服器;

當主伺服器修改資料的時候,從伺服器可以自動的擷取主伺服器中的資料做到同步更新資料.

其工作原理是,主伺服器啟用binlog日志(記錄了除查詢之外的所有sql指令),從伺服器的IO線程複制主伺服器binlog日志檔案裡的sql指令到本機的relay-log(中繼日志)檔案裡,然後從伺服器的sql線程執行本機的relay-log檔案裡的sql語句,實作和主伺服器資料一緻.

實驗環境

三台資料庫伺服器,并且安裝mysql;

主伺服器:192.168.4.10

從伺服器:192.168.4.20

用戶端:192.168.4.30

思路流程

配置主伺服器

啟用binlog日志,授權和從伺服器的連接配接使用者,檢視日志資訊.

配置從伺服器

設定server_id

確定與主伺服器資料一緻

指定主庫資訊

啟動slave程式

檢視狀态資訊

最後在主伺服器授權用戶端登入的使用者,從伺服器會自動同步授權使用者資訊,用戶端通路任意伺服器都可以看到同樣的資料.

配置主伺服器

修改主配置檔案啟用binlog日志并重新開機服務

vim /etc/my.cnf
[mysqld]
log-bin=master10			//啟用binlog日志 指定檔案名
server_id=10                        //指定伺服器ID号一般用主機号 不能重複
`systemctl restart mysqld                       //重新開機服務
           

連接配接到資料庫服務授權和從伺服器連接配接使用者

grant replication slave on *.* to repuser@"%" identified by "123qqq...A";
//使用者名可以自己定義,登入位址必須保證從伺服器可以連接配接,權限為replication slave
           

檢視日志資訊

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

           

配置從伺服器

設定server_id

vim /etc/my.cnf
server_id=20
           

重新開機服務

systemctl restart mysqld
           

使用管理者連接配接到資料庫,指定主庫資訊

mysql> change master to master_host="192.168.4.10",     //主伺服器ip
    -> master_user="repuser",												//授權使用者
    -> master_password="123qqq...A",							//授權使用者密碼
    -> master_log_file="master10.000001",						//主庫的binlog檔案
    -> master_log_pos=154;					           //偏移量

           

開啟slave程式

mysql>start slave;
           

檢視狀态資訊

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.50
                  Master_User: repuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master10.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql51-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master10.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes             //確定io和sql線程是yes,如果是no檢視下面的報錯資訊
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 528
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 10
                  Master_UUID: 42f749f0-c9fb-11e9-9910-5254009431e1
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp:    //報錯資訊
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 

           

最後在主伺服器授權登入使用者,修改主伺服器資訊,使用用戶端連接配接10或者20資料庫服務,均可以看到相同的資訊.

mysql -uroot -p192.168.4.10/20

注意事項:

在配置主從服務時,一定要保證主伺服器和從伺服器的初始資料是一樣的!!!

如果從伺服器指定主庫資訊時打錯了,再次修改後隻修改錯誤的那一條即可:change master to master...;

結構類型

上面的配置是一主一從結構,主伺服器可同步資訊到從伺服器,從伺服器不可同步資訊到主伺服器是單向複制的,除此以外還有一主多從結構,主從從結構和互為主從結構.

 

 一主多從:顧名思義就是一台主伺服器擁有多台從伺服器,其配置同上,可以在添加一台伺服器繼續做出10主機的從伺服器,其優點是解決了從伺服器單點故障的問題.

主從從結構:假設有三台資料庫伺服器,192.168.4.51,192.168.4.52,192.168.4.53,主從從結構就是51是52的主伺服器,52是51的從伺服器并且52還是53的主伺服器,53是52的從伺服器.是以52既是主伺服器又是從伺服器,在配置時同樣要授權和從伺服器連接配接的使用者,并且在配置檔案中開啟允許級聯複制

vim /etc/my.cnf
log-bin=master52
server_id=52
log_slave_updates    //允許級聯複制
systemctl restart mysqld
           

其他配置按照主從配置即可,在52上主從配置都要設定,因為它是51的從需要指定51的主庫資訊,同時也要開啟binlog因為也是53的主.

此結構解決了主伺服器單點故障的問題.

互為主從:兩台資料庫伺服器既是對方的主,又是對方的從,配置同上,都開啟binlog日志,也都要指定對方的資訊.歡迎提問....

繼續閱讀