简单易懂的MySQL数据库定时备份方法 (mysql数据库如何定时备份数据库备份)

MySQL数据库是现今最常用的关系型数据库之一,它被广泛应用于各种各样的应用程序中,如网络应用、企业级软件、电子商务网站等等。但是,由于各种原因,比如软件故障、服务器故障或者人为失误,数据库中存储的数据有可能会丢失或者损坏。因此,数据库备份是非常重要的任务。在这篇文章中,我们将介绍如何使用Linux系统中的Crontab功能实现MySQL数据库的定时备份。

Crontab是一个用于在Linux操作系统中定时执行任务的工具。它允许用户设置定时任务,例如备份MySQL数据库,清理系统日志等等。因此,我们可以使用Crontab功能,在MySQL数据库中定时备份数据。

之一步:创建MySQL备份脚本

创建MySQL备份脚本是我们备份MySQL数据库的之一步。在这个脚本中,我们将使用mysqldump命令来备份我们的数据库。mysqldump命令可以将MySQL数据库中的所有表导出为单独的SQL文件,这些文件包含数据库的完整结构和数据。对于大型数据库,备份操作可能需要一些时间。因此,我们可以在备份脚本中加入一些选项来压缩备份文件,以节省存储空间,并减少备份运行时间。

以下是一个示例MySQL备份脚本:

“`

#!/bin/bash

# MySQL备份脚本

# 设置备份目录和MySQL登录凭据

BACKUP_DIR=”/var/backups/mysql”

MYSQL_USER=”root”

MYSQL_PASSWORD=”password”

# 创建备份目录(假设它不存在)

mkdir -p ${BACKUP_DIR}

# 备份日期

BACKUP_DATE=$(date +%Y-%m-%d)

# MySQL备份文件名

BACKUP_FILE=”backup-${BACKUP_DATE}.sql”

# 压缩MySQL备份文件

COMPRESSED_BACKUP_FILE=${BACKUP_FILE}.gz

# 完整备份MySQL数据库

mysqldump -u ${MYSQL_USER} -p${MYSQL_PASSWORD} –all-databases > ${BACKUP_DIR}/${BACKUP_FILE}

# 压缩备份文件

gzip ${BACKUP_DIR}/${BACKUP_FILE}

# 删除超过7天的备份文件

find ${BACKUP_DIR} -type f -mtime +7 -name “*.gz” -exec rm {} \;

# 输出备份文件名

echo “MySQL备份已完成:${BACKUP_DIR}/${COMPRESSED_BACKUP_FILE}”

“`

上面的脚本分为三部分:

一、设置备份目录和MySQL登录凭据

我们需要设置一个备份目录来存储备份文件,并指定MySQL登录凭据。你需要替换MYSQL_USER和MYSQL_PASSWORD的值以反映你的正确凭据。

二、备份MySQL数据库

在这一部分,我们使用mysqldump命令备份MySQL数据库。该命令将导出所有数据库的表,并将其存储在一个名为backup-.sql的单独文件中。

三、删除旧的备份文件

在这一部分,我们使用find命令查找超过7天的备份文件,并将它们删除。

第二步:添加Crontab任务

在MySQL备份脚本创建完成之后,我们需要将任务添加到Crond中。Crond是一个定时任务管理器,它允许用户在后台运行脚本,定时执行一些任务。我们可以通过编辑crontab文件来添加定时任务。使用以下命令打开crontab文件:

“`

$ crontab -e

“`

这个命令将打开一个文本编辑器,允许我们编辑Crontab任务。

然后,我们可以在crontab文件中添加以下行:

“`

# 每晚10点备份MySQL数据库

0 22 * * * /bin/bash /path/to/mysql/backup.sh >/dev/null 2>&1

“`

以上示例中的Crontab功能表示每天晚上十点运行MySQL备份脚本(backup.sh)并且将标准输出和标准错误输出重定向至/dev/null。

在这个例子中,如果你将MySQL备份脚本放在/home/user/backup.sh,则Crontab行看起来像这样:

“`

0 22 * * * /bin/bash /home/user/backup.sh >/dev/null 2>&1

“`

我们只需要保存并关闭crontab文件即可。

结束语:

相关问题拓展阅读:

Mysql数据库备份的几种方法

数据备份是数据容灾的最后一道防线,即便有着两地三中心的架构,备份也依然重要。如果备份出问题,备份时影响了交易业务,备份数据无法恢复,这些也是企业难以承受的。所以选择合适的备份工具尤为重要。

每个企业级数据库都会有配套的备份工具,MEB(MySQL Enterprise Backup)就是MySQL企业版中非常重要的工具之一,是为企业级客户提供的数据备份方案。

Xtrabackup一直作为MEB 开源版备胎而存在,从MySQL 8.0开始情况可能会变得有所不同。

在 MySQL 8.0的Backup Lock、Redo Log Archiving、Page Tracking等新特性的加持下,MEB备份/恢复体验会更好,目前xtrabackup还不支持这些特性。

MySQL 企业版还有哪些功能?

特性1:Backup Lock

8.0之前使用xtrabackup或MEB做物理备份,为了保证备份时InnoDB引擎表与其他引擎数据文件、及binlog日志的一致性会上全局读锁,再拷贝非InnoDB文件,这期间MySQL会变成只读,数据无法写入。表数量越多,可能加上时间越长,如果使用的xtrabackup 不小心没加rsync参数,逐个拷贝frm文件,锁定时间会更长,对业务影响较大。

我曾遇到过部署在虚拟机的实例有12023多张表,当时使用的xtrabackup,备份脚本中没加rsync参数,结果锁了十几分钟,而MEB就没有这样的问题。

MySQL 8.0支持轻量级备份锁 LOCK INSTANCE FOR BACKUP,数据字典也重构了由InnoDB存储。若不创建非InnoDB表,MEB默认使用备份锁获取binlog日志一致性位置,并阻止DDL操作,但不影响DML操作。

只有InnoDB表,仅上备份锁

请点击输入图片描述

若有非InnoDB表,上全局锁

请点击输入图片描述

特性2:Redo Log Archiving

MEB能做到在线热备,备份时不影响数据库读写,这是利用了InnoDB事务日志,在备份期间持续监视redo log的变化,读取增量变化,写入到ibbackup_logfile,也就不需要上锁来保障备份一致性。(对非InnoDB的文件需要上读锁拷贝)

如果备份期间数据库写入负载特别大,而写入ibbackup_logfile速度较慢,redo log size也不大,很可能会出现ibbackup_logfile的写入速度跟不上redo log记录生成速度,redo log 空间不够时需要覆写日志文件,那么来不及写入ibbackup_logfile的记录会丢失,导致备份失败。

MEB 4.1对此做了优化,将redo log处理线程拆分成多线程分工合作,提高处理redo log的效率,降低了redo log覆写造成备份失败的概率,但redo log新增速度和ibbackup_logfile写入速度悬殊太大,问题依然会发生。

MySQL 8.0.17支持了redo log archiving 彻歼颤底解决了此问题,备份前设置innodb_redo_log_archive_dirs,指定redo log归档目录。MEB备份时自动开启日志归档拦改搭,当checkpoint时会将旧记录归档到此目录,后续从归档文件中读取redo日志记录,避免了覆写可能导致的redo记录丢失。

请点击输入图片描述

注意:innodb_redo_log_archive_dirs 不能在数据目录下,目录权限要求是700

特性3:Page Tracking

Page Tracking 是为优化增量备份效率,减少不必要的数据页扫描。

增量备份当前有3种扫描模式:

page-track:利用LSN精确跟踪上次备份之后被修改页面,仅复制这些页面,效率最快。

optimistic:扫描上次备份之后被修改的InnoDB 数据文件中,找出并拷贝修改的页面。依赖系统时间,使用存在限制。

full-scan:扫描所有InnoDB数据文件,找出并拷贝自上次简拿备份之后修改的页面,效率最慢

1、利用page-track增量备份,需先安装备份组件

mysql> INSTALL COMPONENT “

2、在全备前开启page-track

SELECT mysqlbackup_page_track_set(true);

3、全备之后,做增量备份时指定若满足page tracking条件,默认会使用page-track模式,否则会使用full-scan模式,也可以指定–incremental=page-track。

mysqlbackup –incremental-backup-dir=backup_incr –trace=3 –incremental=page-track –incremental-base=history:last_full_backup backup

incremental-base有3种选择

last_backup:基于前一次备份做增备,前一次备份可能是增备,也可能是全备。这种方式全备之间可能会有多个增备,每次增量可能比较小,但恢复时需要逐个合并。

last_full_backup:基于前一次全备做增备。这种方式增备会越往后体积可能越大,但恢复时只需要合并最后一次增量备份。

dir:基于前一次的备份目录,前一次备份可能是增备,也可能是全备。

测试对比full-scan 和page-track ,在变更页小于总体50%的情况下 ,备份效率至少能有1倍的速度提升。

page-track 模式 磁盘读写均衡,说明读写的都是修改页面。

请点击输入图片描述

full-scan模式 磁盘读写差别很大,说明读了很多未修改的页面。

请点击输入图片描述

1、复制date文件夹备份

============================

假想环境:

MySQL 安装位置:C:\MySQL

论坛数据库名称为:bbs

数据库备份目的地:C:\db_bak\

============================

新建db_bak.bat,写入以下代码

*******************************Code Start*****************************

net stop mysql

xcopy c:\mysql\data\bbs\*.* c:\db_bak\bbs\%date:~0,10%\ /S /I

net start mysql

*******************************Code End *****************************

然后使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨3点执行back_db.bat)

释:备份和恢复的操作都比较简单,完整性比较高,控制备份周期比较灵活,例如,用%date:~0,10%。此方法适合有独立主机但对mysql没有管理

经验的用户。缺点是占用空间比较多,备份期间mysql会短时间断开(例如:针对30M左右的数据库耗时5s左右),针对%date:~0,10%的用法

参考。李掘

2、mysqldump备份成sql文件

==============

假想环境:

MySQL 安装位置:C:\MySQL

论坛数据库名称为:bbs

MySQL root 密码:123456

数据库备份目的地:D:\db_backup\

脚本:

rem *******************************Code Start*****************************

@echo off

set “Ymd=%date:~,4%%date:~5,2%%date:~8,2%”

C:\MySQL\bin\mysqldump –opt -u root –password=bbs > D:\db_backup\bbs_%Ymd%.sql

@echo on

rem *******************************Code End*****************************

将以上代码保存为backup_db.bat

然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天历衡凌晨5点执行back_db.bat)

说明:此方法可以不用关闭数据库,并且可以按每一天的时间来名称备份文肢扰做件。

通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为,通过%date:~5,2%则可以得到02。(日期的字符串的下标是从0开始的)

3、利用WinRAR对MySQL数据库进行定时备份。

对于MySQL的备份,更好的方法就是直接备份MySQL数据库的Data目录。下面提供了一个利用WinRAR来对Data目录进行定时备份的方法。

首先当然要把WinRAR安装到计算机上。

将下面的命令写入到一个文本文件里

*******************************Code Start*****************************

net stop mysql

c:\progra~1\winrar\winrar a -ag -k -r -s d:\mysql.rar d:\mysql\data

net start mysql

*******************************Code End*****************************

保存,然后将文本文件的扩展名修改成CMD。进入控制面版,打开计划任务,双击“添加计划任务”。在计划任务向导中找到刚才的CMD文件,接着为这个任务指定一个运行时间和运行时使用的账号密码就可以了。

这种方法缺点是占用时间比较多,备份期间压缩需要时间,mysql断开比之一种方法更多的时间,但是对于文件命名很好。

如何定时备份远程mysql数据库

在百度里面搜索“多备份”,注册一个账号

登陆成功后,找到数据库备猜早份

进行数据库远程授权:要备份成功,得先对数据库进行远程授权,允许备份主机远程访问你的数据库。

填写你的数据库IP,数据库用户名,密码等参数信息

选择存储位置,备份频率等

至此,数据库仔哗备份任务就创建成功了。然后,多备份就会自动定时的帮你念兆行备份你的数据库。

mysql数据库如何定时备份数据库备份的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql数据库如何定时备份数据库备份,简单易懂的MySQL数据库定时备份方法,Mysql数据库备份的几种方法,如何定时备份远程mysql数据库的信息别忘了在本站进行查找喔。


数据运维技术 » 简单易懂的MySQL数据库定时备份方法 (mysql数据库如何定时备份数据库备份)