主從複製配置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', EOF |
也可登陸數據庫裏面執行以下語句:
CHANGE MASTER TO MASTER_HOST='192.168.1.234', |
(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 到此整個過程基本上完成了。