docker安装MySQL

注意:

使用docker安装mysql需要注意的是一定要挂载数据卷,通常情况下,并不建议在开发或者生产等环境中使用docker安装mysql。

1、查询mysql镜像文件

复制代码
 [root@localhost docker]# docker search mysql

2、拉取mysql镜像文件

复制代码
 [root@localhost docker]# docker pull mysql

注意:

(1)在不指定版本号的情况下,默认拉取的是最新版本的mysql,即latest,如需要下载特定版本的mysql,可以使用如下方式:

docker pull mysql:5.7 #指定下载5.7版本的mysql

docker pull mysql:8.0 #指定下载8.0版本的mysql

(2)如果下载的速度比较慢,可以通过docker info指令查看当前docker镜像源地址,建议使用阿里云加速器,下载速度比较快。

3、查看镜像文件

复制代码
 [root@localhost docker]# docker images

通过以上指令,可以看出我们已经将mysql的镜像文件成功拉取下来,接下来就开始运行mysql容器。

4、启动mysql容器

bash 复制代码
 [root@localhost docker]# docker run --name mysql -p 13306:3306 --restart=always --privileged=true \
 -v /usr/local/mysql/log:/var/log/mysql \
 -v /usr/local/mysql/data:/var/lib/mysql \
 -v /usr/local/mysql/conf:/etc/mysql \
 -v /etc/localtime:/etc/localtime:ro \
 -e MYSQL_ROOT_PASSWORD=root 
 -d mysql:8.0

4.1、命令解释

命令 功能
--name mysql 创建的容器名称
-p 13306:3306 指定宿主机端口与容器端口映射关系
--restart=always 总是跟随docker启动
--privileged=true: 获取宿主机root权限
-v /home/usr/local/mysql/log:/var/log/mysql 映射日志目录,宿主机:容器
-v /usr/local/mysql/data:/var/lib/mysql 映射数据目录,宿主机:容器
-v /usr/local/mysql/conf:/etc/mysql 映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro 让容器的时钟与宿主机时钟同步,避免时区的问题 ro是read only的意思,就是只读
-e MYSQL_ROOT_PASSWORD=root 指定mysql的root用户的密码为root
-d mysql:latest 后台运行mysql容器,版本是8.0

4.2、可能的问题

初次执行本条命令时,mysql容器可能会启动失败,失败原因在于此时容器内部可能尚未配置mysql相关文件的存放位置,此时通过docker ps查看容器运行状态,就会发现mysql容器一直在restart状态,如下图所示。

如果没有该问题,直接跳到第5步骤。

4.3、问题解决方案

此时如果容器一直在重启状态,我们就需要在宿主机映射目录下创建mysql的配置文件my.cnf,这和我们通过常规方式安装mysql的步骤是一样的。执行步骤如下:

bash 复制代码
 # 进入Linux映射的mysql目录
 [root@localhost docker]# cd /home/usr/local/mysql
 [root@localhost mysql]# ll
 total 0
 drwxr-xr-x. 2 root root 6 Aug  4 23:44 conf
 drwxr-xr-x. 2 root root 6 Aug  4 23:44 data
 drwxr-xr-x. 2 root root 6 Aug  4 23:44 log
 # 进入配置文件目录
 [root@localhost mysql]# cd conf 
 [root@localhost conf]# ll
 total 0
 # 编辑my.cnf文件
 [root@localhost conf]# vim my.cnf

my.cnf文件中内容如下:

bash 复制代码
 [client]
 default-character-set=utf8mb4
 [mysql]
 default-character-set=utf8mb4
 [mysqld]
 # 设置东八区时区
 default-time_zone = '+8:00'
 # 设置密码验证规则,default_authentication_plugin参数已被废弃
 # 修改为authentication_policy
 #default_authentication_plugin=mysql_native_password
 authentication_policy=mysql_native_password
 # 限制导入和导出的数据目录为空,不限制导入到该处的数据目录;
 # 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
 # 为NULL,禁止导入与导出功能
 #secure_file_priv=/var/lib/mysql
 secure_file_priv=
 init_connect='SET collation_connection = utf8mb4_general_ci'
 init_connect='SET NAMES utf8mb4'
 character-set-server=utf8mb4
 collation-server=utf8mb4_general_ci
 skip-character-set-client-handshake
 skip-name-resolve

my.cnf文件修改完成后,重启mysql容器。

4.4、重启动容

复制代码
 [root@localhost docker]# docker restart mysql

4.5、查看容器运行状态

复制代码
 [root@localhost docker]# docker ps​​​​​​​

5、设置mysql跟随docker自启动

bash 复制代码
# 设置mysql跟随docker自启动
[root@localhost docker]# docker update mysql --restart=always
# 重启mysql
[root@localhost docker]# docker restart mysql

6、开启远程访问授权

mysql远程访问未授权的情况下,通过外部机器去发起请求连接时,会提示连接拒绝,因为默认的root不具有远程连接的权限。

此时我们需要进入到mysql容器内部,开启远程连接的权限。

6.1、进入mysql容器内部并登录

注意:

mysql -u root -p 输入完成后,此时不需要输入密码,直接回车就可以进入mysql工作台。

bash 复制代码
[root@localhost conf]# docker exec -it mysql /bin/bash
root@8dc685cb34ba:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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> 

6.2、选择数据库mysql

bash 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

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

6.3、查看用户连接情况

bash 复制代码
mysql> select host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

通过查询结果,可以看出root用户只有localhost连接权限,接下来开始修改用户登录权限。

6.4、修改用户登录权限及密码认证方式

bash 复制代码
mysql> update user set host = '%' where user = 'root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
 
mysql> ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.02 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

6.5、Navicate客户端连接mysql

至此,docker安装mysql的过程已经全部完成。

相关推荐
烟雨书信13 分钟前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记16 分钟前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花22 分钟前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay23 分钟前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu31 分钟前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记5 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子5 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
程序员岳焱9 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
FrankYoou9 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
隆里卡那唔9 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j