前言

今天docker安装mysql8.0.20捯饬了半天,主要是挂载问题和连接问题,索性记录一下。网上很多千篇一律,还有很多就是过时了,那还是我自己上场吧。大家看的时候,请睁大眼睛,按步骤来。

Docker安装MySQL8.0.20

此处默认你已经搭建好了docker环境

第一步 拉镜像

docker pull mysql:8.0.20

第二步 启动

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20

第三步 复制

将容器内mysql的数据配置复制到本机,后面那个路径就是你想要映射的文件地址

docker cp mysql:/etc/mysql /root/mysql8.0.20

建议授权一下文件夹 防止权限问题异常, 进入到root目录

chmod 777 mysql8.0.20

第四步 删除旧容器

docker stop mysql && docker rm mysql

第五步 重新按以下命令启动, 建议自己保存下来

如果不熟悉,建议不要改动。映射端口以及容器名称可自行更改

docker run \ -p 3306:3306 \ --name mysql8 \ --privileged=true \ --restart unless-stopped \ -v /root/mysql8.0.20/mysql:/etc/mysql \ -v /root/mysql8.0.20/logs:/logs \ -v /root/mysql8.0.20/data:/var/lib/mysql \ -v /root/mysql8.0.20/mysql/mysql-files:/var/lib/mysql-files \ -v /etc/localtime:/etc/localtime \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.20

如果缺少 -v /root/mysql8.0.20/mysql/mysql-files:/var/lib/mysql-files 这个会报异常

到这里基本完成一半。

登录并远程连接

进入容器并登录,你会发现登录不了

进入mysql8容器

docker exec -it mysql8 /bin/bash

登录

mysql -uroot -p ,输入密码 发现登录不了. 输入 exit 先退出容器

修改配置文件

进入 /root/mysql8.0.20 文件, 编辑 my.cnf, 在[mysqld]增加一行 skip_grant_tables 此时mysql是无密码状态

重启容器

docker restart mysql8

再次进入容器

参考上述登录,再次输入 mysql -uroot -p 连按两次回车可登录成功 显示如下:

root@15006e4d70b3:/# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 8.0.20 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

进入数据库

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

查看表

mysql> show tables;

+---------------------------+

| Tables_in_mysql |

+---------------------------+

| columns_priv |

| component |

| db |

| default_roles |

| engine_cost |

| func |

| general_log |

| global_grants |

| gtid_executed |

| help_category |

| help_keyword |

| help_relation |

| help_topic |

| innodb_index_stats |

| innodb_table_stats |

| password_history |

| plugin |

| procs_priv |

| proxies_priv |

| role_edges |

| server_cost |

| servers |

| slave_master_info |

| slave_relay_log_info |

| slave_worker_info |

| slow_log |

| tables_priv |

| time_zone |

| time_zone_leap_second |

| time_zone_name |

| time_zone_transition |

| time_zone_transition_type |

| user |

+---------------------------+

33 rows in set (0.00 sec)

查看用户表

mysql> select host,user,plugin from user;

+-----------+------------------+-----------------------+

| host | user | plugin |

+-----------+------------------+-----------------------+

| localhost | mysql.infoschema | caching_sha2_password |

| localhost | mysql.session | caching_sha2_password |

| localhost | mysql.sys | caching_sha2_password |

| localhost | root | caching_sha2_password |

+-----------+------------------+-----------------------+

4 rows in set (0.01 sec)

因为 caching_sha2_password ,所以使用密码登录是不行的,需要修改

修改plugin

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

Query OK, 0 rows affected (0.01 sec)

这个时候 root还是不能远程登录,会报错,提示找不到ip。此处的密码,最好设置复杂一点,确保一次性通过.

修改远程连接

mysql> update user set host='%' where user='root';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

确认是否更改

mysql> select host,user,plugin from user;

+-----------+------------------+-----------------------+

| host | user | plugin |

+-----------+------------------+-----------------------+

| % | root | mysql_native_password |

| localhost | mysql.infoschema | caching_sha2_password |

| localhost | mysql.session | caching_sha2_password |

| localhost | mysql.sys | caching_sha2_password |

+-----------+------------------+-----------------------+

可以看到已经更改成功了,别高兴太早,这时候还是连不上,需要刷新以下权限!

刷新权限

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

这样就搞定了

使用navicat连接一下试试

连接成功!

善后

还记得之前增加的那个 skip_grant_tables 吗,要把它注释掉。然后重启就算完结了。

如果还是连不上,确保你的服务器端口是正常放行的,可以去云服务器安全组查看一下。

docker安装mysql8.0.20并远程连接的更多相关文章

  1. Docker部署Mysql8.0.20并配置主从复制

    1. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)   Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从) 2. 前提准备 # 创建主从数据库文件夹 ...

  2. windwos10安装mysql8.0.20详细图文教程

    windwos10安装mysql8.0.20详细图文教程 1.浏览器搜索mysql下载安装 地址:https://dev.mysql.com/downloads/mysql/ 2.登录或者不登录下载 ...

  3. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

    1. 主从复制解释   将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的起始位置,同步复制到从数据库中,使得主从数据库保持一致. 2. 主从复制的作用 高可用 ...

  4. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

  5. docker安装Mysql8.0并挂载外部配置和数据

    环境 CentOS Linux release 7.7.1908 (Core) 拉取Mysql8.0 镜像 docker pull mysql:8.0.18 创建挂载目录 mkdir -p /home ...

  6. Docker安装MySQL8.0

    环境 CentOS 7.5 Docker 1.13.1 MySQL 8.0.16 安装 拉取镜像 默认拉取最新版本的镜像 $ docker pull mysql 如果要指定版本,使用下面的命令 $ d ...

  7. Docker 安装mysql8.0

    1. 下载Mysql的Docker镜像: $ docker search mysql (搜索mysql镜像) $ docker pull mysql (下载mysql镜像,默认最新版本) 2. 运行镜 ...

  8. MySQL8.0.20下载与安装详细图文教程,mysql安装教程

    MySQL下载与安装(8.0.20版)教程 mysql安装包+mysql学习视频+mysql面试指南视频教程 下载地址: 链接:https://pan.baidu.com/s/1FmLFhGlajBQ ...

  9. MySQL8.0.20安装教程,MySQL8.0.20安装详细图文教程

    1.下载链接如下: MySQL8.0.20版本 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html 其他版本:MySQL8 ...

  10. mysql8.0.20安装配置教程

    mysql配置安装教程 1.下载mysql8.0.20安装包 下载地址: https://dev.mysql.com/downloads/mysql/.找到安装包后下载.(官网为英文,如果看不懂的小伙 ...

随机推荐

  1. Nfs 共享存储搭建

    Nfs 共享存储搭建 为了实现不同操作系统中的数据共享,我们一般会搭建一些用于文件共享的服务器,nfs服务器就是其中一种,它实现的是linux与linux之间的共享.今天我将把如何在linux系统搭建 ...

  2. 探索Git内部原理

    Git是一个开源的分布式版本控制系统,是目前主流的版本控制系统,很多软件项目都会用它做源代码管理.Git的常用操作想必很多人都会,但是可能了解Git内部原理的人并不多.了解一些底层的东西,可以更好的帮 ...

  3. java.lang.Long cannot be cast to java.util.Map-Oracle查询异常处理

    Map<String, Object> map一.问题由来 测试环境中进行测试时,某一个接口频繁报一个错,java.lang.Long cannot be cast to java.uti ...

  4. python的软连接的操作方法

    详细:切换python的版本 cd /usr/bin/ ls -l python* sudo rm -rf python sudo ln -s /usr/bin/python3.7 /usr/bin/ ...

  5. 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案

    安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...

  6. Android Studio安装插件重启插件消失

    问题 安装插件后,已经提示让重启IDE,但是重启后发现插件是安装失败了 解决方法 原因是自己改了配置,如果下载的插件是jar包,则可以安装,如果是zip压缩文件的插件,则是要我们手动解压一下 我上面的 ...

  7. Android Swtich开关样式调整

    原文:Android Swtich开关样式调整 - Stars-One的杂货小窝 接入百度人脸的demo时候,发现了内置的switch开关比较好看,看了下实现方法,原来只是改了下样式,记录一下 效果: ...

  8. Electron 开发过程中主进程的无法看到 console.log 输出怎么办

    开发过程中命令行工具(powershell.terminal)内无法看到 console.log 输出 Eelectron 的在开发过程中主进程 NodeJS 内往往需要 console.log 来进 ...

  9. C++ malloc、calloc、realloc

    1. malloc 函数原型: extern void *malloc(unsigned int num_bytes); 如果分配成功:则返回指向被分配内存空间的指针,不然返回指针NULL .同时,当 ...

  10. vue2中安装vuex

    2022年2月7日,vue3成为默认版本,npm i vue安装的直接就是vue3了 npm i -vuex 安装的是vuex4 vuex4只能在vue3中使用 vue2中,要用vuex3版本,安装 ...