MySQL多實例,主從同步(3)—— 主從複製配置

主從複製配置mysql

 

 主庫,稱爲Master 從庫稱爲Slave。sql

 

1. 主庫上執行操做數據庫

 

(1) 設置server-id 值並開啓binlog設置ide

  根據前文MySQL的同步原理,咱們知道複製的關鍵因素就是binlog日誌。spa

執行 vi /data/3306/my.cnf 編輯my.cnf配置文件,按以下兩個參數內容修改:命令行

[mysqld]
server-id =1
log-bin=/data/3306/mysql-bin

檢查配置後的結果線程

grep -E "server-id|log-bin" /data/3306/my.cnf
log-bin=/data/3306/mysql-bin  
server-id=1

 

(2) 創建用於同步的帳號rep日誌

 

mysql -uroot -p'' -S /data/3306/mysql.sock
grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'password';

 

(3) 鎖表只讀(當前窗口不要關閉)server

生產環境時,操做主從複製,須要申請停機事件,鎖表會影響業務。事件

flush tables with read lock;
interactive_timeout=60
wait_timeout=60

 

(4) 查看主庫狀態

 

查看主庫狀態,即當前日誌文件名和二進制偏移量

show master status 命令顯示的信息要記錄在案,後面的從庫複製時是從這個位置開始同步。

 

(5)導出數據庫數據

 

單開新窗口,導出數據庫數據,若是數據量比較大,能夠停庫直接打包數據文件遷移。

mkdir /server/backup/ -p
mysqldump -uroot -p'password' -S /data/3306/mysql.sock -A -B |gzip >/server/backup/mysql_bak.${date +%F}.sql.gz
ls -l /server/backup/mysql_bak.${date +%F}.sql.gz

 

導爲了確保導庫期間,數據庫沒有數據插入,能夠再檢查下主庫狀態信息

mysql -u root -p'password' -S /data/3306/mysql.sock -e "show master status"

 

導庫後,解鎖主庫,恢復可寫:

unlock tables;

 

(6) 把主庫備份的MySQL數據遷移到從庫

 

這不經常使用命令有scp,rsync等,相關命令前面的課程已詳細講解過了,這裏就很少描述了。

本文講解的是單數據庫多實例主從配置,所以,數據在一臺機器上,查看下數據

 

2 從庫執行操做

 

(1) 設置server-id 值並關閉binlog設置

 

數據庫的server-id通常在LAN內是惟一的,這裏的server-id要和主庫及其餘從庫不一樣,並解析掉從庫的binlog參數配置執行vi /data/3307/my.cnf配置文件,按以下兩個參數內容修改:

[mysqld]
server-id=2
#log-bin=/data/3307/mysql-bin

 

(2) 還原主庫導出的數據備份

gzip -d mysql_bak.2014-04-17.sql.gz
mysql -uroot -p'password' -S /data/3307/mysql.sock < mysql_bak.2014-04-17.sql

 

(3) 登陸從庫配置同步參數

mysql -uroot -p'password' -S /data/3307/mysql.sock
CHANGE MASTER TO
MASTER_HOST='10.0.0.x', <==這裏是主庫的IP
MASTER_PORT=3306,  <==這裏是主庫的端口,從庫端口能夠和主庫不一樣。
MASTER_USER='rep',<==這裏是主庫上創建的用於複製的用戶rep
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.0000008',<==這裏是show master status時看到的查到二進制文件名稱
MASTER_POS=342;<==這裏是show master status時看到的查看二進制日誌偏移量,注意不能多空格。

 

不登錄數據庫,在命令行快速執行CHANGE MASTER的語句(適合在腳本中批量建Slave庫用)

本文即用此法來操做

cat |mysql -uroot -p'password' -S /data/3307/mysql.sock<< EOF

CHANGE MASTER TO

MASTER_HOST='10.0.0.x',
MASTER_PORT=3306, 
MASTER_USER='rep',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.0000008',
MASTER_LOG_POS=342;

EOF

 

也可登陸數據庫裏面執行以下語句:

 

CHANGE MASTER TO

MASTER_HOST='192.168.1.234',
MASTER_PORT=3306, 
MASTER_USER='rep',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000010',
MASTER_LOG_POS=261;

 

(4) 啓動從庫同步開關

啓動從庫同步開關,並查看同步狀態

 

mysql -uroot -p'password' -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -p'password' -S /data/3307/mysql.sock -e "show slave status\G;"

 

判斷複製是否搭建成功就看以下IO和SQL兩個線程是否顯示爲Yes狀態

Slave_IO_Running:Yes  負責從庫去主庫讀取Binlog日誌,並寫入從庫的中繼日誌中

Slave_SQL_Runnint:Yes  負責讀取並中繼日誌中Binlog,轉換SQL語句後應用到數據庫彙總

 

Ok 到此整個過程基本上完成了。

相關文章
相關標籤/搜索