Docker - Docker挂载mysql

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

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

1、下载镜像

# 最新版本
docker pull mysql

# 如 5.7 版本 本文基于5.7版本
docker pull mysql:5.7

2、启动mysql容器

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

3、确定mysql配置文件路径

#进入docker容器,mysql为刚安装的容器名称
docker exec -it mysql或者mysql容器ID /bin/bash

#登录MySQL
mysql -u root -p

#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'

#授权添加远程用户登录访问
CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';

# 查找Docker内,MySQL配置文件my.cnf的位置
mysql --help | grep my.cnf

# 会输出数据文件的存放路径 /var/lib/mysql/
show variables like '%datadir%';

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

mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data

# 将容器的配置复制到服务器
docker cp mysql:/etc/mysql/* /usr/local/mysql/conf/
或
docker cp mysql:/etc/mysql/. /usr/local/mysql/conf/

# 修改字符集
vim /usr/local/mysql/conf/my.cnf
character-set-server=utf8

如果遇到如下错误:

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

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容器

docker stop mysql

docker rm mysql

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:5.7

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报错,

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值