一、主從複製mysql
主從複製原理:sql
mysql數據庫提供了一種主從備份的機制,其實就是把主數據庫的全部的數據同時寫到備份的數據庫中。實現mysql數據庫的熱備份。數據庫
要想實現雙機的熱備,首先要了解主從數據庫服務器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是做爲從數據庫的數據版本能夠高於主服務器數據庫的版本,可是不能夠低於主服務器的數據庫版本。vim
固然要實現mysql雙機熱備,除了mysql自己自帶的REPLICATION功能能夠實現外,也能夠用Heartbeat這個開源軟件來實現 主從複製的根本操做就是把從主服務器上所執行過的sql在從機上再執行一遍,只要兩個機器的數據庫初態(數據庫結構,數據,配置)是同樣的,那麼咱們開啓主從複製以後就能保證他們一直都是同樣的狀態。這些都是mysql本身實現的,咱們就配置一下就能夠了。bash
從圖中咱們能夠看出來了,主服務器須要作的事情很是簡單的,就只是把執行的sql語句存儲到二進制文件binary-log中,而從服務器須要作的事情比較多,並且還得使用兩個線程進行整個事件的監聽和處理。服務器
咱們的主從複製一共分爲三步:異步
master將改變記錄到二進制日誌(binary log)。這些記錄過程叫作二進制日誌事件,binary log events。 slave將master的binary log events拷貝到它的中繼日誌(relay log)。 slave重作中繼日誌中的事件,將改變應用到本身的數據庫中。 MySQL複製是異步的且串行化的。 基本原則測試
因爲主從複製的一些特性,爲了保證數據一一致,因此這裏有些原則須要遵照:ui
1.一、環境準備:編碼
A服務器(主服務器Master):192.0.0.131
B服務器(從服務器Slave):192.0.0.188
主從服務器的Mysql版本皆爲5.6
這裏須要注意防火牆的3306端口要開放
兩臺服務器數據庫的數據表結構,配置都必須是同樣的。
1.二、主服務器設置:
登錄到主服務器的mysql,並執行以下語句建立用戶,授予權限:
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO slave@"%" IDENTIFIED BY "123456";
複製代碼
修改my.cnf配置文件
log-bin=mysql-bin
server-id=1
複製代碼
說明:
其餘配置(不是必須配置的):
一、binlog-do-db=db_001(主數據庫配置) #指定mysql的binlog日誌記錄哪一個db,配置須要同步的數據庫,能夠配置多個,若是沒有此配置項則同步所有。
二、binlog-ignore-db=mysql(主數據庫配置) #配置不一樣步的數據庫,能夠配置多個。
三、binlog_format = mixed #配置binlog的格式
四、read-only = 0 #配置是否只讀 0表明不僅讀,1表明只讀
五、auto-increament-increment = 10 #用於設定雙主狀況下自增列的ID衝突使用的,主要用來設置自增步長
六、auto-increment-offset = 1 #表示這臺服務器的序號,從1開始,不超過auto-increament-increment
重啓數據庫
systemctl restart mysqld.service
複製代碼
1.三、從服務器設置:
配置my.cnf
server-id=2
replicate-do-db=test
skip-slave-start=true
複製代碼
注意:若是你使用的是虛擬機,並且從機是從master主機克隆出來的,那麼你就須要進行這一步的操做了。
進入咱們mysql的數據庫目錄下:
#這是默認的地址,根據本身配置的datadir便可
cd /var/lib/mysql
vim auto.cnf
複製代碼
修改裏面的uuid爲一個不一樣的便可。
重啓數據庫
systemctl restart mysqld.service
複製代碼
1.四、配置從服務器認主
獲取binlog的信息
咱們先到主(master)服務器上獲取binlog的信息,在mysql的命令界面輸入:
show master status;
複製代碼
這裏展現的就是咱們當前主服務器使用的binlog的文件名,其中position是文件中偏移量,咱們以後配置slave須要用到這些信息,這個文件在每次服務器狀態變化後都不一樣
進入最關鍵的一步了,在進入從服務器mysql操做界面後,輸入以下指令:
stop slave; //先停步slave服務線程,這個是很重要的,若是不這樣作會形成如下操做不成功,第一次設計主從的話忽略。
複製代碼
change master to
master_host='192.0.0.131',
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000002',
master_log_pos=1472;
複製代碼
這裏user和password就是咱們第一步在主服務器上建立的用戶名和密碼,而後MASTER_LOG_FILE 就是咱們上一步查看到的master在使用的binlog文件(這個文件在每次主服務器狀態變化後都不一樣),MASTER_LOG_POS 就是binlog的偏移量,用於同步掃描使用。master_log_file對應File, master_log_pos對應Position。Mysql 5.x以上版本已經不支持在配置文件中指定主服務器相關選項。
執行完拋警告的話不要緊,沒有異常就能夠。
開啓從服務器slave線程
start slave;
複製代碼
查看(Slave)狀態
show slave status\G;
複製代碼
看到圖中的兩個yes,就表示咱們的從服務器已經在徹底運行了。
如今咱們能夠在主服務器的數據庫上作一個修改數據看看是否同步到從服務器的數據庫上來證實可用性。
1.五、主從驗證
由於以前數據庫的數據都是同樣的,如今就都新建個test 庫,而且在test 庫新建表 user_test.
這裏須要注意兩個數據庫都要執行
#建立新庫
CREATE DATABASE test;
#指定編碼
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
#建立新表
create table user_test( id int comment'ID',name VARCHAR(20) comment'名稱', create_time timestamp DEFAULT now() comment'建立時間' );
複製代碼
準備條件完成,進入測試
主庫查詢:
從庫查詢:
如今咱們在主庫手動插入一條數據
use test;
insert INTO user_test value(1,"張三",NOW());
複製代碼
直接查詢從庫看有沒有數據同步
結果很明顯,數據已經同步,說明咱們的主從複製的配置Ok了。
二、雙機熱備
實現雙機熱備,原理其實就是作兩個機器的互相主從,咱們把上述步驟主從對調,而後作一遍就能實現了雙機熱備了
仍是使用上面的兩臺服務器,具體步驟就不寫了,直接貼一下兩個服務器的配置文件 my.cnf
服務器A配置:
log-bin=mysql-bin
server-id=1
# 雙機熱備須要添加
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
複製代碼
服務器B配置
log-bin=mysql-bin
server-id=2
# 雙機熱備須要添加
log-slave-updates
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
複製代碼
開始測試---------------------------------------------------->
服務器A 刪除一條,查看服務器B的數據
服務器B 增長一條,刪除一條,查看服務器A的數據
結果能夠看到互爲主從的雙機熱備也成功了,以上只是一個實現思路,具體的配置還得根據本身的實際狀況,下面貼一些會用到的配置參數:
Server-id:ID值惟一的標識了複製羣集中的主從服務器,所以它們必須各不相同。Master_id必須爲1到232-1之間的一個正整數值,slave_id值必須爲2到232-1之間的一個正整數值。
Log-bin:表示打開binlog,打開該選項才能夠經過I/O寫到Slave的relay-log,也是能夠進行replication的前提。
Binlog-do-db:表示須要記錄二進制日誌的數據庫。若是有多個數據能夠用逗號分隔,或者使用多個binlog-do-dg選項。
Binglog-ingore-db:表示不須要記錄二進制日誌的數據庫,若是有多個數據庫可用逗號分隔,或者使用多binglog-ignore-db選項。
Replicate-do-db(從數據庫配置):表示須要同步的數據庫,若是有多個數據可用逗號分隔,或者使用多個replicate-do-db選項。
Replicate-ignore-db(從數據庫配置):表示不須要同步的數據庫,若是有多個數據庫可用逗號分隔,或者使用多個replicate-ignore-db選項。
Master-connect-retry:master-connect-retry=n表示從服務器與主服務器的鏈接沒有成功,則等待n秒(s)後再進行管理方式(默認設置是60s)。若是從服務器存在mater.info文件,它將忽略些選項。
Log-slave-updates:配置從庫上的更新操做是否寫入二進制文件,若是這臺從庫,還要作其餘從庫的主庫,那麼就須要打這個參數,以便從庫的從庫可以進行日誌同步。
skip-slave-start 從機服務器重啓後slave 不會自動開始,要手動執行,防止出錯