Linux自动备份MySql数据库
手动备份执行脚本:
1 | mysqldump --socket= /tmp/mysql .sock -ubackupdb -p123456 --databases test test01 > test_20221121.sql; |
创建自动备份脚本
1.创建备份数据库文件的根目录:
1 | # mysql数据库文件目录<br><br>mkdir -p /data/db/mysql |
2.创建数据库的备份文件目录
1 | cd /data/db/mysqlmkdir backup |
3.编写shell脚本
3.1 在/usr/sbin目录下分别创建数据库对应的 mysql_govern_db_backup.sh 、mysql_sict_form_db_backup.sh、mysql_sict_management_db_backup.sh、mysql_sict_oaflowwork_db_backup.sh 文件:
1 2 3 4 5 | # 创建文件 touch mysql_govern_db_backup.sh # 打开编辑文件 vi mysql_govern_db_backup.sh # 输入以下内容#!/bin/bash |
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 47 48 49 50 51 52 53 54 55 56 | #!/bin/bash #================基础参数=============== user= "backupdb" password= "123456" host=localhost port= "3306" #备份库名列表,括号内多个数据库空格隔开 db_name_array=( "govern" "form" "management" "oaflowwork" ) #备份位置(若不存在,会自动创建) datafile_path= "/data/db/mysql/backup" #mysqlDump的绝对位置,基本为mysql安装路径 mysqlDump_path= "/usr/bin/mysqldump" #是否删除.sql文件(包含子目录): ON开启,其他字符不开启 rf_switch= "ON" #数据保留天数(按文件修改时间计算) expire_day=10 # socket文件路径 socket_path= /tmp/mysql .sock #================非开发人员勿改================ #备份最终路径 bak_path= "${datafile_path}/${db_name}" #错误日志文件名称 error_log= "${bak_path}/${db_name}_error.log" #================备份执行指令================ #判断文件夹,不存在则创建 if [ ! -d "$bak_path" ] then mkdir -p ${bak_path} echo "已创建文件夹${bak_path}" fi #判断mysql是否开启 checkPort=` lsof -i:${port} | wc -l` if [ "$checkPort" -gt "0" ] then echo "mysql 已启动" else echo "mysql 未启动无法进行备份" echo "mysql 未启动无法进行备份" > $error_log fi #执行备份 echo "执行备份" for db_name in ${db_name_array[*]} do ${mysqlDump_path} --socket=${socket_path} -u${user} -p${password} --host=${host} -q -R --databases $db_name | gzip > ${bak_path} "/" $db_name$ '_' $( date +%Y%m%d_%H%M%S).sql.gz 2>>${error_log} done #删除过期文件 echo "删除过期文件" if [ $rf_switch == "ON" ] then find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f fi echo "脚本执行完毕" |
ps:在编辑状态下,使用快捷键:ggdG ,可以清空文件内容。
按esc键然后输入英文冒号继续输入wq,保存并退出。
3.2 设置脚本的执行权限
1 | chmod +x /usr/sbin/mysql_db_backup .sh |
3.3 执行测试脚本是否能正常备份
1 | sh /usr/sbin/mysql_db_backup .sh |
3.4 进入到目录中查看是否存在备份文件
1 | cd /data/db/mysql/govern |
4.设置定时执行
1 2 3 4 | # 加入到定时服务中 crontab -e # 设置 周二至周六凌晨 2:30 执行<br># {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} <br># minute: 区间为 0 – 59 <br># hour: 区间为0 – 23 <br># day-of-month: 区间为0 – 31 <br># month: 区间为1 – 12. 1 是1月. 12是12月. <br># Day-of-week: 区间为0 – 7. 周日可以是0或7. 0 2 * * 2-6 /usr/sbin/mysql_db_backup .sh |
5. 查看定时指令
1 | crontab -l |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了