基于Linux的docker mysql主从搭建

一、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 https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(或者)设置官方yum源

shell> sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
添加成功:
已加载插件:fastestmirror
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 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 http://mirrors.aliyun.com/repo/Centos-7.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,而其他版本不需要。

 


请使用浏览器的分享功能分享到微信等