docker安装mysql

安装前准备

使用自定义的配置文件与数据目录
/opt/mysql/my.cnf
/data/database/mysql

安装

docker run -d -p 3306:3306 -v /opt/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/database/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mymysql mysql:5.7.18

配置文件说明

使用 -v会挂载自己的文件,

  1. 配置文件
    形成互补配置,如果有相同的选项,自定义的会覆盖原来默认的,这样可以更灵活地配置mysql
  2. 数据文件
    如果不配置数据文件,下次启动的时候,以前的数据就会丢失,又恢复到镜像中默认的数据库文件,显然不符合需求

遇到的问题

1.Error response from daemon: Conflict

这是因为容器中已经有这个id了,
docker ps -a
docker rm -f <名字或id>
使用上面命令删除conflict的容器后,重新启动

2. 检查状态

docker ps -a 
[root@localhost mysql]# docker ps -a
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS                        PORTS                                                              NAMES
a839f2c11e42        mysql:5.7.18                           "docker-entrypoint.s…"   3 seconds ago       **Exited (1)** 2 seconds ago                                                                         mymysql

发现status是Existed状态

3.检查log

docker logs -f mymysql --tail=10


Initializing database
2019-04-07T02:19:14.657123Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-04-07T02:19:14.659694Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-04-07T02:19:14.659709Z 0 [ERROR] Aborting

说明数据目录里面有文件了,检查数据目录
如果还记得开始的配置,可以直接去检查,如果不记得,也可以通过命令来检查

4.检查配置

docker inspect a839f2c11e42

"HostConfig": {
            "Binds": [
                "/opt/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf",
                "/data/database/mysql:/var/lib/mysql"
            ],

5.客户端如Navicat登陆不上

这是因为没有授权

docker exec -it <container id> /bin/bash
mysql -uroot -p
			ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

6. 验证有无数据丢失

关闭mysql再重新启动,发现新建的表,还在,即数据文件并未丢失

7.制作启动脚本

简单地对上面脚本进行封闭成一个比较容易记忆的,以后每次用这个,就不用一直去修改了。

root@localhost usr]# cat ./start-mysql.sh 
#!/bin/bash
docker run -d --rm -p 3306:3306 -v /opt/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/database/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mymysql mysql:5.7.18


总结

1.使用docker 安装很简单,很方便使用,但是对配置的原理不太懂,有时间需要读官方的docker file
2.关于上面检查有冲突的配置,有很多网上的说法,加上 --rm,这样下次不用去手动删除已经重复的id.
这样做的确可行,但我想docker为什么没有这样设计,应该也是有它特别的用意,自己能想到的一点就是可以使用
docker inspect + docker logs 来检查配置与log的错误,便于发现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值