Mysql-Docker 安装

1/7/2022 LinuxDocker

摘要

Docker CE Version:20.10.10
Centos Version:CentOS Linux release 7.9.2009 (Core)
Mysql Version:5.7

# 一:安装Mysql

# 1.1 选择版本

docker search mysql
1

search

这里需要使用 mysql 官方镜像,需要精确到具体的版本,可以去 仓库 (opens new window) 查找

search

# 1.2 拉取镜像

这里使用的是 5.7 版本

docker pull mysql:5.7
1

pull

# 二:启动

# 2.1 新建文件夹

新建 mysql 这个文件夹,位置随意

mkdir -p /root/docker/mysql
1

新建文件夹

# 2.1 创建并启动

docker run -d -p 3306:3306 --privileged=true -v /root/docker/mysql/my.cnf:/etc/my.cnf -v /root/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qazwsx123edc --name mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
1

参数说明:

  • -d:表示后台运行
  • -p 3306:3306:表示容器内部端口和服务器端口映射关联
  • --privileged=true:设值MySQL的root用户权限, 否则外部不能使用root用户登陆
  • -v /docker/mysql/conf/my.cnf:/etc/my.cnf:将服务器中的 my.cnf 配置映射到docker中的/docker/mysql/conf/my.cnf配置
  • -v /docker/mysql/data:/var/lib/mysql:同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失
  • -e MYSQL\_ROOT\_PASSWORD:设置MySQL数据库root用户的密码
  • --name mysql:设值容器名称为mysql
  • mysql:5.7:表示从docker镜像mysql:5.7中启动一个容器
  • --character-set-server=utf8mb4:设置字符集
  • --collation-server=utf8mb4\_general\_ci:设置校对集

启动

# 2.3 验证

通过 docker ps 查看启动状态是否成功

验证

# 三:容器终端

## 进入容器
> docker exec -it mysql bash

## 连接Mysql
> mysql -uroot -p

## 创建新用户
> GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test123' WITH GRANT OPTION;
1
2
3
4
5
6
7
8

终端

# 四:客户端连接

连接

连接

# 五:备份数据库

docker exec mysql sh -c ' exec mysqldump --all-databases -uroot -p"qazwsx123edc" ' > /root/docker/mysql/all-databases.sql
1

mysql

# 六:常用文件说明

如果走非docker安装的话,MySQL的安装目录下有一个特别重要的bin目录,这个目录存放许多可执行文件;如果是docker安装,需要先进入到容器,之后选择下面的命令即可查看

> cd /usr/bin
> ls | grep mysql
1
2

  • mysqld:代表着MySQL服务器程序,可直接启动一个服务器进程,但不常用;
  • mysqld_safe:启动脚本,间接调用mysqld,并启动监控进程;监控进程能在服务器进程挂了的时候,帮助重启;另外,会将服务器程序的出错信息和其他诊断信息重定向到某个文件中;
  • mysql.server:启动脚本,间接调用 mysqld_safe;常在后面接参数,例如,启动 mysql.server start,关闭 mysql.server stop
  • mysqld_multi:单机启动多个MySQL服务器进程,mysqld_multi 可对每个进程的启动或关闭进行监控。

# 七:小结

  • 当启动容器端口报错时,可以通过 netstat -lntp | grep 3306 查看哪个程序在占用
  • 可以通过 sudo kill 3306 杀掉占用端口的程序
  • 如果使用阿里云等,请务必把相应端口打开
  • 防火墙拦截端口开放
  • 查看报错日志 docker logs -f -t --tail 100 mysql
## 开放端口:
> systemctl status firewalld
> firewall-cmd --zone=public --add-port=3306/tcp -permanent
> firewall-cmd --reload
## 关闭防火墙:
> systemctl stop firewalld
## 查看错误日志:
> docker logs -f -t --tail 100 mysql
1
2
3
4
5
6
7
8

日志

# 八:参考文献

最后更新: 5/25/2022, 8:46:03 PM