天天看點

mysql主從和主主差別_玩轉mysql主從和主主

++++++++++++++++++++++++ 在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