• Docker - Docker挂载mysql


    我们在VMware上的Linux系统上安装启动mysql服务后,可以在本机Windows系统上通过Navicat远程访问,可以进行数据库表的增删改查,但是会存在一个问题

    此时如果通过docker关闭MySQL容器,就会导致数据丢失(可以理解为数据库中的提交事务,未提交事务会导致数据没保存成功 ),因此修改容器之后需要保存或者挂载mysql数据库

    1、下载镜像

    1. # 最新版本
    2. docker pull mysql
    3. # 如 5.7 版本 本文基于5.7版本
    4. docker pull mysql:5.7

    2、启动mysql容器

    1. # 运行mysql命名容器名称为mysql并且设置root账号初始密码为root
    2. docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7

    3、确定mysql配置文件路径

    1. #进入docker容器,mysql为刚安装的容器名称
    2. docker exec -it mysql或者mysql容器ID /bin/bash
    3. #登录MySQL
    4. mysql -u root -p
    5. #修改密码
    6. ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'
    7. #授权添加远程用户登录访问
    8. CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    9. GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
    10. # 查找Docker内,MySQL配置文件my.cnf的位置
    11. mysql --help | grep my.cnf
    12. # 会输出数据文件的存放路径 /var/lib/mysql/
    13. show variables like '%datadir%';

    4、创建本地路径并挂载Docker内数据,拷贝MySQL容器配置文件

    1. mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data
    2. # 将容器的配置复制到服务器
    3. docker cp mysql:/etc/mysql/* /usr/local/mysql/conf/
    4. docker cp mysql:/etc/mysql/. /usr/local/mysql/conf/
    5. # 修改字符集
    6. vim /usr/local/mysql/conf/my.cnf
    7. character-set-server=utf8

    如果遇到如下错误:

    1. /usr/bin/docker-current:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/1b1d4a0234ee4caxxxxx/merged: invalid argument.
    2. See '/usr/bin/docker-current run --help'.

    这个是因为用的overlay2文件系统,而系统默认只能识别overlay文件系统,更新文件系统即可

    systemctl stop docker      //停掉docker服务

    rm -rf /var/lib/docker        //注意会清掉docker images的镜像

    vim /etc/sysconfig/docker-storage      

    //将文件里的overlay2改成overlay即可
    如:DOCKER_STORAGE_OPTIONS="--storage-driver overlay"

    vim /etc/sysconfig/docker         //去掉option后面的--selinux-enabled
    然后启动docker即可:systemctl start docker

    5、重新启动mysql容器

    1. docker stop mysql
    2. docker rm mysql
    3. docker run --name mysql \
    4. -p 3306:3306 \
    5. -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    6. -v /usr/local/mysql/data:/var/lib/mysql \
    7. -v /usr/local/mysql/log:/logs \
    8. -e MYSQL_ROOT_PASSWORD=admin123456 \
    9. --restart=always \
    10. -d mysql:5.7
    11. docker run --name mysql -p 3306:3306 -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=admin123456 --restart=always -d mysql

    如果启动MySQL报错,

    1. docker logs containerId(容器ID)
    2. 如:docker logs c59ba37a2508,查看具体错误

     映射MySQL数据文件后,删除或者停止mysql容器后能保留数据库文件,不至于导致数据库丢失

  • 相关阅读:
    【chat】4:ubutnu20.04 安装redis
    Qt .pro和.qrc创建及介绍
    (云HIS)云医院管理系统源码 SaaS模式 B/S架构 基于云计算技术
    用PyTorch简单实现线性回归
    MySQL数据库技术笔记(5)
    2023高教社杯数学建模B题思路代码 - 多波束测线问题
    逆向案例二:关键字密文解密,自定义的加密解密。基于企名片科技的爬取。
    【腾讯云原生降本增效大讲堂】京东云原生大规模实践之路
    Docker安全及日志管理
    2024.06.05【读书笔记】丨生物信息学与功能基因组学(第十一章 分子水平的系统发生和进化 第一部分)【AI测试版】
  • 原文地址:https://blog.csdn.net/MinggeQingchun/article/details/123880624