我想使用mysqldump对MySQL数据库进行增量备份。我已经创建了一个脚本并使用crontab进行了备份。它需要备份,而不是增量;它只需要一个完整的数据库备份。我没有找到任何方法来进行增量备份。
我的代码如下:
#!/bin/bash
YEAR=$(date +%Y)
MONTH=$(date +%m)
DAY=$(date +%d)
HOUR=$(date +%H)
mkdir -p $YEAR/$MONTH/$DAY/$HOUR
mysqldump -uroot -pRedhat@123 mydb > $YEAR/$MONTH/$DAY/$HOUR/backup.sqlcrontab -e
# Minute Hour Day of Month Month Day of Week Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
30 * * * 1-6 exec '/bin/bash /home/backup.sh'列出
的备份文件
bash backup.sh
[root@master 17]# ls -lh backup.sql
-rw-r--r--. 1 root root 49M Jun 15 17:05 backup.sql
[root@master 17]# ls -lh backup.sql
-rw-r--r--. 1 root root 362M Jun 18 17:23 backup.sql我希望它将只需要更改块备份,而不是像上面的例子那样的完全备份。
我正在使用免费版本的MySQL。没有可用的企业功能。
发布于 2022-06-23 19:49:20
mysqldump是用于创建逻辑完全备份的实用程序。该工具不允许您进行增量备份,但需要它来优化增量备份。
基于
的增量备份
二进制日志是一组日志文件,其中包含有关对MySQL数据库所做的所有更改的信息。使用此数据,可以将数据库中的数据还原到较早的日期。
通常,从创建数据库时起,binlog就不包含所有数据。从绑定日志恢复的起点是通过mysqldump创建的完整的备份。
也就是说,完全备份创建是创建增量备份的第一步。
mysqldump --flush-log --master-data=2 [other options]--flush-log -初始化写入新的binlog文件
--master-data=2 -将新的binlog文件的名称写入.sql转储(它将是还原链中的第一个)
如果不使用复制,则--delete-master-log 选项也可能有用。它将删除在完全备份之前创建的二进制日志。
增量备份只是将新的binlog文件复制到归档文件并将它们发送到目标。
通常,binlog文件的存储目录由以下路径定位:
在Linux /opt/mysql/data中
在Windows C:\ProgramData\MySQL\MySQL Server 5.6\Data\中
主要的困难是您只需要复制新文件,而不是复制最后一个binlog文件。无论如何,这是可以做到的,下面是关于如何做在Windows上和在Linux上的更多细节。
从绑定日志
首先,您需要恢复完整的备份。
mysql [connection settings] < full.sql然后,您需要还原在创建完整备份之后创建的所有binlog文件。在完整备份中可以找到第一个binlog文件的编号,将有一个类似于以下内容的行:
-将母版改为MASTER_LOG_FILE='mysql-bin.002927',MASTER_LOG_POS=120;
您需要将binlog文件转换为SQL指令。这可以使用mysqlbinlog实用程序来完成。它以二进制日志文件的列表作为输入,备注顺序事项:
mysqlbinlog mysql-bin.002927 mysql-bin.002928 mysql-bin.002929 mysql-bin.002930 > inc.sql现在您可以恢复增量备份:
mysql [connection settings] < inc.sqlhttps://dba.stackexchange.com/questions/210005
复制相似问题