1. 准备工作
- 首先服务器安装好docker环境,可参考博主的知乎链接:linux环境下安装docker - Yourbestboy的文章 - 知乎
2. 拉取镜像
- 查找镜像,命令:
docker search mysql
,如下图:
- 也可以查询指定版本:
docker search mysql:8.0
,如下图:
- 拉去镜像,
docker pull mysql
默认拉取的版本是latest,也可以拉取指定版本:docker pull mysql:8.0
,如下图所示:
- 待拉取完成之后,查看镜像,命令:
docker images
, 如下图所示,出现mysql镜像
3.创建配置文件
-
由于mysql的配置文件要是不挂在到宿主机目录下,修改或者变更配置文件不方便,故需要将配置文件挂载出来,可方便操作,数据同理。但是配置文件在哪里呢?可以查看dockerhub官方的mysql的dockerfile文件进行查看:dockerhub
-
在本地创建mysql的配置文件my.cnf
mkdir -p /opt/mysql/conf/
cd /opt/mysql/conf/
vim my.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
tmpdir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
skip-name-resolve
# 主服务器唯一ID
server-id=1
- 将数据挂在到宿主机目录下
mkdir -p /opt/mysql/mysql
4.启动mysql
- 启动mysql
docker run -d -p 3306:3306 --name mysql -v /opt/mysql/conf/:/etc/mysql/conf.d/ -v /opt/mysql/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
- 参数详解
参数 | 说明 |
---|---|
-d | 标识启动mysql后台运行,切启动完成之后返回容器id |
-p 3306:3306 | 端口映射,前者3306为宿主机端口,后者3306为容器内部端口 |
–name mysql | 容器名 为 mysql 自定义 |
-v /opt/mysql/conf/:/etc/mysql/conf.d/ | -v 挂在 /opt/mysql/conf/:宿主机目录 /etc/mysql/conf.d/:容器内部目录,将容器内部目录挂载到宿主机目录下 |
-v /opt/mysql/mysql:/var/lib/mysql | 同理 |
-e MYSQL_ROOT_PASSWORD=123456 | 设置mysql密码为123456 |
mysql | 最后的mysql为之前所拉取的镜像名称 |
- 运行命令之后,输入:
docker ps
,查看如下图:
至此代表mysql已经安装成功。
4.进入容器内,连接mysql
- 进入容器内部
docker exec -it 73eadb6f35e2 bash
#或者
docker exec -it 73eadb6f35e2 /bin/bash
- 连接mysql
mysql -uroot -p
回车,输入密码:再回车即可,出现如下图所示即成功登录,之后就是mysql的命令操作了,详情可查看博主的:mysql安装
备注:
- 如果需要将mysql容器设置成当docker服务启动的时候,mysql容器随之重启:
docker run -d -p 8080:8080 --name mysql--restart=always mysql
#还有将运行的容器设置根据docker服务启动而启动
docker update --restart=always 容器名字或者容器ID
docker安装的mysql进行定时备份
- 提前准备好脚本以及数据备份存放目录
#!/bin/bash
# 容器名称 容器ID,容器名称都行,建议使用id,不会被更改
container_name="73eadb6f35e2"
# 数据库账户
mysql_name="root"
# 数据库密码
mysql_pwd="123456"
# 数据库备份根目录
backup_dir="/home/mysqlBak/data"
bakup_log="/home/mysqlBak/log"
# 备份数据库
DATABASES=$(/usr/bin/docker exec -i ${container_name} mysql -u${mysql_name} -p${mysql_pwd} -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql|brp_log")
# 备份数据保留天数
backup_clean_day=5
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $back_dir;
fi
#循环数据库进行备份
for db in $DATABASES
do
echo
echo ----------$BACKUP_FILEDIR/${db}_`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz BEGIN----------
/usr/bin/docker exec -i ${container_name} mysqldump -u${mysql_name} -p${mysql_pwd} --default-character-set=utf8mb4 --single-transaction --source-data=2 --flush-logs --hex-blob --triggers --routines --events --databases ${db} | gzip > ${backup_dir}/${db}`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz
#写创建备份日志
echo "create $bakup_log/${db}-`date "+%Y_%m_%d_%H_%M_%S"`.dupm" >> $bakup_log/log.txt
echo ----------$BACKUP_FILEDIR/${db}_`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz COMPLETE----------
echo
done
echo "done"
#删除5天之前的备份
find ${backup_dir} -type f -mtime +${backup_clean_day} -delete
- 定时任务可查看链接:mysql定时备份,除了脚本略微不同,其他都一样。