使用Docker安装Mysql
- 首先,从阿里云的Docker Hub 上pull一个MySQL的image.
[centos@loovelj~]$ docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7
5.7: Pulling from acs-sample/mysql
d4bce7fd68df: Pull complete
a3ed95caeb02: Pull complete
01588229585e: Pull complete
ada32b818a1a: Pull complete
ac7528e308ac: Pull complete
44e3fb8779c7: Pull complete
bfcca86efc6a: Pull complete
32da415dff2e: Pull complete
aae6d9712a36: Pull complete
3148136ce9cc: Pull complete
Digest: sha256:32ff2f404c3bd199aaec2e6d19d91d59673e40d7394732124f91dd72a2e1ed97
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7
- 查看下载镜像,就会看到已经有了
[centos@loovelj~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1.0 523e7db0e264 11 minutes ago 98.3MB
ubuntu latest dd6f76d9cc90 7 days ago 122MB
hello-world latest 725dcfab7d63 8 days ago 1.84kB
registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 5.7 ec7e75e5260c 23 months ago 360MB
- 名字太长,修改为短的tag
[centos@loovelj~]$ docker tag registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 mysql:5.7
[centos@loovelj~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1.0 523e7db0e264 12 minutes ago 98.3MB
ubuntu latest dd6f76d9cc90 7 days ago 122MB
hello-world latest 725dcfab7d63 8 days ago 1.84kB
mysql 5.7 ec7e75e5260c 23 months ago 360MB
registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 5.7 ec7e75e5260c 23 months ago 360MB
- 根据镜像创建容器
[centos@loovelj~]$ docker create -it mysql:5.7
62c975b37ad25b03914eb61e05088019f37ff9cb049a682ac02f20fac1761a4d
- 启动MySQL容器
[centos@loovelj~]$ docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=sgcc -d -i -p 3306:3306 mysql:5.7
2a7a85124400be6fd47e0d97cf5d602456b1db1a11c6331747fe662481eea537
[centos@loovelj~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a7a85124400 mysql:5.7 "/entrypoint.sh my..." 9 seconds ago Up 8 seconds 0.0.0.0:3306->3306/tcp mysqlserver
188099665d1e ubuntu:latest "/bin/bash" 23 hours ago Up 23 hours angry_spence
- 进入MySQL终端
[centos@liujun ~]$ docker exec -it 2a7a85124400 /bin/bash
root@2a7a85124400:/# mysql -h 127.0.0.1 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.9 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
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>
- 3.访问Mysql数据库
- 由于我们在上面使用了-p参数映射了容器的3306端口到宿主机的3306端口,此时我们可以直接访问宿主机的3306端口来访问Docker中的mysql服务
mysql -h 127.0.0.1 -u root -p
数据库备份
docker exec -it da0c1f5490f6 mysqldump -uroot -proot mysqlserver > /dfq/mysqldata/mysqlbakup_20210523.sql
- da0c1f5490f6 :容器的id
- uroot :用户名rot
- -proot :密码root
- mysqlserver :所需要备份的数据库名字
- /dfq/mysqldata/mysqlbakup_20210523.sql 备份文件地址
数据库恢复
- 进入容器
docker exec -it mysql bash
- 进入mysql
mysql -uroot -p
- 打开数据库
use mysql;
- 使用备份sql恢复数据库
source /usr/src/mysql20200706.sql
定时备份数据库
-
编辑一个脚本文件dataBaseName.sh
简单写法
#!/bin/bash docker exec -it da0c1f5490f6 mysqldump -uroot -proot gowork > /dfq/mysqldata/mysql_gowork_$(date +%Y%m%d_%H%M%S).sql #删除10天前的备份文件(-exec rm -rf {} \是固定写法,删除查询出来的数据) find /dfq/mysqldata/ -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
复杂写法
#!/bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/dfq/mysqldata/gowork
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "==========开始备份==========="
echo "备份的路径是 $BACKUP/$DATETIME.tar.gz"
#容器ID
DOCKER_ID=da0c1f5490f6
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=yuanchangliang
#创建备份的路径
#如果备份的路径文件夹存在就使用,否则创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
docker exec -it ${DOCKER_ID} mysqldump -u${DB_USER} -p${DB_PWD} $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件(-exec rm -rf {} \是固定写法,删除查询出来的数据)
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "==========备份完成==========="
目前我正在使用的:
BACKUP=/dfq/mysqldata/gowork
#当前时间作为文件名
DATETIME=$(date +%Y-%m-%d-%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "==========开始备份==========="
echo "备份路径是 $BACKUP/$DATETIME.sql"
#容器ID
DOCKER_ID=da0c1f5490f6
echo "备份的容器是 $DOCKER_ID"
#用户名
DB_USER=root
#密码
DB_PWD=root
#数据库
DATABASE=gowork
echo "备份的数据库$DATABASE"
#创建备份路径
#如果备份路径存在就使用,否则就创建
[ ! -d "$BACKUP" ] && mkdir -p "$BACKUP"
#ִ执行备份命令
docker exec -it da0c1f5490f6 mysqldump -u$DB_USER -p$DB_PWD $DATABASE > $BACKUP/$DATETIME.sql
#删除10天前的备份文件(-exec rm -rf {} \固定写法删除查询出来的数据)
find $BACKUP -mtime +10 -name "*.sql" -exec rm -rf {} \;
echo "==========备份完成==========="
- 添加可执行权限;chmod +x dataBaseName.sh
- contab -e ,添加 定时任务
crontab时间规则
5 * * * * 每小时第5分钟执行
*/5 * * * * 每5分钟执行
0 2 * * * 每天凌晨2点执行
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/bin/systemctl start crond.service //启动服务
/bin/systemctl stop crond.service //关闭服务
/bin/systemctl restart crond.service //重启服务
/bin/systemctl reload crond.service //重新载入配置
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
注意
如果在使用crontab过程中出现了一下错误
You have mail in /var/spool/mail/root
你可以到、var/mail目录下 找到你的用户文件,使用
cat 文件名
可以查看错误信息