docker 搭建MySQL主从模式

时间:2021-6-4 作者:qvyue

安装docker(目标机为centos7)
卸载旧版本

sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

安装Docker Engine-Community

在新主机上首次安装Docker Engine-Community之前需要设置Docker 仓库,之后可以从仓库安装和更新Docker

    安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

    $ sudo yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2

    使用以下命令来设置稳定的仓库

    sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo

    安装Docker Engine-Community 最新版本 或者 按照下一步安装特定版本

    sudo yum install docker-ce docker-ce-cli containerd.io

    列出存储库中可用版本。按照版本号从高到底排列

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

    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

    指定软件包名称 安装docker-ce 和docker-ce-cli

    sudo yum install docker-ce- docker-ce-cli- containerd.io

启动docker

sudo systemctl start docker

docker 基本命令

# 查看下载的镜像
docker images
# 查看运行中的容器
docker ps
# 查看所有容器包含没有运行
docker ps -a
# 移除镜像 
docker rm 
# 启动停止容器
docker start/stop 

利用docker搭建mysql主从服务器(例子中采用一主一从)
首先拉取MySQL镜像

docker pull mysql:5.7

利用此镜像启动主从容器

# master 主库 
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# slave 从库 
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

说明:-p port1:port2 其中port1 为容器对外映射的端口号(宿主机端口),因为docker容器是相互独立的,每个容器有自己的独立ip,所以不同容器使用相同的端口不会冲突,这里的port2 我们尽量使用MySQL默认的3306,否则可能会出现无法通过IP连接docker容器的mysql。

使用 docker -ps 查看容器运行情况

[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
ce752c99a010        mysql:5.7           "docker-entrypoint.s…"   6 hours ago         Up 5 hours          33060/tcp, 0.0.0.0:3341->3306/tcp   slave2
701ccedc1e95        mysql:5.7           "docker-entrypoint.s…"   6 hours ago         Up 5 hours          33060/tcp, 0.0.0.0:3340->3306/tcp   slave1

此时还不能用客户端连接,需要MySQL进行远程连接授权

进入容器

docker exec -it bash

登录mysql

mysql -uroot -p

进入MySQL后执行授权操作

— 对远程连接进行授权
GRANT ALL ON *.* TO 'root'@'%';
— 更改密码的加密规则
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
— 更改root的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
— 刷新权限
flush privileges;

配置master

通过 docker exec -it bash进入容器内部。使用vim /etc/mysql/my.cnf 修改MySQL配置

会出现如下问题。

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    E: Unable to locate package vim

    需要首先执行 apt-get update 然后执行 apt-get install vim 即可

在my.cnf 中添加如下配置

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

配置完成后重启即可生效 ,在容器内部 使用命令 service mysql restart,此时容器会停止,我们还需要 docker start 启动容器。
配置slave

my.cnf中添加配置

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  

连接master 和 slave

首先进入master mysql 执行 show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.25 sec)

记录File 和 position 值。

然后,从slave进入MySQL执行

change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 154, master_connect_retry=30;

master_host 说明 :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 

[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mymysql
172.17.0.2

执行命令 start slave 启动slave。

查看slave状态 show slave status G;

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。