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

相关推荐
武子康34 分钟前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王39 分钟前
《MySQL 数据库备份与恢复》
mysql
Ljw...1 小时前
索引(MySQL)
数据库·mysql·索引
OpsEye1 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...1 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
i道i9 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
Oak Zhang10 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
久醉不在酒11 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
WindFutrue12 小时前
使用Mybatis向Mysql中的插入Point类型的数据全方位解析
数据库·mysql·mybatis
意疏13 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker