1.创建文件夹储存备份文件:
mkdir /var/lib/mysqlbackup
cd /var/lib/mysqlbackup
2.编写备份脚本代码:
vi dbbackup.sh
#!/bin/sh
cd /usr/bin/
docker exec -i e79de85b249a /usr/bin/mysqldump -uroot -p123456 eermms > /var/lib/mysqlbackup/eermms`date +%Y-%m-%d_%H%M%S`.sql
cd /var/lib/mysqlbackup
rm -rf `find . -name '*.sql' -mtime 10`
这个是docker备份方式,e79de85b249a为容器id,存入/usr/bin/mysqldump,选择备份eermms
第二句为定时清除十天前的备份
如果是centos内直接备份:
mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz
或者指定mysqldump位置备份:
/usr/bin/mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz
另外一种定期清除(没试验过):
find /root/mysql_backup/ -mtime +30 -type f | xargs rm -f
3.赋予脚本权限
chmod +x dbbackup.sh
这一步是赋予dbbackup.sh可执行权限
可以开启定时任务前执行以下脚本
./dbbackup.sh
查看文件是不是多了一个文件,vi进去看看
-- MySQL dump 10.13 Distrib 5.7.30, for Linux (x86_64)
--
-- Host: localhost Database: eermms
-- ------------------------------------------------------
-- Server version 5.7.30
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `area`
--
DROP TABLE IF EXISTS `area`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `area` (
`areaId` int(11) NOT NULL AUTO_INCREMENT COMMENT '行政区划ID 20200421改 行政单位ID',
`parentId` int(11) DEFAULT '0' COMMENT '上级行政区域ID 20200421改 上级行政单位ID ',
`sublevelId` int(11) DEFAULT NULL,
`areaName` varchar(255) DEFAULT NULL COMMENT '行政区域名称 20200421改 行政单位名称 ',
`level` varchar(255) NOT NULL COMMENT '行政级别',
PRIMARY KEY (`areaId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
如果看到这种类似的就是成功了。可以去navicat导入一下数据库看看是不是可以成功导入。
4.配置定时任务
crontab -e
如果报错“command not found”,说明没有安装,我们选择安装一下
yum -y install vixie-cron
yum -y install crontabs
安装后将如下内容粘贴进去,代表每天晚上9点执行这个脚本
00 21 * * * /var/lib/mysqlbackup/dbbackup.sh
至此数据库配置定时备份完成!
记一次解决错误:
docker备份sql时,执行脚本可以正常备份,但是启动定时任务时备份出来的数据库就是空的。
希望可以看一下备份的日志,所以修改定时任务的脚本,让他输出log。
32 18 * * * /var/lib/mysqlbackup/dbbackup.sh > /data/hhh.log 2>&1
查看log提示
the input device is not a TTY
解决方法:
docker exec -it (去掉t)因为-t是指分配一个伪终端。这里不需要分配伪终端。
用定时任务执行docker命令的脚本的时候报错如上标题,tty(终端设备的统称): tty一词源于Teletypes,或 teletypewriters。这个的意思是说后台linux执行的时候没有终端设备。我们一般执行docker里的命令时候都喜欢加上 -it 这个参数,这里的-it 就是表示终端设备。所以,如果我们docker执行后台运行的任务或者程序直接去除 -it 这个参数就不会出现这个报错了!
(网络上的资料都是docker备份使用:docker exec -it e79de85b249a /usr/bin/mysqldump -uroot -p123456 eermms > /var/lib/mysqlbackup/eermmsdate +%Y-%m-%d_%H%M%S
.sql)
懵。。。你们这样写真的可以备份咩?
注:
1.备份数据首先要确定已经给root设置了密码,否则会报mysqldump执行时
Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
解决办法:
mysql -hserverip -uroot -p
mysql> use mysql; Database changed
mysql> update user set password=password('new password') where user='root'; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) //这个命令是给用户赋予了新的权限或者密码,直接读到内存中不需要重启数据库防止出错
mysql> quit
2.提示
Warning: Using a password on the command line interface can be insecure.
可能是为了确保数据库的安全性采用的保护机制。解决方法:修改数据库配置文件。
我们需要修改数据库配置文件,这个要看我们数据库的配置的,有些是在/etc/my.cnf,有些是/etc/my.conf
我们需要在[client]部分添加脚本:(找到[client],在他下面添加)
host=localhost
user=数据库用户
password='数据库密码'
小贴士:
二、crontab启动和关闭
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态
三、crontab定时任务时间格式
* * * * * command
分 时 日 月 周 命令
minute(分)可以设置0-59分
hour(小时)可以设置0-23小时
day of month(日期)可以设置1-31号
month(月份):可以设置1-12月
day of week(周):可以设置0-7星期几,其中0和7都代表星期天,或者我们也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一等等
四、crontab 常用指令
crontab -l:可以列出crontab的内容
crontab -e:可以使用系统预设的编辑器,开启crontab
时间格式举例:
00 21 * * * reboot
上面的例子表示每晚的21:00重启服务器。
00 21 1,10,20 * * reboot
上面的例子表示每月1、10、20号的21:00重启服务器
00 21 * * 6,0 reboot
上面的例子表示每周六、周日的21:00重启服务器
0,30 18-22 * * * reboot
上面的例子表示在每天18:00至22:00之间每隔30分钟重启服务器。
0 23-8/1 * * * reboot
晚上11点到早上8点之间,每隔一小时重启服务器