Docker安装MySql

访问 Docker Hub查看需要下载的版本

一、下载镜像

#下载最新镜像
#docker pull mysql
#或者
#docker pull mysql:latest
#我们这里使用的是8.0.19
docker pull mysql:8.0.19

查看下载的镜像
在这里插入图片描述
二、启动镜像

docker run -p 3306:3306 --name mysql \
-v /usr/home/huamei/mysql/conf:/etc/mysql/conf.d \
-v /usr/home/huamei/mysql/logs:/var/log/mysql \
-v /usr/home/huamei/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1qaz\!QAZ \
-d mysql --lower_case_table_names=1 --skip-name-resolve
  1. -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
  2. MYSQL_ROOT_PASSWORD:1qaz!QAZ (root用户密码)
  3. lower_case_table_names:此参数不可以动态修改,必须重启数据库
    lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
    lower_case_table_names = 0 表名存储为给定的大小和比较是区分大小写的
    lower_case_table_names = 2 表名存储为给定的大小写但是比较的时候是小写的
  4. skip-name-resolve 禁止域名解析的(也包括主机名)
    缺点:当有一个新的客户端连接进来时,MySQL Server都要建立一个新的记录,如果DNS解析很慢,无疑会影响性能。如果被允许访问的主机很多,也会影响性能;
    优点:通常情况下,主机名是不变的,而IP是多变的。如果一个客户端的IP经常变化,那基于IP的授权将是一个繁琐的过程。因为你很难确定IP什么时候变化。而基于主机名,只需一次授权。而且,基于host cache中的失败信息,可在一定程度上阻止外界的暴力破解攻击。

查看所有的容器

#查看所有运行的容器
docker ps

所有启动的容器
三、开启远程连接

#进入容器
docker exec -it mysql /bin/bash

#登录mysql
mysql -uroot -p

#修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY "1qaz!QAZ";

#root用户远程访问
alter user 'root'@'%' identified by '1qaz!QAZ' password expire never;
alter user 'root'@'%' identified with mysql_native_password by '1qaz!QAZ';

创建新的远程访问用户

#创建新的远程访问用户
CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY  "password";
#授权
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';

四、问题补充

1.关闭only_full_group_by模式
进入mysql容器挂载在主机的配置文件目录

cd /usr/home/huamei/mysql/conf

my.cnf文件

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4

[mysqld]
#skip_name_resolve
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links= 0
default-time_zone= '+8:00'
#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp= true

#去除only_full_group_by,值不能用引号包裹,否则会不生效
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启mysql

docker restart 容器id

2.设置最大连接数
在mysql命令界面执行如下操作

show variables like '%max_connections%';
set GLOBAL max_connections=1000;

在这里插入图片描述

发布了13 篇原创文章 · 获赞 0 · 访问量 3650
展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览