Windows7环境下使用MySQL docker容器踩坑记

首先先拉取一个MySQL镜像:docker pull mysql:5.7.22

启动mysql容器

docker run -it --name mysql -p 3306:3306 -v /dockerShare/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.22 --character-set-server=utf8 --collation-server=utf8_unicode_ci

把本地文件夹目录挂载到容器/var/lib/mysql下,用于持久化数据,但是直接这样挂载会报错提示:File ./ib_logfile101: 'aio write' returned OS error 122

原因如下:

于是想使用外挂配置,去修改mysql的配置文件,官网的方法如下:

https://hub.docker.com/_/mysql/

但是,报错:Warning: World-writable config file ‘/etc/my.cnf’ is ignored

原因:

‘/etc/my.cnf’ is ignored ,大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件。导致无法进入,这也是mysql的安全机制之一。所以我们必须得改一些权限。设置其他用户不可写。

尝试修改文件权限:https://blog.csdn.net/yumushui/article/details/49124699,失败

 

下面是正确的解决方法:

思路:启动一个干净的mysql容器,然后进入该容器,在/etc/mysql/conf.d文件夹下新建一个配置文件,文件内容如下:

[mysqld]

innodb_use_native_aio=0

然后把容器保存成一个镜像,下次再次实例化该镜像的再挂载本地主机目录到容器里面。

步骤如下:

启动一个干净的mysql容器:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d --rm mysql:5.7.22

带MySQL容器完全启动后,进入容器:

docker exec -it some-mysql bash
cd /etc/mysql/conf.d
touch my-config.cnf
nano my-config.cnf

复制进去保存退出。

PS.

由于mysql镜像的精简,如果没有nano命令,可以用如下方法中的一种解决:

1.apt-get update更新软件源,然后apt-get install nano

2.

echo "[mysqld]" > my-config.cnf

追加第二行:echo "innodb_use_native_aio=0" >> my-config.cnf // 两个箭头是追加,一个箭头是覆盖

echo 如果没有目标文件,会输出到窗口,如果有目标文件,会写入文件

 

在文件夹/etc/mysql/conf.d下新增my-config.cnf后把容器保存成镜像:

docker commit some-mysql mymysql:5.7.22.1

再次启动mymysql镜像,并挂载本机目录文件夹:

docker run --name some-mysql -p 3307:3306 -v /dockerShare/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -it --rm mymysql:5.7.22.1

没有再报错,查看mysql服务运行情况:

登录mysql客户端:

新建一个test数据库:

查看本地挂载的路径文件夹是否同步的MySQL数据:

至此,mysql容器算是成功运行了。

 

说明:

如果不需要对宿主机暴露端口,可以不指定-p参数,mysql内部默认分配3306端口

设置数据库默认的编码:--character-set-server=utf8

设置排序的编码:--collation-server=utf8_unicode_ci

代码如下:

docker run --name mysql -v /dockerShare/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -it --rm mymysql:5.7.22.1 --character-set-server=utf8 --collation-server=utf8_unicode_ci

后台运行了mysql容器,进入mysql容器命令

docker exec -it <容器名> bash  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值