標籤:延遲 運行 update rest tle 大於等於 ges 部分 check
Mysql主從複製
MySQL內建的複製功能是構建大型,高效能應用程式的基礎。將Mysql的資料分布到多個系統上去,這種分布的機制,是通過將Mysql的某一台主機的資料複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位記錄檔,並維護檔案的一個索引以追蹤記錄檔迴圈。這些日誌可以記錄發送到從伺服器的更新。當一個從伺服器串連主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。
請注意當你進行複製時,所有對複製中的表的更新必須在主伺服器上進行。否則,你必須要小心,以避免使用者對主伺服器上的表進行的更新與對從伺服器上的表所進行的更新之間的衝突。
複製的原理:
(1) master將改變記錄到二進位日誌(binary log)中(這些記錄叫做二進位日誌事件,binary log events);
(2) slave將master的binary log events拷貝到它的中繼日誌(relay log);
(3) slave重做中繼日誌中的事件,將更改應用到自己的資料上。
看到了吧. 一台主的. n個從的. 一主多從,而不能一從多主.注意了哈. 那咱們就以 1從1主為例. 下面先配主機
複製配置
:
有兩台MySQL資料庫伺服器Master和slave,Master為主伺服器,slave為從伺服器,初始狀態時,Master和slave中的資料資訊相同,當Master中的資料發生變化時,slave也跟著發生相應的變化,使得master和slave的資料資訊同步,達到備份的目的。
步驟
1:倆台機器都關閉防火牆
service iptables stop
2、修改主伺服器
先尋找my.cnf的位置 whereis my.cnf
#vi /etc/my.cnf
[mysqld]
#log-bin是指開啟二進位動作記錄
log-bin=mysql-bin //[必須]啟用二進位日誌
server-id=222 (不能一樣) //[必須]伺服器唯一ID,預設是1,可以理解為IP.所以說以ip的最後三位為id比較合適
#需要同步的庫. 不寫同步所有
binlog-do-db = 需要同步的資料庫,多個用逗號隔開
3.修改從伺服器
#vi /etc/my.cnf
[mysqld]
server-id=222
relay_log=mysql-relay-bin //## 開啟中繼日誌
log_slave_updates=1 //開啟中繼日誌的複製事件
4、重啟兩台伺服器的mysql
service mysqld restart
5、在主伺服器上給從伺服器建立帳戶
GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "lisi";
6、登入主伺服器的mysql,查詢master的狀態
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 308 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
註:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化
7、配置從伺服器Slave:
首先先找到從伺服器的位置然後:
mysql -uroot -p
mysql>change master to master_host=‘101.201.239.158‘,(linux的ip)
master_user=‘zhangsan‘,(建立的使用者名稱)
master_password=‘lisi‘,(建立的列表)
master_log_file=‘mysql-bin.000011‘,(此數為:上邊的mysql-bin.000004)
master_log_pos=319; //注意不要斷開,308數字前
8、開啟主從
Mysql>start slave;
9、檢查從伺服器複製功能狀態:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主伺服器地址
Master_User: mysync //授權帳戶名稱,盡量避免使用root
Master_Port: 3306 //資料庫連接埠,部分版本沒有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步讀取二進位日誌的位置,大於等於Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
......
註:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
面試題
1主從mysql版本不一致的時候應該怎麼辦?
答:在高版本的mysql設定檔加
binlog-checksum = none
2 主從延遲的問題
答
1 提高從資料庫配置的處理能力
2 mysql-proxy代理中介軟體
3 修改設定檔 sync-binlog = 1
Mysql主從複製