Docker搭建Mysql服務(wù)(主從配置)

本文需要用戶已安裝Docker服務(wù)

版本信息

Docker版本:19.03.2
Mysql版本:8.0.17
Linux版本:3.10 (Centos7.6)

拉取Mysql官方鏡像

docker pull mysql:8.0.17

創(chuàng)建Mysql主從服務(wù)所需引用外部目錄及文件配置

(1) Master服務(wù)

mkdir -p /data/mysql/master/conf  #my.cnf配置文件存放目錄 
mkdir -p /data/mysql/master/data  #數(shù)據(jù)存儲(chǔ)目錄
vi /data/mysql/master/conf/my.cnf  #編輯mysql配置文件

將如下代碼添加到my.cnf文件中

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

#注意此處server-id必須唯一
server-id=1
log-bin=mysql-bin

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

(2) Slave服務(wù)

mkdir -p /data/mysql/slave/conf  #my.cnf配置文件存放目錄 
mkdir -p /data/mysql/slave/data  #數(shù)據(jù)存儲(chǔ)目錄
vi /data/mysql/slave/conf/my.cnf  #編輯mysql配置文件

將如下代碼添加到my.cnf文件中

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

#注意此處server-id必須唯一
server-id=2
log-bin=mysql-bin

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

啟動(dòng)Mysql服務(wù)鏡像(master)

docker run -p 3306:3306 --name mysql-master --privileged=true -v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17

啟動(dòng)命令解釋:
(1)-p 3306:3306 #指定端口號(hào) 第一個(gè)3306代表宿主機(jī)端口號(hào),第二個(gè)端口號(hào)代表容器端口號(hào)
(2)--name mysql-master #指定容器名稱
(3)--privileged=true #使用該參數(shù),容器內(nèi)的root擁有真正的root權(quán)限。否則,容器內(nèi)的root只是外部的一個(gè)普通用戶權(quán)限
(4)-v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql # -v表示掛載外部目錄,冒號(hào)前代表所掛載的外部目錄,冒號(hào)后代表映射的容器內(nèi)目錄
(5)-e MYSQL_ROOT_PASSWORD=123456 # -e表示傳入的環(huán)境參數(shù),這里的MYSQL_ROOT_PASSWORD就是Mysql鏡像所提供的root用戶密碼環(huán)境參數(shù)配置
(6)-d mysql:8.0.17 # -d 開啟Daemon模式(守護(hù)進(jìn)程),后面的mysql:8.0.17就是指定要運(yùn)行的鏡像

啟動(dòng)Mysql服務(wù)鏡像(slave)

docker run -p 3307:3306 --name mysql-slave --privileged=true -v /data/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17

查看已啟動(dòng)的容器

docker ps

可以看到我們上面已經(jīng)啟動(dòng)的兩個(gè)mysql容器mysql-master和mysql-slave


docker.png

配置mysql-master數(shù)據(jù)庫(kù)(主數(shù)據(jù)庫(kù))

進(jìn)入mysql-master容器

docker exec -it mysql-master /bin/bash

登錄主庫(kù)mysql數(shù)據(jù)庫(kù)

mysql -u root -p

在主庫(kù)上創(chuàng)建同步用戶并授權(quán)

CREATE USER 'replicate'@'172.18.0.2' IDENTIFIED BY '123456';  
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.18.0.2';
FLUSH PRIVILEGES;

上面代碼中'replicate'@'172.18.0.2'的IP地址應(yīng)為對(duì)應(yīng)容器的IP地址,可通過“docker inspect 容器ID”查看指定容器IP地址
最后增加遠(yuǎn)程訪問用戶 并賦予所有權(quán)限,遠(yuǎn)程訪問測(cè)試用

CREATE USER tang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'tang'@'%';

修復(fù)遠(yuǎn)程登錄報(bào)報(bào) caching_sha2_password異常

ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

查詢master的狀態(tài),此處File,Position數(shù)據(jù)在配置從庫(kù)時(shí)用到

show master status;

配置mysql-slave數(shù)據(jù)庫(kù)(從數(shù)據(jù)庫(kù))

進(jìn)入mysql-slave容器

docker exec -it mysql-slave /bin/bash

登錄從庫(kù)mysql數(shù)據(jù)庫(kù)

mysql -u root -p

配置從服務(wù)器Slave:(后面兩個(gè)數(shù)據(jù)從主庫(kù)查詢得出)

change master to master_host='172.18.0.2',master_port=3006,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1593;
start slave;

查詢slave的狀態(tài),Slave_IO_Running及Slave_SQL_Running進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯(cuò)誤的狀態(tài)

show slave status\G

最后同樣增加遠(yuǎn)程訪問用戶 并賦予所有權(quán)限,遠(yuǎn)程訪問測(cè)試用

CREATE USER tang IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'tang'@'%';

修復(fù)遠(yuǎn)程登錄報(bào)報(bào) caching_sha2_password異常

ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
FLUSH PRIVILEGES;

至此同步相關(guān)配置 已完成,接下來可以測(cè)試了,大家可以自己選擇工具進(jìn)行測(cè)試,這里就不進(jìn)行贅述了。

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

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

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