介紹
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日志,也都要指定對方的資訊.歡迎提問....