Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)
環(huán)境準(zhǔn)備
需要一個(gè) MySQL8 版本的 MySQL,因?yàn)槲覀€(gè)人沒(méi)有用過(guò) mysql5,不知道二者是否會(huì)有一些特性上的偏差。
默認(rèn)你與我的環(huán)境是一樣的。
簡(jiǎn)易版本安裝
先僅僅安裝一個(gè) MySQL,一上來(lái)就主從的話(huà)很多細(xì)節(jié)都會(huì)雜糅在一起。
docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
這里的參數(shù)介紹一下:
-p:指定內(nèi)外端口映射,虛擬機(jī)為外,docker 容器為內(nèi),寫(xiě)在前面的為外部端口,寫(xiě)在后面的為內(nèi)部端口。因?yàn)?MySQL 本身端口為 3306,為了不使你們混淆,我外部端口不設(shè)置為 3306。
-v:指定內(nèi)外存儲(chǔ)卷映射,Docker 實(shí)踐經(jīng)驗(yàn)(三)講的就是這個(gè)。
-e:往容器內(nèi)部傳參,最后會(huì)由 MySQL 來(lái)接收。關(guān)于這個(gè) -e 其實(shí)我也還沒(méi)研究它的一個(gè)走勢(shì)。
這樣一個(gè)簡(jiǎn)易的 MySQL 就能動(dòng)了。
設(shè)置密碼
沒(méi)有設(shè)置密碼的話(huà),不確定第二次要登錄的時(shí)候是否還能進(jìn)得去了。
不確定的意思就是可能進(jìn)得去,可能進(jìn)不去。
所以我們自行設(shè)置一個(gè)密碼比較保險(xiǎn)。
mysql> use mysql mysql> update user set authentication_string='123456' where user='root' and host='localhost'; mysql> flush privileges;
不用注釋吧。
現(xiàn)在這個(gè) MySQL 能動(dòng)了吧,可以考慮刪掉了,咱開(kāi)始做主從復(fù)制。
如果想留著用的:
修改 my.cnf,通過(guò)數(shù)據(jù)卷同步給MySQL:
cd /mysql/conf vim my.cnf 插入以下內(nèi)容: [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
重啟MySQL:
docker restart mysql docker exec -it mysql bash
配置 MySQL 主從復(fù)制
創(chuàng)建 bridge 網(wǎng)絡(luò)并指定 IP 區(qū)間
docker network create --driver bridge mysql-master-slave
mysql連接數(shù)默認(rèn)不夠
set global max_connections=500; set global mysqlx_max_connections=500;
創(chuàng)建數(shù)據(jù)和配置存放目錄
# 創(chuàng)建主庫(kù)數(shù)據(jù)存放目錄 mkdir -p /home/docker/mysql/master/data # 創(chuàng)建主庫(kù)配置存放目錄 mkdir -p /home/docker/mysql/master/conf # 創(chuàng)建從庫(kù)1數(shù)據(jù)存放目錄 mkdir -p /home/docker/mysql/slave1/data # 創(chuàng)建從庫(kù)1配置存放目錄 mkdir -p /home/docker/mysql/slave1/conf
準(zhǔn)備配置文件
主數(shù)據(jù)庫(kù)
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # 服務(wù)器唯一ID,默認(rèn)是1 server-id=10 # 啟用二進(jìn)制日志 log-bin=mysql-bin # 最大連接數(shù) max_connections=10000 # 設(shè)置默認(rèn)時(shí)區(qū) default-time_zone='+8:00' # 0:區(qū)分大小寫(xiě) # 1:不區(qū)分大小寫(xiě) lower_case_table_names=1 !includedir /etc/mysql/conf.d/
從數(shù)據(jù)庫(kù)
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # 服務(wù)器唯一ID,默認(rèn)是1 server-id=11 # 啟用二進(jìn)制日志 log-bin=mysql-bin # 最大連接數(shù) max_connections=10000 # 設(shè)置默認(rèn)時(shí)區(qū) default-time_zone='+8:00' # 0:區(qū)分大小寫(xiě) # 1:不區(qū)分大小寫(xiě) lower_case_table_names=1 !includedir /etc/mysql/conf.d/
啟動(dòng)數(shù)據(jù)庫(kù)
啟動(dòng)主數(shù)據(jù)庫(kù)
如果上面完全按照我的步驟來(lái),這里的命令也不用改參數(shù)。
docker run -d -p 3316:3306 --name mysql_master --restart=always --network mysql-master-slave -v /home/docker/mysql/master/data:/var/lib/mysql -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql
啟動(dòng)從數(shù)據(jù)庫(kù)
docker run -d -p 3326:3306 --name mysql_slave1 --restart=always --network mysql-master-slave -v /home/docker/mysql/slave1/data:/var/lib/mysql -v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql
遠(yuǎn)程訪問(wèn)配置(主從)
# 在容器 mysql_master 中開(kāi)啟一個(gè)交互模式的終端 docker exec -it mysql_master /bin/bash # 在容器 mysql_slave1 中開(kāi)啟一個(gè)交互模式的終端 docker exec -it mysql_slave1 /bin/bash # mysql 登錄 mysql -u root -p # 給予遠(yuǎn)程用戶(hù)所有表所有權(quán)限 GRANT ALL ON *.* TO 'root'@'%'; # 更改加密規(guī)則 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; # 遠(yuǎn)程訪問(wèn) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; # 刷新權(quán)限 flush privileges;
主庫(kù)創(chuàng)建復(fù)制用戶(hù)
CREATE USER 'woniu'@'%' IDENTIFIED WITH mysql_native_password BY 'woniu123456'; GRANT REPLICATION SLAVE ON *.* TO 'woniu'@'%'; flush privileges;
查看 master 機(jī)器的狀態(tài)
SHOW MASTER STATUS;

從庫(kù)設(shè)置 master 的信息
如果前面完全按我的步驟來(lái),這里需要填寫(xiě)你們自己宿主機(jī)上的 ip、還有上圖中顯示的那兩個(gè)數(shù)據(jù)。
change master to master_host='192.168.190.133', master_user='woniu', master_password='woniu123456', master_port=3316, master_log_file='mysql-bin.000003', master_log_pos=2838, master_connect_retry=30;
參數(shù)釋義:
- master_host:主數(shù)據(jù)庫(kù)的IP地址;
- master_port:主數(shù)據(jù)庫(kù)的運(yùn)行端口;
- master_user:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶(hù)賬號(hào);
- master_password:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶(hù)密碼;
- master_log_file:指定從數(shù)據(jù)庫(kù)要復(fù)制數(shù)據(jù)的日志文件,通過(guò)查看主數(shù)據(jù)的狀態(tài),獲取File參數(shù);
- master_log_pos:指定從數(shù)據(jù)庫(kù)從哪個(gè)位置開(kāi)始復(fù)制數(shù)據(jù),通過(guò)查看主數(shù)據(jù)的狀態(tài),獲取Position參數(shù);
- master_connect_retry:連接失敗重試的時(shí)間間隔,單位為秒。
開(kāi)啟主從復(fù)制
# 開(kāi)始同步 start slave; # 同步狀態(tài) show slave status ;

如果成功,圈出來(lái)的地方要都是 yes、
如果失敗,會(huì)顯示日志:

可自行百度,不過(guò)百度出來(lái)的不一定就適用于咱,畢竟咱是在 docker 上部署的,現(xiàn)有資料較少。
要靠經(jīng)驗(yàn)。
到此這篇關(guān)于Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker部署mysql8主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker搭建mysql主從同步的全過(guò)程
- Docker安裝mysql主從復(fù)制的實(shí)現(xiàn)步驟
- docker實(shí)現(xiàn)MySQL的主從復(fù)制
- Docker部署MySQL主從復(fù)制的實(shí)現(xiàn)
- 使用Docker搭建MySQL主從數(shù)據(jù)庫(kù)的方法步驟
- docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)
- docker實(shí)現(xiàn)MySQL主從雙備的示例代碼
- 兩臺(tái)互通的服務(wù)器使用Docker部署一主兩從MySQL8.0.35的方法
相關(guān)文章
Docker 手動(dòng)配置容器網(wǎng)絡(luò)實(shí)例詳解
這篇文章主要介紹了Docker 手動(dòng)配置容器網(wǎng)絡(luò)實(shí)例詳解的相關(guān)資料,這里有具體實(shí)現(xiàn),需要的朋友可以參考下2016-11-11
Docker數(shù)據(jù)卷常用操作代碼實(shí)例
這篇文章主要介紹了Docker數(shù)據(jù)卷常用操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Docker中運(yùn)行PostgreSQL并推薦幾款連接工具
PostgreSQL支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性,如復(fù)雜查詢(xún)、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等,今天給大家介紹Docker中運(yùn)行PostgreSQL并推薦幾款連接工具,需要的朋友參考下吧2021-06-06
rocketmq-streams的ILeaseService使用示例詳解
這篇文章主要為大家介紹了rocketmq-streams的ILeaseService使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
關(guān)于docker的15個(gè)小tip(技巧)
本篇文章主要介紹了docker的15個(gè)小tip(技巧),具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12
docker部署高斯數(shù)據(jù)庫(kù)的詳細(xì)步驟
文章詳細(xì)介紹了如何在Docker中部署高斯數(shù)據(jù)庫(kù)(openGauss),包括安裝Docker、拉取鏡像、運(yùn)行容器、設(shè)置環(huán)境變量和掛載數(shù)據(jù)卷等步驟,還提供了連接和配置遠(yuǎn)程連接的指導(dǎo),感興趣的朋友一起看看吧2024-12-12

