docker 安装mysql

132 阅读5分钟

docker 环境 是 CentOS 8.1

拉取镜像
docker pull mysql:8.0.36
docker pull mysql:8.4.3
# 使用 docker 镜像 public-image-mirror
docker pull m.daocloud.io/docker.io/library/mysql:8.4.3

#重命名image
docker tag f742bd39cd6b mysql:8.4.3
#删除镜像
docker rmi m.daocloud.io/docker.io/library/mysql:8.4.3

在宿主机创建持久化 mysql data 及mysql.cnf 数据目录和配置文件目录 日志目录

mkdir -p  /docker-root/mysql_3308/{conf.d,data,logs}

mkdir -p  /docker-root/mysql_3308/conf.d
mkdir -p  /docker-root/mysql_3308/data
mkdir -p  /docker-root/mysql_3308/logs 

挂载到 mnt 文件存储NAS上

mkdir -p  /mnt/docker-root/mysql_3308/conf.d
mkdir -p  /mnt/docker-root/mysql_3308/data
mkdir -p  /mnt/docker-root/mysql_3308/logs 

如果是liunx系统 添加配置文件 /docker-root/mysql/conf.d 目录下加配置文件 mysql.cnf 内容如下

[mysqld] 
lower_case_table_names=1

如果要修改默认的3306端口号为3308

MySQL连接慢问题解决 配置项添加 skip-name-resolve 有一个非常慢的DNS和许多主机,您可以通过使用-skip-name-resolve禁用DNS解析 配置文件中添加

[mysqld] 
lower_case_table_names=1
port=3308
skip-name-resolve
mysql_native_password=ON

mysql8.4 修改 重新启用 MySQL Native Password 插件 在 mysql.cnf 配置文件中 添加

mysql_native_password=ON # 允许使用 mysql_native_password 插件

docker run --name mysql-3306 --restart=always -d -p 3306:3306 \
-v /docker-root/mysql_3308/conf.d:/etc/mysql/conf.d \
-v /docker-root/mysql_3308/logs:/logs \
-v /docker-root/mysql_3308/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.32

挂载到 mnt目录 并且端口号改为3308

docker run --name mysql-3308 --restart=always -d -p 3308:3308 \
-v /mnt/docker-root/mysql_3308/conf.d:/etc/mysql/conf.d \
-v /mnt/docker-root/mysql_3308/logs:/logs \
-v /mnt/docker-root/mysql_3308/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 --default-authentication-plugin=mysql_native_password mysql:8.0.36

挂载到 data目录 并且端口号改为3308

sudo docker run --name mysql-3308 --restart=always -d -p 3308:3308 \
-v /data/docker-root/mysql_3308/conf.d:/etc/mysql/conf.d \
-v /data/docker-root/mysql_3308/logs:/logs \
-v /data/docker-root/mysql_3308/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  m.daocloud.io/docker.io/library/mysql:8.4.3

sudo docker run --name mysql-3308 --restart=always -d -p 3308:3308 \
-v /data/docker-root/mysql_3308/conf.d:/etc/mysql/conf.d \
-v /data/docker-root/mysql_3308/logs:/logs \
-v /data/docker-root/mysql_3308/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  mysql:8.4.3

在麒麟桌面版v10 sp1 上 所有的命令前面 都 添加上 sudo 把 配置文件mysql.cnf 的权限修改为

suod chmod 644  /data/docker-root/mysql_3308/conf.d/mysql.cnf

命令说明

run                 运行一个docker容器
--name           后面这个是生成的容器的名字mysql_docker
-p 3306:3306  表示这个容器中使用3306(第二个)映射到本机的端口号也为3306(第一个) 
-e MYSQL_ROOT_PASSWORD=123456  初始化root用户的密码
-d                   表示使用守护进程运行,即服务挂在后台
-v 表示挂载宿主机目录 到容器目录  conf.d 配置目录  logs 日志目录  data 数据目录
--default-authentication-plugin=mysql_native_password   docker的方式启动mysql8修改默认加密方式

--mysql_native_password=ON    docker的方式启动mysql8.4修改默认加密方式

进入MySQL容器,

docker exec -it mysql-3308 /bin/bash

登陆mysql

mysql -u root -p

Enter password:  #输入 初始化密码 123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
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.

1,容器中登录mysql,查看mysql的版本

mysql> status;

mysql  Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)

2,进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)授权

mysql> GRANT ALL ON *.* TO 'root'@'%'; 

刷新权限

mysql> flush privileges; 

此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则

更改加密规则

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

更新root用户密码

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MySQL2019&'; 

刷新权限

mysql> flush privileges; 

OK,设置完成,再次使用 Navicat 连接数据库

退出mysql数据库

mysql> exit;

退出当前mysql容器

exit;

在麒麟v10SP1系统中安装注意事项: 1、打开 【安全中心】 【应用保护】 关闭 应用来源程序检查 关闭 应用程序执行控制 关闭 应用防护控制

2、修改 mysql.cnf 配置文件权限

# 注:my.cnf设置为用户可读写,其他用户不可写.
chmod 644 /etc/my.cnf 

防止 mysql启动报错

Warning: World-writable config file ‘/etc/my.cnf’ is ignored

优化mysql所用内存

通过docker查看容器使用内存情况

docker stats

一般情况下,默认装的Mysql是8.0以上,占用内存在350M以上,这个对于小机器来说,占比还是比较大的,可以优化。

进入文件夹

cd /home/docker/mysql/conf.d/

查看 .cnf 文件,如果没有,随便新建个,例如

vim my.cnf

输入内容,并保存

[mysqld] 
performance_schema = OFF  

重启mysql 容器

docker restart mysql 容器的id 

再查看

docker stats

清理linux中buff/cache过大的方法

第一步:sync先同步一下

sync

第二步:清cache

echo 3 > /proc/sys/vm/drop_caches