環(huán)境準(zhǔn)備:
- 兩個相同版本的mysql實(shí)例
- 10.230.20.101/10.230.20.102(mysql 5.7)
操作步驟
- 添加復(fù)制專用的賬號
在主服務(wù)器上渔呵,設(shè)置一個復(fù)制使用的賬戶荧库,并授予 REPLICATION SLAVE 權(quán)限拣帽。這里 創(chuàng)建一個復(fù)制用戶 rep01
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep01'@'%' IDENTIFIED BY 'Abc@12345678';
Query OK, 0 rows affected (0.00 sec)
- 開啟binlog
修改主數(shù)據(jù)庫服務(wù)器的配置文件 my.cnf,開啟 BINLOG玲躯,并設(shè)置 server-id 的值据德。這 兩個參數(shù)的修改需要重新啟動數(shù)據(jù)庫服務(wù)才可以生效。
mysql> system vim /etc/my.cnf
server-id=101
log-bin=mysql-bin-log
innodb_flush_log_at_trx_commit=1
sync_binlog=1
- 阻止commit操作
FLUSH TABLES WITH READ LOCK;
- 使用mysqldump對主庫進(jìn)行備份
mysqldump -uroot -p --single-transaction --flush-logs -R -E --databases DB_NAME --set-gtid-purged=off --master-data=2 >/root/backup-`date +%F-%H-%M-%S`.sql
- 釋放鎖
UNLOCK TABLES;
- 在備庫上使用dump文件進(jìn)行恢復(fù)
mysql -uroot -p < *.sql
- 根據(jù)dump中的binlog文件和position跷车,設(shè)置從服務(wù)器的主節(jié)點(diǎn)信息
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.230.20.101',
-> MASTER_PORT=3306,
-> MASTER_USER='rep01',
-> MASTER_PASSWORD='Abc@12345678',
-> MASTER_LOG_FILE='mysql-bin-log.000005',
-> MASTER_LOG_POS=5208;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
- 開始同步
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
- 在從節(jié)點(diǎn)上使用showprocesslist命令查看
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 4 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 6 | system user | | NULL | Connect | 70 | Slave has read all relay log; waiting for more updates | NULL |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
2 rows in set (0.00 sec)
這表明 slave 已經(jīng)連接上 master棘利,并開始接受并執(zhí)行日志。
- 驗(yàn)證朽缴,在主節(jié)點(diǎn)操作善玫,從節(jié)點(diǎn)驗(yàn)證
其他配置:
-
skip-slave-start
跳過同步啟動從庫
-
log-slave-updates
這個參數(shù)用來配置從服務(wù)器上的更新操作是否寫二進(jìn)制日志,默認(rèn)是不打 開的密强。但是茅郎,如果這個從服務(wù)器同時也要作為其他服務(wù)器的主服務(wù)器,搭建一個鏈?zhǔn)降膹?fù)制或渤, 那么就需要打開這個選項(xiàng)系冗,這樣它的從服務(wù)器將獲得它的二進(jìn)制日志以進(jìn)行同步操作。 這個啟動參數(shù)需要和--logs-bin 參數(shù)一起使用薪鹦。
-
master-connect-retry
master-connect-retry 這個參數(shù)用來設(shè)置在和主服務(wù)器的連接丟失的時候掌敬,重試的時間間隔惯豆, 默認(rèn)是 60 秒,即每 60 秒重試一次奔害。 -
read-only
read-only 該參數(shù)用來設(shè)置從服務(wù)器只能接受超級用戶的更新操作楷兽,從而限制應(yīng)用程序錯誤 的對從服務(wù)器的更新操作。
replicate-do-db
replicate-do-table
replicate-ignore-db
replicate-ignore-table
-
replicate-wild-do-table
指定從主數(shù)據(jù)庫復(fù)制到從數(shù)據(jù)庫的數(shù)據(jù)庫或者表华临。有些時候用戶只 需要將關(guān)鍵表備份到從服務(wù)器上拄养,或者只需要將提供查詢操作的表復(fù)制到從服務(wù)器上,這樣 就可以通過配置這幾個參數(shù)來篩選進(jìn)行同步的數(shù)據(jù)庫和表银舱。
slave-skip-errors
在復(fù)制過程中,由于各種原因跛梗,從服務(wù)器可能會遇到執(zhí)行 BINLOG 中的 SQL 出錯的情況(比 如主鍵沖突)寻馏,默認(rèn)情況下,從服務(wù)器將會停止復(fù)制進(jìn)程核偿,不再進(jìn)行同步诚欠,等待用戶介入處 理。這種問題如果不能及時發(fā)現(xiàn)漾岳,將會對應(yīng)用或者備份產(chǎn)生影響轰绵。此參數(shù)的作用就是用來定 義復(fù)制過程中從服務(wù)器可以自動跳過的錯誤號,這樣當(dāng)復(fù)制過程中遇到定義中的錯誤號時尼荆, 便可以自動跳過左腔,直接執(zhí)行后面的 SQL 語句,以此來最大限度地減少人工干預(yù)捅儒。此參數(shù)可 以定義多個錯誤號液样,或者通過定義成 all 跳過全部的錯誤。具體語法如下:
--slave-skip-errors=[err_code1,err_code2,... | all]
如果從數(shù)據(jù)庫主要是作為主數(shù)據(jù)庫的備份巧还,那么就不應(yīng)該使用這個啟動參數(shù)鞭莽,設(shè)置不當(dāng),很 可能造成主從數(shù)據(jù)庫的數(shù)據(jù)不同步麸祷。但是澎怒,如果從數(shù)據(jù)庫僅僅是為了分擔(dān)主數(shù)據(jù)庫的查詢壓 力,且對數(shù)據(jù)的完整性要求不是很嚴(yán)格阶牍,那么這個選項(xiàng)的確可以減輕數(shù)據(jù)庫管理員維護(hù)從數(shù) 據(jù)庫的工作量喷面。