mysql主從複製功能是很是重要的,讀操做從數據庫,寫操做在主數據庫,主從數據庫的數據庫同步是使用mysql的主從複製功能實現的。mysql
mysql主從複製原理是基於binary log實現的,主數據庫將本數據庫的全部操做信息寫入binary log文件中,從數據庫有個io線程將主數據庫的binary log文件中的信息寫入從數據庫中的relay log(中繼日誌)文件中,而後從數據庫主要讀取relay log文件中的信息,進行數據同步。msyql主從複製是基於偏移點(接入點)實現的,因此在搭建完成主從複製後,搭建前主數據庫的信息不會同步到從數據庫中。sql
binary 記錄信息有三種格式:數據庫
statement格式: 記錄主數據庫的全部sql到binary log文件中,從數據庫從中繼日誌中獲取到,而後更新進行數據同步,這個格式有個問題是:如sql中有now()函數,由於同步數據之間有延遲,就會產生數據不一致問題。函數
row格式:從數據庫直接執行主數據庫的sql會致使數據不一致,那麼久直接將主數據庫變動的行信息直接寫入binary log中,從數據而後同步,這個格式也有一個問題:若是主數據庫對一張表的全部行進行update操做,一條sql語句就執行了,若是使用statement格式將很是方便,row格式會將表中的全部行所有寫入binary log文件中,而後同步,效率很是低。線程
mixed格式:採用statement和row的混合模式,若是sql語句中帶有執行時候數據差異的信息時候就用row格式複製,若是使用是普通的sql語句就使用statement格式。該格式也有缺點當使用主機名變量的時候不會同步(@@host name)。rest
192.168.124.101 主機爲主數據庫,192.168.124.102 主機爲從數據庫,均安裝了msyql.日誌
主數據庫配置/etc/my.cnf:code
server-id=1 #惟一id log-bin=mysql-bin #啓用二進制日誌 binlog-ignore-db=mysql #設置不要同步的數據庫, binlog-ignore-db=information-schema #mysql系統數據庫設置爲不一樣步 binlog-do-db=datasource1 #須要同步的數據庫 binlog-do-db=datasource2 binlog-format=MIXED #設置binlog同步的格式 statement row mixed
從數據庫配置/etc/my.cnf:orm
server-id=2 relay-log=mysql-relay
修改完了後,須要重啓systemctl restart mysqld;
systemctl status mysqld;server
在主數據庫中建立用於主從複製的用戶:而後能夠show master status;查看狀態
GRANT REPLICATION SLAVE ON *.* TO 'slaveDB'@'%' IDENTIFIED BY '123456'
在從數據庫上指定要複製的主數據庫信息:
CHANGE MASTER to MASTER_HOST='192.168.124.101', MASTER_USER='slaveDB', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=154; #MASTER_LOG_FILE(日誌文件名)和MASER_LOG_POS(偏移點)信息在主數據庫show master status;命令能夠獲取到。 若是從數據庫對別的主數據庫進行過主從複製,從數據庫須要 stop slave; 而後reset master; 而後設置主數據庫信息; 設置完畢後啓動主從複製功能: start slave; 查看從數據庫信息: show slave status\G; 主要有倆列:SLAVE_IO_RUNNING:,SLAVE_SQL_RUNNING,若是都爲yes那麼主從複製完成了,若是有no,那麼下面會有相關日誌錯誤信息。