docker安装mysql和设置自定义数据目录

一、docker的安装

这里使用的是linux centos7以上的版本作为示例讲解

1、直接安装使用命令:yum install docker

2、启动命令:systemctl start docker

3、查询安装的docker版本信息:docker -version

4、指定版本拉取mysql的镜像

docker pull mysql:5.6.45

5、使用docker images查询下载的镜像文件

二、mysql的安装

1、先创建你要指定的数据目录:mkdir -p  /home/mysqldata

2、安装命令:docker run --name mysql -e MYSQL_ROOT_PASSWORD=bigAgent@123 -p 23306:3306 -v /home/mysqldata:/var/lib/mysql/ -d mysql:5.6.45

对参数不了解的请查阅文章:docker安装postgresSQL和设置自定义数据目录_蓝色心灵-海的博客-CSDN博客

3、安装成功

4、查看我们设置的宿主机的数据目录  ll /home/mysqldata/

docker安装mysql和设置自定义数据目录_第1张图片

三、安装成功后修改mysql大小写敏感问题

1、查询安装成功的镜像,使用docker ps 命令查询

2、使用交互模式进入容器

使用命令:docker exec -it 容器ID/容器名称 /bin/bash

3、修改配置文件

  我们需要修改的文件在:在配置文件  /etc/mysql/mysql.conf.d/mysqld.cnf 中添加   lower_case_table_names=1 后保存退出

docker安装mysql和设置自定义数据目录_第2张图片

4、如果容器中没有vi或者vim编辑器,那么就需要我们安装一下

先使用apt-get update,在使用命令apt-get install -y vim安装

5、最后重启容器即可

四、测试

1、进入镜像的命令:docker exec -it mysql bash

2、登录mysql的命令:mysql -u root -p

docker安装mysql和设置自定义数据目录_第3张图片

3、使用远程软件navicat登录

docker安装mysql和设置自定义数据目录_第4张图片

问题

上述虽然安装好了mysql,但是使用远程的Navicat连接时提示错误,不能正确连接mysql,此时需要修改按照下面说的步骤修改一下mysql的密码模式以及主机等内容才可以。

修改mysql密码以及可访问主机

  • 进入容器内部

$ docker exec -it mysql /bin/bash

  • 连接mysql

$ mysql -uroot -p

  • 使用mysql库

$ mysql> use mysql

  • 修改访问主机以及密码等,设置为所有主机可访问

$ mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

注意:

mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接

  • 刷新

$ mysql> flush privileges

经过以上步骤,再次远程使用Navicat连接数据库时就可以正常连接了。

使用 docker logs 容器名  查询日志

报错如下:

docker安装mysql和设置自定义数据目录_第5张图片

 

在大多数情况下,这需要在第一次启动MySQL服务器之前在MySQL选项文件中配置lower_case_table_names。

1、修改my.cnf(无效):
按照官网的说法,Mysql8.0一旦你在初始化的时候没有给与相应的值,则默认lower_case_table_names=0。后续如果你想要在my.cnf中修改此项,Mysql8.0是不允许两者不一致的情况发生(5.7的版本是可以的,所以5.7的版本依然可以直接修改my.cnf)。所以事后修改这个配置是不允许的。

2、docker指定--lower-case-table-names=1(特定情况无效):
docker启动mysql修改配置:

docker run --name mysql --restart=always \
    -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    -v /home/mysql/data:/var/lib/mysql \
    -p 3317:3306 \
    -e MYSQL_ROOT_PASSWORD="root" \
    -e TZ=Asia/Shanghai \
    -d mysql:8.0 --lower-case-table-names=1

网上很多说法都是在docker启动mysql的时候配置--lower-case-table-names。但是我这边尝试了很多遍都无效,原因是因为我的mysql初始化过了,/var/lib/mysql不是默认的初始化数据库,有人为修改的痕迹。

解决方案
重新启动mysql,如果是第一次安装,那么docker后面直接加--lower-case-table-names=1是可以的。

如果不是第一次装,需要卸载掉原有的mysql,-v /home/mysql/data:/var/lib/mysql 这里指定一个新的,干净的数据仓库。然后再--lower-case-table-names=1即可。

如:

原有:
docker run --name mysql --restart=always \
    -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    -v /home/mysql/data:/var/lib/mysql \
    -p 3317:3306 \
    -e MYSQL_ROOT_PASSWORD="root" \
    -e TZ=Asia/Shanghai \
    -d mysql:8.0
 
修改:
docker run --name mysql --restart=always \
    -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    -v /home/mysql/data2:/var/lib/mysql \
    -p 3317:3306 \
    -e MYSQL_ROOT_PASSWORD="root" \
    -e TZ=Asia/Shanghai \
    -d mysql:8.0 --lower-case-table-names=1

其中/home/mysql/data2为新建的目录即可, 但是这种做法,最好数据要备份,防止丢失。

四、更多学习资料请到

本文地址:CSDN

更多学习资料地址:2021年从入门到精通java开发全栈知识体系架构学习总结知识脑图(学习使用于项目实战)前端、后台、服务器、Linux、性能优化、集群搭建、微服务、大数据、项目实战等内容_蓝色心灵-海的博客-CSDN博客

你可能感兴趣的:(mysql,docker,docker,服务器)