MySQL主從複製結構是基於mysql bin-log日誌基礎上,從庫通過開啟IO進程收到主庫的bin-log日誌增量
資訊,並儲存到本地relay log,而後再通過開啟MYSQL進程從relay log上擷取的增量資訊並翻譯成SQL語
句後寫到從資料庫。
主從複製結構,實際上可以實現兩個功能:
1.從庫充當主庫的Database Backup執行個體
2.讀寫分離,主庫負責正常讀寫資料,從庫只負責讀資料
實際生產環境,因為很多應用實際讀資料庫的次數遠大於寫資料庫的次數,所以在項目開發初期,編寫
程式時做一個判斷,對所有讀的操作全部推到從庫,若從庫無法擷取資料,則再向主庫擷取資料,從而
在一定意義上實現讀寫分離,緩解主庫的IO壓力。
所以生產環境下推薦使用這種架構。
系統內容:centos6.3 x64
資料庫: mysql-5.6.10
mysql master:192.168.100.90
mysql slave:192.168.100.91
MySQL主從複製結構是基於mysql bin-log日誌基礎上,從庫通過開啟IO進程收到主庫的bin-log日誌增量
資訊,並儲存到本地relay log,而後再通過開啟MYSQL進程從relay log上擷取的增量資訊並翻譯成SQL語
句後寫到從資料庫。
主從複製結構,實際上可以實現兩個功能:
1.從庫充當主庫的Database Backup執行個體
2.讀寫分離,主庫負責正常讀寫資料,從庫只負責讀資料
實際生產環境,因為很多應用實際讀資料庫的次數遠大於寫資料庫的次數,所以在項目開發初期,編寫
程式時做一個判斷,對所有讀的操作全部推到從庫,若從庫無法擷取資料,則再向主庫擷取資料,從而
在一定意義上實現讀寫分離,緩解主庫的IO壓力。
所以生產環境下推薦使用這種架構。
系統內容:centos6.3 x64
資料庫: mysql-5.6.10
mysql master:192.168.100.90
mysql slave:192.168.100.91
一.部署環境:
1.關閉iptables和SELINUX
# service iptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
2.安裝配置mysql傳送門:http://www.showerlee.com/archives/6
二.主mysql配置:(mysql master)
修改mysql設定檔:
# vi /etc/my.cnf
添加:
-----------------
# Replication Master Server
# bin日誌路徑
log-bin = /usr/local/mysql/log/bin.log
# 伺服器ID號
server-id = 1
# 忽略mysql系統庫複製
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
------------
重啟服務
# service mysqld restart
登入mysql後台:
# mysql -u root -p123456
查看此刻登入帳號:
> select user();
在master為slave添加同步帳號:
> grant replication slave on *.* to 'slave'@'192.168.100.91' identified by '123456';
查看建立的使用者:
> select user.host from mysql.user;
查看許可權:
> show grants for 'slave'@'192.168.100.91';
mysql鎖表唯讀(其他賬戶登入mysql後無法進行寫表操作,防止備份資料庫後,主mysql表更新,導致和
從資料庫內容不一致)
> flush tables with read lock;
查看鎖表倒計時時間:
> show variables like '%timeout%';
------------------------
....
wait_timeout | 28800
------------------------
將master的資料庫表全部備份匯出,並傳送到slave伺服器上。
# /usr/local/mysql/bin/mysqldump -u root -p123456 --opt --flush-logs --all-database >
/root/allbak.sql
# cd ~
# scp allbak.sql root@192.168.100.91:/root
查看mysql位移量(資料庫如果有寫操作,位移值會遞增)
# mysql -u root -p123456 -e "show master status"
----------------------
+------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------+----------+--------------+------------------+-------------------+
| bin.000009 | 120 | | | |
+------------+----------+--------------+------------------+-------------------+
----------------------
保證FILE列和Position列與從庫配置一致:
三.從mysql配置(mysql slave)
修改mysql設定檔:
# vi /etc/my.cnf
添加:
--------------------
# Replication Slave Server
# bin日誌路徑(無需開bin-log日誌)
#log-bin = /usr/local/mysql/log/bin.log
server-id=2
# 唯讀:
read-only
# 忽略mysql系統庫複製
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
---------------------
重啟服務
# service mysqld restart
恢複server的資料庫到slave
#/usr/local/mysql/bin/mysql -u root -p123456 < /root/allbak.sql