使用docker安装mysql8.0

  1. 拉取指定版本的镜像
    docker pull mysql:8.0
  2. 查看下载的镜像
     命令:docker images
     
  3. 使用root用户创建实例并启动mysql
     
    docker run -p 3307:3306 \
    -e MYSQL_ROOT_PASSWORD=iamp@1234 \
    -v /mydata/mysql8/data:/var/lib/mysql-files:rw \
    -v /mydata/mysql8/log:/var/log/mysql:rw \
    -v /mydata/mysql8/etc/localtime:/etc/localtime:ro \
    -v /mydata/mysql8/config/my.cnf:/etc/mysql/my.cnf:rw \
    --name mysql8 --restart=always -d mysql:8.0
     参数说:

    -p 3306:3306 表示将容器(创建的mysql容器)的3306端口映射到主机(centos7)的3306端口

    -v /mydata/mysql/conf:/etc/mysql 将配置文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)

    -v /mydata/mysql/log:/var/log/mysql 将日志文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)

    -v /mydata/mysql/data:/var/lib/mysql 将配置文件夹挂载到主机(前一个是宿主机目录,后一个是镜像容器目录)

    -e MYSQL_ROOT_PASSWORD=root 初始化root用户的密码

    --name mysql 为容器指定名称为mysql

    -d mysql:5.7 后台运行名称为mysql,版本为5.7的镜像

    注意:

    上面-v挂载的文件夹内容,镜像容器都会同步到centos7对应的挂载目录/mydata/mysql/下,可以到centos7环境中查看,

    修改centos7环境中对应目录下的配置文件,mysql对应的挂载目录文件也会变化

  4. 出现问题
     Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely"
    原因:参考百度给出的原因为 linux 与 docker 版本的兼容性问题,可以尝试重新安装 docker
  5. 查看正在运行的镜像容器
     
  6. 修改mysql的字符编码

    #是否对sql语句大小写敏感,1表示不敏感这一段最好加上,否则后面无法修改,只能在数据库初始化的时候制定好
    lower_case_table_names = 1
    跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
    skip-character-set-client-handshake=1   
  7. 重启mysql
    docker restart mysql8
  8. 设置容器开机自动启动
    docker update mysql8 --restart=always
  9. my.cnf内容案例如下
[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

10、可能出现的问题

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/mydata/mysql8/etc/localtime" to rootfs at "/etc/localtime": mount /mydata/mysql8/etc/localtime:/etc/localtime (via /proc/self/fd/6), flags: 0x5001: 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.

解决方案:

  1. 原因是centos7.9中/mydata/mysql8/etc/localtime是一个文件夹,而不是一个文件,执行如下命令:

  2. echo 'Asia/Shanghai' > //mydata/mysql8/etc/localtime

  3. 再次执行上面docker创建mysql的命令

11、远程一直联不上mysql,进入容器就可以连上,可能是net.ipv4.ip_forward问题,开启路由即可

echo “net.ipv4.ip_forward = 1” >>/etc/sysctl.conf #将命令写入到/etc/sysctl.conf文件中
sysctl -p #加载内核
sysctl net.ipv4.ip_forward #再次查看路由是否开启

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值