在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑

Docker安装MySQL8.0,Navicat连接数据库

环境

  • 虚拟机 CentOS 7.2
    在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑_第1张图片

  • Docker 20.10.7
    在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑_第2张图片

  • MySQL 8.0.27
    在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑_第3张图片

安装MySQL

1.先创建两个MySQL使用文件夹

#opt目录是Linux提供我们扩展的目录,可以存放用户需求的文件
mkdir -p /opt/datas/docker/mysql/conf
mkdir -p /opt/datas/docker/mysql/data

2.创建MySQL配置文件

在上面创建的配置文件目录/opt/datas/docker/mysql/conf下创建MySQL的配置文件my.cnf

vim /opt/datas/docker/mysql/conf/my.cnf
#关于vim的操作
#1.i : 进入insert模式
#2.Ctrl + C : 回过一般模式
#3.:wq : 写入数据并且退出

添加以下内容到上述创建的配置文件中

[client]

#socket = /usr/mysql/mysqld.sock

default-character-set = utf8mb4

[mysqld]

#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
#datadir = /var/lib/mysql
#socket = /usr/mysql/mysqld.sock
#pid-file = /usr/mysql/mysqld.pid

datadir = /opt/datas/docker/mysql/data
character_set_server = utf8mb4
collation_server = utf8mb4_bin
secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Custom config should go here

!includedir /etc/mysql/conf.d/

3.拉取最新MySQL镜像

docker pull mysql:latest

4.运行容器

docker run \
--name mysql8 \
--restart=unless-stopped \
-it -p 3306:3306 \
-v /opt/datas/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /opt/datas/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

参数说明:
–restart=unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
-p 3306:3306:映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码—可以自行更改
-d 后台运行

解决Navicat版本驱动连接不上mysql8.0

报错信息:
Client does not support authentication protocol requested by server; consider upgrading MySQL client

上述虽然安装好了MySQL,但是使用远程的Navicat连接时提示错误,不能正确连接mysql,造成该问题的原因是,mysql5.7前的加密方式是mysql_native_password,mysql8的加密方式是caching_sha2_password,如下为mysql 8加密方式示例此时需要修改按照下面说的步骤修改一下MySQL的密码模式以及主机等内容才可以。

1.修改MySQ加密方式以及可访问主机

  • 进入容器内部
docker exec -it mysql8 /bin/bash
  • 连接mysql
mysql -u root -p
#输入你的密码
  • 使用mysql库
use mysql
  • 修改访问主机以及密码等,设置为所有主机可访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

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

  • 刷新
flush privileges;

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

2.可以升级Navicat驱动,一步到胃

在虚拟机Docker安装MySQL8.0,Navicat连接数据库出错等踩过的坑_第4张图片

Navicat导入数据时,日期格式不正确

报错信息:
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column

在这里插入图片描述

1.use mysql

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

2.查看sql_mode : select @@global.sql_mode; 注意分号 @@指的是系统变量

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

3.修改sql_mode :移除’NO_ZERO_IN_DATE,NO_ZERO_DATE’

mysql> set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#退出
mysql> \q
Bye

以上都是我在学习过程中真正遇到的问题和相对应的解决方法,希望对你有所帮助。

你可能感兴趣的:(MySQL,Docker,docker,数据库,linux,mysql,运维)