1. 目錄結(jié)構(gòu)
demo
|-- docker-compose.yml
|-- source
|-- data
|-- conf
|-- source.cnf
|-- replica_1
|-- data
|-- conf
|-- replica.cnf
2. 配置文件
-
docker-compose.yml
利用 docker 來進(jìn)行本地測(cè)試畏腕,比使用虛擬機(jī)性價(jià)比更高,也更加方便击纬。
version: '3' services: # 源庫 db_source: image: mysql:8 volumes: - "./source/data:/var/lib/mysql" # 數(shù)據(jù)備份 - "./source/conf:/etc/mysql/conf.d" # 配置文件,需提前寫好,下面會(huì)給出?? environment: - MYSQL_ROOT_PASSWORD=password # 副本庫1去团,可以有多個(gè) db_replica_1: image: mysql:8 volumes: - "./replica_1/data:/var/lib/mysql" - "./replica_1/conf:/etc/mysql/conf.d" environment: - MYSQL_ROOT_PASSWORD=password
-
source.cnf
這是源庫的配置文件。
-
log-bin
啟用二進(jìn)制日志穷蛹。 -
server-id
給源庫設(shè)置 ID土陪,集群內(nèi)必須唯一 -
innodb_flush_log_at_trx_commit
和sync_binlog
提高主從復(fù)制的耐用性和一致性
[mysqld] log-bin=mysql-bin server-id=1001 innodb_flush_log_at_trx_commit=1 sync_binlog=1
-
-
replica.cnf
這是副本的配置文件,副本不需要啟用二進(jìn)制日志肴熏,只需要確保 ID 唯一即可鬼雀。
[mysqld] server-id=1002
3. 啟動(dòng) docker 容器
docker-compose up -d
4. 獲取源庫的二進(jìn)制日志坐標(biāo)
-
進(jìn)入源庫容器
$ docker-compose exec db_source mysql -u root -p Enter password: # 輸入密碼 password 即可。
-
獲取二進(jìn)制日志的文件名(File)和坐標(biāo)(Position)扮超,這個(gè)窗口就不要?jiǎng)恿巳∪校酉聛碛杏谩?/p>
mysql > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | test | manual,mysql | +------------------+----------+--------------+------------------+
5. 給副本庫設(shè)置復(fù)制源
-
進(jìn)入副本庫容器
$ docker-compose exec db_replica_1 mysql -u root -p Enter password: # 輸入密碼 password 即可。
-
設(shè)置復(fù)制源
- SOURCE_HOST 源庫的 ip 或者域名
- SOURCE_POST 源庫的端口
- SOURCE_USER 源庫中出刷,用來執(zhí)行復(fù)制的用戶
- SOURCE_PASSWORD 源庫中璧疗,用來執(zhí)行復(fù)制的用戶的密碼
- SOURCE_LOG_FILE 上一節(jié)從源庫中獲取二進(jìn)制日志的文件名(File)
- SOURCE_LOG_POS 上一節(jié)從源庫中獲取的二進(jìn)制日志的坐標(biāo)(Position)
- GET_SOURCE_PUBLIC_KEY 因?yàn)?mysql8 的密碼加密使用的是 caching_sha2_password,所以要啟用基于 RSA 密鑰對(duì)的密碼交換馁龟,這個(gè)參數(shù)只接收 0 或 1崩侠。
Ps. 這一段解釋就像:It's a cat!
mysql> CHANGE REPLICATION SOURCE TO -> SOURCE_HOST='db_source', -> SOURCE_PORT=3306, -> SOURCE_USER='root', -> SOURCE_PASSWORD='password', -> SOURCE_LOG_FILE='mysql-bin.000003', -> SOURCE_LOG_POS=73, -> GET_SOURCE_PUBLIC_KEY=1;
-
開啟復(fù)制
mysql> START REPLICA;