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

相关推荐
金刚猿7 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong7 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿8 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
Goat恶霸詹姆斯9 小时前
mysql常用语句
数据库·mysql·oracle
70asunflower11 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
春日见12 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe212 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
洛豳枭薰12 小时前
Innodb一次更新动作
mysql
星火s漫天13 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
xcLeigh13 小时前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3