# Docker 安装 MySQL

# 一、Docker安装

  1. 拉取镜像

    docker search mysql
    docker pull mysql # 拉取最新版本 mysql 镜像
    # docker pull mysql:8.0.16 # 拉取指定版本
    docker images
    
    1
    2
    3
    4
  2. 启动容器运行镜像

    docker run --name mysql -p 3306:3306 \
    --restart=always \
    -v ~/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql
    
    1
    2
    3
    4
    5

    一条命令方式

    创建虚拟网段 docker network create -d bridge my-bridge,同一网段的容器就可以互相访问

    宿主机的sql目录挂载到容器内的docker-entrypoint-initdb.d,挂载到该目录下的SQL文件会在MySQL容器创建后自动执行,完成初始化

    docker run \
        -p 3306:3306 \
        --name mysql \
        --restart=always \
        -v ~/mysql/data:/var/lib/mysql \
        -e MYSQL_ROOT_PASSWORD=root \
        -d mysql
        
    # `-p 3307:3306` 3307是容器向外暴露的端口 3306是容器内部端口 
    # `-d` 后台运行
    # `--restart=always` 随着 docker 的启动而启动
    # `--name mysql_01` 容器名称
    # `-e MYSQL_ROOT_PASSWORD=123456` mysql初始密码
    # `-v` 数据卷挂载
    #   -v ~/mysql/data:/var/lib/mysql # mysql数据文件
    #   -v ~/mysql/sql:/docker-entrypoint-initdb.d # sql文件可以放到该目录下,启动容器自动执行
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
  3. 查看日志

    docker ps
    docker logs mysql_01
    
    1
    2
  4. 进入容器

    docker exec -it mysql bash # 进入容器内
    mysql -uroot -p            # 连接mysql
    
    1
    2
  5. 卸载

    docker stop mysql_01    # 停止容器
    docker start mysql_01   # 启动容器
    docker rm mysql_01      # 删除容器
    docker rmi mysql        # 删除镜像
    
    1
    2
    3
    4

注意:远程连接mysql连不上可能是防火墙问题 参考linux防火墙

# 二、SQL数据备份

# MySQL官方命令方式

  1. 备份全部数据

    docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
    
    1
  2. 备份指定库

    docker exec mysql sh -c 'exec mysqldump --databases aaa -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/aaa-databases.sql
    
    1
  3. 仅导出结构,不要数据

    docker exec mysql sh -c 'exec mysqldump --no-data --databases aaa -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/aaa-databases.sql
    
    1