Linux下定时备份mysql数据库
环境:
- Centos7
- MySQL5.5
一、安装MySQL
Linux下安装mysql的步骤这里就不再详细展开了,可以自行百度。
或者是使用宝塔面板快速上手:宝塔Linux面板安装教程
1、确保mysql能正常登录:
2、确保Navicat能够正常连接mysql数据库(执行下面两个步骤)
平时如果在第一次进行连接的时候,如果出现了这个错误,可以参考:
解决Navicat远程连接数据库出现错误:1130-host ... is not allowed to connect to this MySql server
出现这个把端口3306给开放。这样才能够通过Navicat进行连接
二、备份/导入数据库文件命令
备份:
参考:https://www.cnblogs.com/zhangzhixi/p/17332339.html
还原(所有):
1 2 3 4 | 1. 在系统命令行中,输入如下实现还原: mysql>mysql -uroot -p123456 < /data/mysqlDump/mydb.sql 2. 在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原: mysql>source /data/mysqlDump/mydb.sql |
还原指定的库
比如备份了所有的库文件,但是只是想还原指定的库,需要确保要还原的这个数据库是存在的,此操作不会覆盖新表以及新表的数据。
1 | mysql -uroot -p密码 --one-database 数据库名 < /data/mysqlDump/mydb_all.sql |
三、编写shell脚本
1、创建目录
在home目录下新建存储备份数据库数据的文件(可以自定义)
1 | mkdir /home/backup |
2、编写shell脚本
这里就简单的进行测试使用,线上的备份依照自己的业务编写:
创建shell脚本文件:
1 2 | [root@localhost home]touch bkDatabaseName.sh [root@localhost home]vim touch bkDatabaseName.sh |
添加内容(密码跟-p之间不要有空格):
1 2 | #!/bin/bash /usr/ local /mysql/bin/mysqldump -uroot -p密码 进行备份的数据库名 > /home/backup/bjpan_$( date +%Y%m%d_%H%M%S).sql |
3、赋权限(赋予shell脚本可执行权限)
1 | chmod 777 bkDatabaseName.sh |
脚本模板:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #!/bin/bash # 保存备份个数,备份31天数据 number=31 # 备份保存路径 backup_dir=/data/mysqlDump # 日期 dd=`date +%Y-%m-%d-%H-%M-%S` # 备份工具 tool=mysqldump # 用户名 username=root # 密码 password=xxx # 将要备份的数据库,-A表示备份全部,如果备份指定多个数据库,用空格分开数据库名称即可 database_name= "mybatis mybatis_plus" # mysql的bin目录 bin_dir=/usr/local/mysql/bin # 如果文件夹不存在则创建 if [ ! -d $backup_dir ]; then mkdir -p $backup_dir; fi # 简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql $bin_dir/$tool -u $username -p$password --databases $database_name > $backup_dir/$dd.sql # 写创建备份日志 echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt # 找出需要删除的备份 delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1` # 判断现在的备份数量是否大于$number count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l` if [ $count -gt $number ] then #删除最早生成的备份,只保留number数量的备份 rm $delfile #写删除文件日志 echo "delete $delfile" >> $backup_dir/log.txt fi |
如上代码主要含义如下:
- 1.首先设置各项参数,例如number最多需要备份的数目,备份路径,用户名,密码等。
- 2.执行mysqldump命令保存备份文件,并将操作打印至同目录下的log.txt中标记操作日志。
- 3.定义需要删除的文件:通过ls命令获取第九列,即文件名列,再通过实现定义操作时间最晚的那个需要删除的文件。
- 4.定义备份数量:通过ls命令加上,统计以sql结尾的文件的行数。
- 5.如果文件超出限制大小,就删除最早创建的sql文件
四、编写定时器任务
两个网站参考cron的使用:
编写定时器任务
crontab -e :编辑任务
写入程序:这表示的是每分钟执行一次上面编写的脚本文件
保存退出,即可执行!
1 | */1 * * * * /home/backup/bkDatabaseName.sh |
crontab -l:列出任务
Crontab服务操作说明:
1 2 3 4 5 6 7 | /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 |
crontab文件的含义
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
分时 日 月 周 命令
其中:
- minute: 表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
Crontab命令参数:
1 2 3 4 5 6 7 8 9 | -u user :用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。 -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:列出计划任务。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话