爲了實現讀寫分離,通常都須要先設置好mysql的主從結構,網上現有的mysql配置大都基於低版本,在5.5以上版本沒法配置成功,因此參考了官方文檔,寫了這篇筆記。
備註:設置主從結構的狀況下,在修改主庫(master)數據的時候會自動同步修改到從庫(slave)。
因此要求初始同步的時候數據一致,若是已有數據的狀況下,
建議先備份主庫數據,而後清空主庫和從庫數據,當主從結構設置完成後,再從新將數據導入到主庫。
#若是要求線上系統不能停機的話,建議參考下面的文檔進行不停機的數據同步。
https://dev.mysql.com/doc/refman/5.6/en/replication-howto-existingdata.html
下面是操做步驟,假設是兩個空數據庫,不須要作數據從主庫(簡稱:master)到從庫(簡稱:slave)的熱同步
1.數據同步須要依賴bin格式的日誌和每一個服務器惟一的serever id,因此要在master機上作以下配置並重啓(/etc/mysql/my.cnf,添加到[mysqld]部分)
log-bin=mysql-bin
server-id=1
log-bin=log
binlog-do-db=dbname#須要同步的數據庫名
binlog-ignore-db=information_schema#忽略同步的數據庫名
binlog-ignore-db=mysql#忽略同步的數據庫名
2.Slave從庫也須要設置server id,作以下配置並重啓(/etc/mysql/my.cnf,添加到[mysqld]部分)
[mysqld]
server-id=2
replicate-ignore-db=mysql#忽略同步的數據庫名
replicate-ignore-db=information_schema#忽略同步的數據庫名
replicate-do-db=dbname#須要同步的數據庫名
3.在master上使用下面的命令添加用來同步的用戶並賦予權限:
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '1234';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
mysql> flush privileges;
4.使用命令(SHOW MASTER STATUS;)查看master的狀況
File |
Position |
BinLog_Do_DB |
BinLog_Ignore_DB |
log.000009 |
14002 |
rtm_bs |
information_schema,mysql |
#若是這條命令沒有出現內容的話,說明master配置有問題
5.在Slave服務器上執行下面的命令。
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.115',#master庫的IP
mysql> MASTER_USER='slave', #master庫的登錄用戶
mysql> MASTER_PASSWORD='1234', #master庫的登錄用戶密碼
mysql> MASTER_LOG_FILE='log.000009', #master庫的File部分顯示內容
mysql> MASTER_LOG_POS=14002; #master庫的Position部分顯示內容
mysql> START SLAVE;
#若是顯示出Slave的具體信息的話,說明配置成功了。
6.嘗試在主庫修改數據,正常的話,在從庫就能看到數據變化了。
7.通常從庫會要求只讀,能夠建立一個只讀的用戶slave_user對外提供訪問。
GRANT Select ON *.* TO slave_user@"%" IDENTIFIED BY "12354";
或者執行下面的命令將數據庫置爲只讀
mysql> set global read_only=1;html
當須要將salve庫從只讀狀態變爲讀寫狀態,執行下面的命令mysql
mysql> set global read_only=0;