数据库备份共分为两个脚本,一个全量备份,一个增量备份
增量备份基于 binlog,确保数据库开启了 binlog
mysql 终端中输入 SHOW variables LIKE 'log_%'
进行查看
执行增量备份前,需要先执行一次全量备份,整理备份是在全量备份基础上进行增量备份的
共包含一个配置文件 mysql.conf,和三个脚本文件 (一个全量脚本,两个增量脚本)
- Mysql_FullBak.sh 全量备份脚本, 每周一次全量备份
- Mysql-DailyBak.sh 增量备份脚本, 建议每天一次增量 (备份 binlog 文件,用 mysqlbinlog 命令恢复,推荐使用)
- Mysql-DailySql.sh 增量备份脚本,(用 binlog 生成 sql, 不推荐使用) (在 Mysql-DailyBak.sh 脚本上增加了生成 sql 功能)
配置文件 mysql.conf
BinDir 目录 上面 SHOW variables LIKE 'log_%'
可以查看文件夹位置
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_HOST="localhost"
MYSQL_DATABASE="test"
# 全量备份保存的地址, 增量备份保存在 BakDir/daily 文件下, 文件夹会自动创建
BakDir=/backup
# 脚本执行的日志
LogFile=$BakDir/bak.log
# mysql的数据目录, binlog日志的位置, 其中 包含mysql-bin.index 文件 mysql终端中可以使用 `SHOW variables LIKE 'log_%'`可以查看文件位置
BinDir=/www/server/data
全量备份
Mysql_FullBak.sh
主要使用 mysqldump 进行全量备份,确保 mysqldump 命令好用, 如果命令不存在,找到 mysqldump 的安装位置,则 创建软链接
ln -s /usr/local/mysql/bin/mysqldump /usr/bin # /usr/local/mysql/bin/mysqldump 为mysqldump 的位置 根据安装位置自己进行修改
给 全量备份脚本 执行权限 chmod +x Mysql-FullBak.sh
, 然后执行,全量备份的 sql 保存在 mysql.conf 配置中 BakDir 的文件夹下
执行结果
- bak.log 记录 shell 执行的日志文件
- 20230421.sql.tgz 用期进行命名的,全量备份的 sql 压缩文件
- daily 文件夹,用于存放 增量备份,binlog 文件,增量备份,需要这个目录 (每次全量备份后,会清空该文件夹)
增量备份
主要 mysqlbinlog 和 mysqladmin 命令, 确保两个命令好用,如果命令不存在,找到 mysqladmin 和 mysqlbinlog 的安装位置, 则 创建软连接
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin # /usr/local/mysql/bin/mysqladmin 为mysqladmin 的位置 根据安装位置自己进行修改
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin # /usr/local/mysql/bin/mysqlbinlog 为mysqlbinlog 的位置 根据安装位置自己进行修改
分两个脚本,使用其中一个就行
- Mysql-DailyBak.sh 推荐使用
- Mysql-DailySql.sh 在 Mysql-DailyBak.sh 基础上增加了 根据 binlog 生成 sql 的功能
给 增量备份脚本 执行权限 chmod +x Mysql-DailyBak.sh
, 然后执行,增量备份的二进制 binlog 日志文件, 保存在 mysql.conf 配置中 BakDir 的文件夹下 daily 文件夹下
增量备份脚本说明
每次增量备份,会通过 mysqladmin 刷新生成最新的 binlog,然后我们复制一份到 backup/daily 文件夹下面
数据恢复
全量备份恢复
- 解压全量备份 sql
tar -zxvf 日期.sql.tgz
# 恢复全备数据, 或者在 mysql 终端中 用 source
mysql -uroot -p < 日期.sql
- 查看全量备份
MASTER_LOG_POS
由图可知,这是全备时刻的 binlog 文件位置,即 mysql-bin.000064 的 154 行,因此在该文件之前的 binlog 文件中的数据都已经包含在这个全备的 sql 文件中。
增量备份 恢复
二选一
- 方法一:使用 mysqlbinlog 进行恢复
后面 使用 mysqlbinlog 进行恢复
test 为数据库名
root 用户名
123456 数据库密码
#cd daily
#mysqlbinlog --start-position=154 --database=test mysql-bin.000064 | mysql -uroot -p123456
master-bin.000064 后的 binlog 日志
mysqlbinlog master-bin.000065 | mysql -uroot -p123456
mysqlbinlog master-bin.000066 | mysql -uroot -p123456
mysqlbinlog master-bin.000067 | mysql -uroot -p123456
.....
.....
mysqlbinlog 还有很多参数,可以很灵活的进行增量恢复
--常用选项:
--start-datetime=name #binlog文件读取的起始时间点,可接受datetime和timestamp类型,格式2004-12-25 11:25:56
--stop-datetime=name #binlog文件的结束的时间点。
--start-position= #读取binlog文件的位置信息
--stop-position= #binlog文件的结束的位置信息
-
方法二:使用 sql 进行恢复
使用 Mysql-DailySql.sh 才会有这个功能, 执行后会在 backup/daily 目录下生成 increment.sql 的文件
数据恢复增量
# 恢复增量数据, 或者在 mysql 终端中 用 source
mysql -uroot -p < increment.sql
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于