docker常用命令及mysql主从复制配置

Docker常用命令
1、搜索可用镜像
docker search xxx
#例如搜索mysql
docker search mysql
2、下载镜像
docker pull xxx[:version]
#如下载mysql最新版镜像
docker pull mysql
#下载mysql 5.6版镜像
docker pull mysql:5.6
3、镜像下载加速

官方镜像站hub.docker.com在国内下载速度太慢,使用国内镜像能大大提高下载速度。下面只介绍常用的三种:
- daocloud

注册账户后会得到形如“http://xxxxxx.m.daocloud.io”的个人地址,按照提示将地址配置到docker中即可
  • aliyun:与daocloud类似
  • 163

    163不需要注册,可以直接使用,具体用法如下

    docker pull hub.c.163.com/library/xxx
    
    #如下载tomcat
    
    docker pull hub.c.163.com/library/tomcat
4、查看本地已有镜像
docker images
5、创建并运行容器

这里需要区分容器与镜像,打个不恰当的比方,镜像可以看成是操作系统的安装包,容器可以看成是安装后的系统,一个镜像可以被用来创建多个容器,多个容器可以同时运行。

#常用命令,-d表示后台运行模式,-p表示端口映射,hostPort为宿主机的端口,containerPort为容器中端口号
#-v表示路径映射,将宿主机的路径映射到容器中,可以配置多个-v来指定多个映射
#--name指定容器名称,后续可以通过名称来操作容器,-e用于设定环境变量,用于给容器传递参数
#image为镜像名,version为版本号
docker run -d -p hostPort:containerPort -v hostDir:containerDir --name containerName -e paramName=paramValue image[:verion]
#例如创建mysql5.7
docker run -d -p 3306:3306 -v xxx/conf/mysql:/etc/mysql -v xxx/data/mysql:/var/lib/mysql --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#可以通过--net=host来指定容器共享宿主机的网络(不再需要配置端口映射,宿主机的ip就是容器的ip,共用网络)
#更多参数可通过help查看
6、查看创建/已运行容器
#查看运行的容器
docker ps
docker ps -s

#查看已创建容器,包括停止的容器
docker ps -a
7、启动容器
#容器ID和容器名称可以通过docker ps查看, 容器名称为创建容器是指定
docker start 容器ID或者容器名称
8、停止容器
docker stop 容器ID或者容器名称
9、重启容器
docker restart 容器ID或者容器名称
10、删除容器
docker rm 容器ID或者容器名称
11、删除镜像
docker rmi 镜像名[:版本号]
12、登陆容器
#-it参数,i表示交互式模式,t表示终端,/bin/bash是需要运行的命令
docker exec -it 容器ID或容器名称 /bin/bash
13、查看容器IP
#查看容器详细信息,打印内容特别多,不方便查看
docker inspect 容器ID或容器名称

#仅打印容器IP
#docker inspect --format '{{.NetworkSettings.IPAddress}}' 容器ID或容器名称
14、更多请使用help参数查看
mysql主从复制配置
1、准备配置文件

由于刚开始我们没有mysql的配置文件,所以我们需要先创建一个mysql容器,然后将配置文件复制出来再进行修改,具体如下:

#先创建一个mysql容器
docker run -d --net=host xxxx/data/mysql:/var/lib/mysql --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#登陆容器
docker exec -it mysql5.7 /bin/bash
#新建目录
mkdir /var/lib/mysql/config
#拷贝配置文件
ps -r /etc/mysql/* /var/lib/mysql/config/
#退出容器
exit
#停止容器
docker stop mysql5.7
#删除容器
docker rm mysql5.7
#xxxx/data/mysql/config下就是mysql的配置文件了

现在有了基础的mysql配置文件,接下来需要修改配置文件内容,下面对mysql主库配置添加以下内容

#设置mysql端口
port          = 3307
#开启binlog
log-bin       = /var/lib/mysql/mysql-bin 
#不同步的数据库
#binlog-ignore-db = mysql
#设置binglog只对数据库test有效,这里可以不设
binlog-do-db  = test 
#设置server id
server-id     = 1000

再给mysql从库添加以下内容

#设置mysql端口
port          = 3308
#设置server id
server-id     = 1000

再将主库配置文件复制到xxxx/conf/mysql-1000目录,将从库配置文件复制到xxxx/conf/mysql-1001目录

2、创建两个容器
#创建mysql主库
docker run -d --net=host -v xxxx/conf/mysql-1000:/etc/mysql -v xxxx/data/mysql-1000:/var/lib/mysql --name mysql5.7-1000 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#创建mysql从库
docker run -d --net=host -v xxxx/conf/mysql-1001:/etc/mysql -v xxxx/data/mysql-1001:/var/lib/mysql --name mysql5.7-1001 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
3、mysql主库添加用户,用于数据同步
--添加用户
CREATE USER 'repl' IDENTIFIED BY 'repl';
--添加对所有数据库同步的权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'
--修改生效
flush privileges;
--查看主库信息,显示结果如下所示
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+
4、mysql从库配置主库信息
--配置主库信息
mysql>CHANGE MASTER TO
    ->     MASTER_HOST='localhost',
    ->     MASTER_PORT=3307,
    ->     MASTER_USER='rep1',
    ->     MASTER_PASSWORD='repl',
    ->     MASTER_LOG_FILE='mysql-bin.000003',
    ->     MASTER_LOG_POS=73;

--启动复制
mysql>start slave;
--查看复制状态
mysql>show slave status\G;
--显示形如下图则表示复制状态正常
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000013
          Read_Master_Log_Pos: 11662
               Relay_Log_File: mysqld-relay-bin.000022
                Relay_Log_Pos: 11765
        Relay_Master_Log_File: mysql-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
--停止同步
mysql>stop slave;
5、验证

在主库的test库中新建表、插入、修改、删除数据,查看从库是否与主库保持一致

6、可能存在的问题
  • 假如在同步点之前主库创建了数据库、数据表,则从库不会自动创建这些库和表,所以对这些库和表的操作会导致从库同步失败
  • 从库同步失败后会停止同步(不会跳过失败的操作),这是需要人工修复才能继续同步
  • 人工修复后需执行start slave来继续同步
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值