docker 配置mysql(5.7版本) 主從復(fù)制

拉取mysql容器

# m1
docker run -p 3307:3306 --name m1 -v E:/Docker/mysql/m1/conf:/etc/mysql/conf.d -v E:/Docker/mysql/m1/logs:/logs -v E:/Docker/mysql/m1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

# s1
docker run -p 3308:3306 --name s1 -v E:/Docker/mysql/s1/conf:/etc/mysql/conf.d -v E:/Docker/mysql/s1/logs:/logs -v E:/Docker/mysql/s1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

主機(jī)m1:在目錄E:/Docker/mysql/m1/conf配置my.cnf文件

#配置二進(jìn)制文件(從機(jī)主要從這個文件同步數(shù)據(jù))
log-bin=mysql-bin
binlog_format=row
#服務(wù)id 這個主機(jī)id一般是 1,從機(jī)不是1就可以
server-id = 1
#配置需要復(fù)制的庫,如需多個,則配置多個,如果不配置,則是全量復(fù)制
#binlog-do-db=mail
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=E:/Docker/mysql/m1/logsmysql-slow.log
long_query_time=3
early-plugin-load = ""


從機(jī)s1:在目錄E:/Docker/mysql/s1/conf配置my.cnf文件

#配置二進(jìn)制文件(從機(jī)主要從這個文件同步數(shù)據(jù)),如果是主從相互復(fù)制,則需要開啟這個
binlog_format=row
#服務(wù)id 從機(jī)不是1就可以
server-id = 2
#配置需要復(fù)制的庫,如需多個,則配置多個
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=E:/Docker/mysql/s1/logsmysql-slow.log
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""

測試 m1、s1連接

image.png

進(jìn)入 m1 主機(jī)創(chuàng)建一個用戶,用來復(fù)制的用戶(一般不建議用root)
docker exec -it m1 /bin/bash
出現(xiàn)如下警告是因?yàn)?,掛載my.cnf配置文件權(quán)限太大,mysql認(rèn)為這樣不安全,可以修改目錄權(quán)限
mysql: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.
解決辦法:chmod 644 /etc/mysql/conf.d/my.cnf

小插曲--m1 配置文件掛載到容器內(nèi)/etc/mysql/conf.d目錄下,不生效,設(shè)置了log-bin參數(shù),但是查看二進(jìn)制日志狀態(tài)還是OFF

查看命令(mysql shell 內(nèi)查看):
show global variables like '%log_bin%';

所以我這邊手動將my.cnf文件復(fù)制到了/etc/mysql/mysql.conf.d下 --- 從機(jī)也需要!?。?!

命令(容器內(nèi)部操作):
cp /etc/mysql/conf.d/my.cnf /etc/mysql/mysql.conf.d/
查看主機(jī)狀態(tài),記錄下File列和Position,BinLog_Do_DB就是配置需要同步的庫
show master status;

image.png

  • 創(chuàng)建復(fù)制所需賬戶 -- 賦予權(quán)限 -- 刷新權(quán)限
    CREATE USER 'relp'@'%' identified by '123456';
    GRANT REPLICATION SLAVE ON *.* TO 'relp'@'%';
    FLUSH PRIVILEGES;
  • 8.0版本用戶需要更改密碼驗(yàn)證的方式,因?yàn)閙ysql 8.0版本和5.7版本密碼的驗(yàn)證方式不同
  • 如果不修改會有一個報錯信息 Authentication plugin 'caching_sha2_password' is not supported
  • mysql:5.7 版本密碼驗(yàn)證方式是:mysql_native_password
  • mysql:8.0 版本密碼驗(yàn)證方式是:caching_sha2_password
ALTER USER 'relp'@'%' IDENTIFIED WITH mysql_native_password;
FLUSH PRIVILEGES;

配置從機(jī)連接主機(jī) MASTER_HOST是主機(jī)的地址,MASTER_LOG_FILEMASTER_LOG_POS參數(shù)是可選的,但對于確保正確的復(fù)制起點(diǎn)和避免重復(fù)復(fù)制,建議在適當(dāng)?shù)那闆r下指定它們。通過 show master status;查看,但是請注意,如果從服務(wù)器是首次配置為從服務(wù)器,或者是重新開始復(fù)制的情況(例如重新配置從服務(wù)器或進(jìn)行故障恢復(fù)),則最好指定正確的 MASTER_LOG_FILE 和 MASTER_LOG_POS。這樣可以確保從服務(wù)器從正確的位置開始復(fù)制,并避免重新復(fù)制已經(jīng)復(fù)制過的事件。
如下命令在從機(jī)中操作,如果沒有驗(yàn)證方式?jīng)]有更改,還是caching_sha2_password,那么這里需要添加一行GET_MASTER_PUBLIC_KEY=1;
CHANGE MASTER TO MASTER_HOST="172.17.0.8",MASTER_USER="relp",MASTER_PASSWORD="123456",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=1972;

。。。更多從機(jī)

啟動從機(jī)線程
start slave;

查看從機(jī)狀態(tài)
show slave status \G;

image.png

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1是 MySQL 中用于跳過指定數(shù)量的復(fù)制事件的語句。它的作用是在主從復(fù)制環(huán)境中,手動跳過從服務(wù)器(Slave)上的一定數(shù)量的復(fù)制事件,使復(fù)制進(jìn)程能夠繼續(xù)執(zhí)行。如果有自認(rèn)為不嚴(yán)重的錯誤,可以選擇故障下移(跳過),建議在跳過復(fù)制事件之后,對從服務(wù)器和主服務(wù)器進(jìn)行詳細(xì)的檢查,以確保復(fù)制進(jìn)程正常運(yùn)行,并且數(shù)據(jù)保持一致性
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

測試,在主機(jī)上面新建一個庫,測上也會同步這個庫(user庫)


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容