實質就是經過二進制的sql文件實現主從複製mysql
MySQL的主從複製是MySQL自己自帶的一個功能,不須要額外的第三方軟件就能夠實現,其複製功能並非copy文件來實現的,而是藉助binlog日誌文件裏面的SQL命令實現的主從複製,能夠理解爲我再Master端執行了一條SQL命令,那麼在Salve端一樣會執行一遍,從而達到主從複製的效果。 linux
從庫生成兩個線程,一個I/O線程,一個SQL線程; sql
i/o線程去請求主庫 的binlog,並將獲得的binlog日誌寫到relay log(中繼日誌) 文件中;數據庫
主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog; vim
SQL 線程,會讀取relay log文件中的日誌,並解析成具體操做,來實現主從的操做一致,而最終數據一致;服務器
故障切換,數據備份,讀寫分離,集羣高可用等session
例:ide
準備兩臺服務器 測試
192.168.1.101(master主Mysql))spa
192.168.1.102(slave從Mysql)
vim /etc/my.cnf server_id=101 #服務器id log-bin=mysql-bin #開啓日誌文件
而後 重啓mysql服務
service mysqld restart
GRANT REPLICATION SLAVE ON *.* to 'mastersync'@'%' identified by 'mysql_123456';#mastersync爲自定義受權用戶名 mastersync爲自定義受權密碼
而後 navicat鏈接主mysql
show master status;
查詢主mysql的狀態 file爲日誌文件名 position爲日誌位置行
配置文件位置:
window 上 能夠登陸到mysql中 使用 show variables like '%data%' 先找到data 存放路徑, 通常my.ini 在 data文件的上一級
linux 上 通常在/etc/my.cnf 這個位置
vi /etc/my.cnf server_id=102 log-bin=mysql-bin binlog_do_db=site_test #要同步的數據庫
#先中止同步 stop slave #從節點配置訪問主節點相關信息 帳號密碼,主日誌文件及日誌同步開始行(上面第二步查詢主mysql的狀態) change master to master_host='192.168.1.101',master_user='mastersync',master_password='mysql_123456', master_log_file='mysql-bin.000001',master_log_pos=13693; #啓動開始同步 start slave
而後查看從mysql同步狀態
show slave status;
能夠看到
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表示同步成功
最後測試 主mysql數據庫添加表添加數據 從mysql數據庫刷新對應有相應的信息
主從複製配置成功
附:如何考慮數據庫集羣時主鍵自增惟一性?設置步長
show variables like 'auto_incre%'; -- 會話的自增屬性值,同show session variables like 'auto_incre%';#修改會話自增的步長SET @@auto_increment_increment=2;#修改會話起始值SET @@auto_increment_offset=2;show global variables like 'auto_incre%';#修改全局自增的步長SET global auto_increment_increment=2;#修改全局起始值SET global auto_increment_offset=1;