docker 安装mysql 并将文件挂载到本地

  • 首先准备好挂载的文件路径
  • 执行mysql创建以及挂载的命令(这里还可以使用-e环境变量来创建新用户MYSQL_USER,MYSQL_PASSWORD)
    docker run -d -p 3306:3306 --restart always -e MYSQL_ROOT-PASSWORD="root12345" --name db-mysql -v /docker/mysql/config/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql mysql/mysql-server  

     

  • 执行上面的语句可能会发现以下问题(1注意检查挂载的路径和文件是否创建2.注意检查挂载的文件是否为文件格式而不是目录)
  • 过程碰到的问题报错如下:大致意思是您挂载的文件是个cnf目录文件而您挂载的目标文件是个cnf文件。
    docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\\"/docker/mysql/config/my.cnf\\\" to rootfs \\\"/var/lib/docker/overlay2/a745e213e304a1aa8d7b237b6193b95f8b376472196bf3a0646922491aef141b/merged\\\" at \\\"/var/lib/docker/overlay2/a745e213e304a1aa8d7b237b6193b95f8b376472196bf3a0646922491aef141b/merged/etc/my.cnf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

     

  • 解决方案
    rm -rf my.cnf/
    vim my.cnf
    #insert
    [mysqld]
    user=mysql 然后运行步骤二语句
  •  修改字符集

    复制代码
    修改my.cnf 文件的内容达到修改字符集的目的
    vim my.cnf
    #insert
    character-set-server=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    #退出restart mysql
    docker restart db-mysql
    #查看修改的字符集
    #首先进入bash,这里需要注意如果进入bash的时候root密码没有生效则需要去docker logs db-mysql 中查看创建的默认密码
    然后凭借默认密码进入到mysql环境。进入环境第一件事就是修改root用户的密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    (docker exec -it db-mysql mysql -uroot -proot12345)
    docker exec -it db-mysql bash
    mysql -uroot -p
    #输入用户名密码
    use mysql
    #查看用户权限
    select user,host from user      
    #查看字符集                    
    show variables like '%char%'
    复制代码
  • 创建新用户
    mysql> CREATE USER 'cyao'@'localhost' IDENTIFIED BY 'pwd123456';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'cyao'@'localhost' WITH GRANT OPTION;
    mysql> CREATE USER 'test'@'%' IDENTIFIED BY 'pwd123456';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;
    mysql> flush privileges;
  •  关于挂载有一下几个地方需要注意

        1.挂载之前my.cnf 必须要配置一个默认用户[mysqld] user=mysql
        2.挂载之前本地/docker/mysql/data这个路径下不能有其他文件或者文件夹

     

posted @   雨V幕  阅读(14198)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示