摘要
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
这里需要使用 mysql
官方镜像,需要精确到具体的版本,可以去 仓库 (opens new window) 查找
# 1.2 拉取镜像
这里使用的是 5.7
版本
docker pull mysql:5.7
1
# 二:启动
# 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
:设值容器名称为mysqlmysql: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
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
# 六:常用文件说明
如果走非docker安装的话,MySQL的安装目录下有一个特别重要的bin目录,这个目录存放许多可执行文件;如果是docker安装,需要先进入到容器,之后选择下面的命令即可查看
> cd /usr/bin
> ls | grep mysql
1
2
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
2
3
4
5
6
7
8