Docker安装Mysql一定要小心的坑

文档背景

本文适用于对Docker基本操作比较熟练的童孩

1、拉取MySQL镜像

#默认拉取最新的镜像
docker pull mysql

2、构建容器

前提:

  1. 先用普通指令构建一个mysql容器,然后将对应文件夹cp复制来

下面指令是为了让MySQL表大小写不明感,并且方便修改容器配置

docker run -it -d -p 3306:3306 -v /home/DockerFiles/apps/MySQL/etc:/etc -v /home/DockerFiles/apps/MySQL/home:/home -v /home/DockerFiles/apps/MySQL/var:/var   --name mysql_v --restart=always -e MYSQL_ROOT_PASSWORD=123456  mysql:8.0.11 --lower_case_table_names=1

参数介绍

  1. -it 表示 与容器进行交互式启动
  2. -d表示守护容器
  3. -p表示端口映射 宿主机端口 映射 容器端口
  4. –name 表示容器名称
  5. –restart=always 表示容器随着docker启动而启动
  6. -e 表示写入参数 MYSQL_ROOT_PASSWORD表示密码
  7. 选择镜像名称
  8. /bin/bash 可选,表示构建完容器,是否进入容器

将待映射的文件复制出来

docker cp ct_name:/etc ./
docker cp ct_name:/home ./
docker cp ct_name:/var ./

3、启动容器

docker start 容器名/容器id

4、进入容器

# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) -d  6a7ce7768bb1表示容器id 这里也可以是名称
docker exec -it -d 6a7ce7768bb1 /bin/bash

5、登录MySQL

mysql -u root -p123456

然后输入密码即可
注意! 这里可能登录异常,这是因为数据库里root的用户并不允许你输入的密码进行登录。
所以我们要重新修改一下root用户的密码(如果登录成功就不用管了下面免密操作的配置了)

查看是否大小写敏感

SHOW GLOBAL VARIABLES LIKE "%lower%"

查看全局字符变量配置

SHOW VARIABLES LIKE 'char%';

更改字符集

如果不是我们想要的utf8的字符集的话,就去修改/etc/mysql/my.cnf 添加配置

[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

更改时区

# 进入容器 输入指令
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 或者在创建容器时增加时间文件夹的映射
-v /etc/localtime:/etc/localtime:ro

6、修改mysql免密登录

一般都在my.cnf里修改,如果不在mysql文件夹里就找找看别的文件夹里有没有

vim /etc/mysql/my.cnf

docker一般不会下载vim编辑器,所以我们下载一下vim

#先执行第一步
apt update
#然后执行
apt-get install vim

下载好之后就可以用vim了

直接在文件最下面加上,表示免密了

[mysqld]
skip-grant-tables

再登录

mysql -u root -p [这里随便输入什么密码都可以]

7、修改root用户密码

之前版本较老的password为密码现在是authentication_string

#选择mysql内置数据库
use mysql;
#执行一下SQL语句
update user set authentication_string=password("password") where User='root';

OK,这样的话我们就可以使用密码登录了,然后我们去吧免密登录删掉就可以完成密码登录了

8、非本地IP连接MySQL

查看用户可以在哪些IP上登录

SELECT user,host from user;

如果host :'%'表示这个用户可以用任意IP登录
所以设置root的host为%,那么root用户就可以在任意IP上进行登录访问了

当我看见连接成功感觉一切都是值得的!哈哈哈哈
Docker安装Mysql一定要小心的坑_第1张图片

9、特别注意

my.cnf中修改一些只读的参数会导致Docker无法启动。
所以 我们有映射文件,可以去修改映射文件让数据库恢复

你可能感兴趣的:(Docker,docker,mysql)