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的过程已经全部完成。

相关推荐
Vect__15 小时前
MySQL 数据类型和约束:从字段设计到表结构建模
数据库·mysql
梦梦代码精15 小时前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范
小的博客16 小时前
windows下安装Docker Desptop
运维·docker·容器
李迟16 小时前
我的docker随笔48:Docker版本号演进史
docker
阿拉雷️17 小时前
部署实战】Docker + AI Agent:让AI一键部署Spring Boot到服务器,从打包到上线只要一条指令
人工智能·spring boot·docker
雨声不在17 小时前
macos 12使用docker
macos·docker·容器
Mico1817 小时前
MySQL 8.0.35 基于GTID 主从复制安装增强半同步复制
android·mysql·adb
CodexDave1 天前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
王琦03181 天前
生产环境中使用通用二进制包安装
mysql
BullSmall1 天前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman