基於Linux的docker mysql主從搭建

龍山游龍發表於2021-08-18

一、docker安裝

1.1 前提條件

Docker 要求 CentOS 系統的核心版本高於 3.10 ,檢視本頁面的前提條件來驗證你的CentOS 版本是否支援 Docker。

shell> uname -r

使用root許可權登入 Centos。確保yum包更新到最新.

shell> sudo yum update

如果安裝過舊版本的話:

shell> sudo yum remove docker docker-common docker-selinux docker-engine

1.2 安裝軟體包

shell> sudo yum install -y yum-utils device-mapper-persistent-data lvm2

yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的。

1.3 設定yum源

shell> vi /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=114.114.114.114
DNS2=8.8.8.8
shell> systemctl restart network

(推薦)設定阿里雲yum源

shell> sudo yum-config-manager --add-repo 

(或者)設定官方yum源

shell> sudo yum-config-manager --add-repo 
新增成功:
已載入外掛:fastestmirror
adding repo from: 
grabbing file  to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

1.4 安裝docker

可以檢視所有倉庫中所有docker版本,並選擇特定版本安裝。

shell> yum list docker-ce --showduplicates | sort -r

docker安裝所需依賴包,配置CentOS源 EPEL

shell> wget -O /etc/yum.repos.d/CentOS-Base.repo 
shell> yum install epel-release -y

安裝最新版本的docker

shell> sudo yum install -y docker-ce

(或者)安裝指導版本的docker

shell> sudo yum install docker-ce-17.12.0.ce

1.5 啟動docker

shell> sudo systemctl start docker
shell> sudo systemctl enable docker

1.6 驗證安裝

有client和service兩部分表示docker安裝啟動都成功了。

shell> docker version
Client: Docker Engine - Community
 Version:           20.10.1
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        831ebea
 Built:             Tue Dec 15 04:37:17 2020
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true
 
Server: Docker Engine - Community
 Engine:
  Version:          20.10.1
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       f001486
  Built:            Tue Dec 15 04:35:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

二、docker mysql安裝

2.1 下載映象

嚴格來說,無需在單獨的步驟中下載伺服器映像。但是,在建立Docker容器之前執行此步驟可確保本地映像是最新的。要下載MySQL Community Edition映像,請執行以下命令:

shell> docker pull mysql/mysql-server:tag
8.0: Pulling from mysql/mysql-server
03e20c09154c: Pull complete
be7ba00cd800: Pull complete
218845b603a2: Pull complete
0807146aa37b: Pull complete
Digest: sha256:5dfceab2e53e7dac983168c5f5d611d9d8e85c3bee7297c24c931d77fbeeaac3
Status: Downloaded newer image for mysql/mysql-server:8.0
docker.io/mysql/mysql-server:8.0

該tag是你想拉的影像版本的標籤,例如5.6, 5.7,8.0或 latest。如果省略,則使用標籤,並下載MySQL Community Server的最新GA版本的影像。

參考:https: //hub.docker.com/r/mysql/mysql-server/tags/?page=1&ordering=last_updated

可以使用以下命令列出下載的Docker映像:

shell> docker images
REPOSITORY           TAG       IMAGE ID       CREATED       SIZE
mysql/mysql-server   8.0       c8552d79a138   8 weeks ago   405MB

2.2 啟動MySQL主庫例項

shell> mkdir /docker/master/date -p
shell> vi /docker/master/my.cnf
[mysqld]
user=mysql
port=3308
datadir=/var/lib/mysql
log_error=myerror.log
server_id=1
log-bin=mysql-bin
binlog_format=ROW
shell> docker run --name master -p 3308:3308 -v /docker/master/date:/var/lib/mysql -v /docker/master/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:8.0

--name用於為伺服器容器提供自定義名稱的選項是可選的。如果沒有提供容器名稱,則會生成一個隨機的容器名稱。

-p 3306:3306 將容器的 3306 埠對映到主機的 3306埠

--privileged=true:容器內的root擁有真正root許可權,可選

-v /mysql/data:/var/lib/mysql 將主機data目錄掛載到容器的/var/lib/mysql

-v /docker/mysql/my.cnf:/etc/my.cnf將主機my.cnf 掛載到容器的my.cnf

-e mysql_root_password=mysql 設定mysql的root使用者的初始密碼

-d 保持後臺執行,image_name:tag可以使用docker images命令獲得,如mysql/mysql-server:8.0

2.3 登入MySQL例項

使用docker ps根據STATUS檢查MySQL啟動情況,伺服器準備就緒後,您可以在剛啟動的MySQL Server容器中執行 mysql客戶端,並將其連線到MySQL Server。

shell> docker ps
CONTAINER ID  8e565e79b7e5
IMAGE          mysql/mysql-server:8.0
COMMAND        "/entrypoint.sh mysq…"
CREATED        2 minutes ago
STATUS         Up 2 minutes (healthy)
PORTS          3306/tcp, 33060-33061/tcp, 0.0.0.0:3308->3308/tcp
NAMES          master

使用docker exec -it命令在已啟動的Docker容器內啟動 mysql客戶端:

shell> docker exec -it master mysql -uroot -pmysql

(或者)要對您的MySQL Server容器具有shell訪問許可權,請使用 docker exec -it命令在容器內部啟動bash shell:

使用bash shell登入到容器內,可檢視目錄資訊。

shell> docker exec -it master bash
bash-4.2# mysql -uroot -pmysql

2.5 啟動MySQL從庫

shell> mkdir /docker/slave/date -p
shell> vi /docker/slave/my.cnf
[mysqld]
user=mysql
port=33081
datadir=/var/lib/mysql
log_error=myerror.log
server_id=2
log-bin=mysql-bin
binlog_format=ROW
shell> docker run --name slave -p 33081:33081 -v /docker/slave/date:/var/lib/mysql -v /docker/slave/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=mysql -d mysql/mysql-server:8.0

使用docker exec -it命令在已啟動的Docker容器內啟動 mysql客戶端:

shell> docker ps
shell> docker exec -it slave mysql -uroot -pmysql

2.6 檢視主庫IP

[root@mysql2 ~]# docker inspect master | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

三、搭建傳統主從

3.1 建立複製使用者

建立一個slave使用者用於主從間的複製。

shell> docker exec -it master mysql -uroot -pmysql
mysql> create user slave@'%' identified by 'slave';
mysql> grant replication slave on *.* to 'slave'@'%';

3.2 搭建主從

主庫檢視binlog資訊

mysql> show master status;
mysql-bin.000003 |      691

從庫根據主庫的資訊搭建複製關係

shell> docker exec -it slave mysql -uroot -pmysql
mysql> change master to master_host='172.17.0.2',master_port=3308,master_user='slave',master_password='slave',master_log_file='mysql-bin.000003',master_log_pos=691, get_master_public_key=1;

注意:MySQL8.0搭建主從需要get_master_public_key=1,而其他版本不需要。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2787611/,如需轉載,請註明出處,否則將追究法律責任。

相關文章