++++++++++++++++++++++++ 在master上處理 ++++++++++++++++
#1 配置檔案中添加并保證唯一
server-id=1
log-bin=/var/lib/mysql/mysql-bin
#2 重新開機
/etc/init.d/mysqld restart
#3 建立用于同步的賬号rep
grant replication slave on *.* to 'rep'@'192.168.11.%' identified by '123456';
flush privileges;
show grants for rep@'192.168.11.%’;
注意: replication slave 為mysql 同步的必須權限,此處不要授權all容易被******。
#4 進行導庫操作(對資料庫鎖表隻讀) 目前視窗不要關閉
注意:生産環境時,操作主從複制,需要申請停機時間。資料量很大鎖表會影響業務。
flush table with read lock;
提示: 這個鎖表指令的時間,在不同的引擎的情況,會受下面參數控制,鎖表時,如果超過設定時間不操作會自動解鎖。
受二參數限制:interactive_timeout = 60 wait_timeout = 60
預設情況下時長: show variables like '%timeout%';
#5 查詢bin-log日志在哪裡 查詢主庫狀态
show master status;
查詢主庫狀态,即目前binlog日志檔案名和二進制binlog日志偏移量。
表示我現在主庫往bin-log裡寫資料寫到了 000001這個檔案的342位置點
#6 備份所有庫 即導出資料庫所有資料
mysqldump -u root -p123456 --events --compact --default-character-set=utf8 -A -B -F |gzip > mysql_all_$(date +%F).sql.gz
#7 解鎖
unlock table
++++++++++++++++++++++++ 在slave上處理 ++++++++++++++++
#1 配置檔案中設定server-id 并關閉bin-log參數配置
server-id=2
#log-bin=/var/lib/mysql/mysql-bin
#2 重新開機
/etc/init.d/mysqld restart
#3 将主庫的資料庫拉取到本地導進資料庫
scp [email protected]:/home/yeqing/mysql_all_2017-01-18.sql.gz .
gzip -d mysql_all_2017-01-18.sql.gz
注意: 有外鍵的表不好導,mysql等系統表不要導
#4 配置同步參數(根據show master status設定)
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.11.16',
-> MASTER_PORT=3306,
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=342;
Query OK, 0 rows affected (0.11 sec)
#5 檢查是否有master.info
cat /var/lib/mysql/master.info
#6 執行同步開關啦
slave start;
#7 檢查是否已經同步
show slave status\G;
io和sql程序要yes:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
延遲要為0
Seconds_Behind_Master:0
#8 如果遇到IO程序和sql程序有不是YES,進行如下處理:
方案1:
1. 在master上
清除bin-log: reset master;
重新檢視位置點:show master status;
2. 在slave上
關閉同步:slave stop
清除bin-log: rester
對照master位置點重新進行配置同步參數
重新開啟同步: slave start;
再次檢視是否同步: show slave status\G;
方案二:
差異小的情況下直接通過navicat的資料對比功能 找出來 給從庫補上
關閉同步:slave stop
清除bin-log: rester
重新開啟同步: slave start;
方案三:
差異大的情況下,直接重新做主從同步。
#9 測試同步
在master上:
create table test_2(id int);
mysqlbinlog mysql-bin.*|egrep -v '#|*!'
在slave上:
show tables;
+++++++++++++++++++++++++++++++++++ 主主配置++++++++++
master-1:
relay_log_info_file=/var/lib/mysql/relay-log.info
relay-log-purge = 1
log-slave-updates
relay-log-recovery =1
auto_increment_offset = 1
auto_increment_increment = 2
master-2:
relay_log_info_file=/var/lib/mysql/relay-log.info
relay-log-purge=1
relay-log-recovery=1
log-slave-updates
auto_increment_offset = 2
auto_increment_increment = 2
分别重新開機mysql 并 slave stop /start