標籤:http io os 使用 ar for 檔案 資料 art
資料庫主從複製原理:
資料庫的主從複製就是從master資料庫複寫到slave資料庫,在master與slave之間實現整個複製需要三個線程來完成,其中兩個在slave端一個在master端。
在master端必須開啟binlog功能,因為從資料庫需要獲得主要資料的完整的動作記錄然後再自身上順序的執行日誌中的各種操作。
主要步驟:
1、將slave的io線程連上master,請求獲得指定記錄檔的指定位置之後的動作記錄的內容;
2、master獲得slave的io線程請求後,將請求中讀取到的指定日誌的指定位置之後的內容返回給slave端的io線程,其中包括binlog 的位置以及名稱;
3、slave端的io線程在接收到資訊後,將接收到的日誌內容寫入slave端的relay log檔案的末端,並將binlog的檔案名稱和位置記錄到master-info檔案中,以便下一次請求時向master提出請求;
4、slave的sql線程會檢測到relay log中新增的一些日誌內容並加以解析成為可執行檔query語句在slave端執行,從而達到master與slave端的資料一致性。
配置方法:
MASTER
1、編輯master的設定檔/etc/my.cnf,在[mysqld]中添加以下內容:
log-bin=mysql-bin #開啟mysql的動作記錄功能
binlog_format=mixed #主從複製模式,混合模式(MBR)預設的
binlog_cache_size=4M #設定binlog緩衝大小
max_binlog_size=300M #設定binlog檔案大小,如果不設定,預設是1.1GB
expire_logs_days= 3 #bin-log在主庫儲存的天數,主庫產生的bin-log並不會自動刪除,需要手動刪除
2、在master上對從資料庫進行授權,建立複製使用者的專有賬戶
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘repl’@‘%’ IDENTIFIED BY ‘repl’;
3、對master的資料庫進行備份
在備份master資料時要對master執行鎖表操作:
mysql>FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master; //重新整理資料庫
Query OK, 0 rows affected (0.00 sec)
在不退出該終端的情況下(否則鎖表會失效),再次開啟一個終端直接打包壓縮資料檔案或者使用mysqldump工具來匯出資料:
#mysqldump -uroot -h 127.0.0.1 –opt -R XXXXXX > /data/mysql/backup/XXXXXX.sql
#cd/(www.111cn.net)data/mysql/backup/
4、備份資料庫到從資料庫
#tar -czvf XXXXXX.tar.gz XXXXXX.sql
#scp XXXXXX.tar.gz [email protected]:/data/mysql/backup
可用相同的方法將資料庫匯入到其他的slave機器上,匯入完成後在Master的命令終端上執行一下解鎖命令:
mysql>UNLOCK TABLES;
mysql>show processlist;
mysql>show master statusG; #查看主伺服器的bin-log 和id
5、設定slave主機
編輯slave從資料庫的/etc/my.cnf設定檔,前面的配置參數與主的一樣,都是根據硬體記憶體進行參數調整:
#binlog_format=mixed
#required unique id between 1 and 2^32 – 1
#defaults to 1 if master-host is not set
#but will not function as a master if omitted
server-id=2 //slave 的編號 注意不要重複
read_only=1
binlog_format=mixed
binlog_cache_size=4M //設定binlog緩衝大小
max_binlog_size=300M //設定binlog檔案最大體積
在slave主機上建立一個資料庫,匯入主要資料庫的資料:
mysql>create database XXX;
mysql>use XXX;
mysql>set names utf8;
mysql>source /XXXXXX/XXX.sql
設定從資料庫的主master:
mysql>CHANGE MASTER TO MASTER_HOST=’XX.XX.XX.XX’, //主要資料庫的ip地址
->MASTER_USER=’repl’,
->MASTER_PASSWORD=’repl’,
->MASTER_LOG_FILE=’mysql-bin.000001′, //這雷根據主伺服器的binlog和id設定
->MASTER_LOG_POS=107; //
設定完成後,開啟slave服務:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave statusG; //顯示slave的狀態
從輸出結果中若:Slave_IO_Running和Slave_SQL_Running如果都為Yes時,表示配置成功
線上添加多個從庫:
原理:若直接在主要資料庫上再次添加從庫會執行停止mysql 的服務進行鎖表操作從而影響正常的工作流程,
故線上添加從資料庫可以通過備份舊的從資料庫達到資料庫複寫的目的。再次利用change master 可達到線上添加從資料庫的目的。
from:http://www.111cn.net/database/mysql/59749.htm
mysql資料庫主從複製部署筆記