Windows MySql增量备份完整备份采坑之路

Posted chromet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows MySql增量备份完整备份采坑之路相关的知识,希望对你有一定的参考价值。

1.前言

这周公司交给我一个任务,负责项目mysql数据库的备份,因为项目上线后数据是一个大问题,出了什么问题数据才是最大的问题,备份这时候就显得尤为重要,

公司项目的思路是:在项目系统设置内可以勾选完整备份和增量备份,选择指定的时间内进行备份,也可以选择手动备份

我的思路:把mysql 需要的备份命令写到bat批处理文件里面,按照Java后端定时器去调用方法,方法调用bat批处理文件!

 

2.完整备份

完整备份相对于增量备份要简单的多,因为生成的是SQL文件,直接导入即可,主要的采坑还是增量备份

1.项目人数日渐庞大,数据越来越多,如果只是单纯的全局备份,又是占用磁盘又是耗费时间

2.可以考虑每周备份一次完整备份,每天备份一次增量

 

如何备份多个表?

答:mysqldump -u用户 -p 数据库 表1 表2 …… 表N > 备份文件路径

如何备份1个数据库?

答:mysqldump -u用户 -p -B 数据库 > 备份文件路径

如何备份多个数据库?

答:mysqldump -u用户 -p -B 库1 库2 …… 库N >备份文件路径

如何备份所有数据?

答:mysqldump -u用户 -p -A >备份文件路径

 

技术图片

 

 技术图片

备份好之后的SQL文件

3.SQL 文件的导入

技术图片

source sql文件路径

 

4.采坑之路 增量备份

4.1 版本问题(坑)

我之前使用的mysql是phpStyle自带的,它的版本在5.56的样子,自带的命令里面没有可以生成日志文件的mysqlbinlog命令 

错误尝试:去网上下载了一个mysqlbinlog 然而没考虑版本问题,虽然可以生成二进制文件,但是导不进去!!!失败

 

4.2 安装了一个mysql 8.0版本后找不到my.ini配置文件!

尝试:百度后发现,mysql 8.0那个版本已经开启了日志的处理,我们不需要修改mysql 配置文件

参考:https://blog.csdn.net/zone_/article/details/81321431

 

4.3 导出的二进制日志文件mysql不识别 说不是一个二进制文件(你TM在逗我????)

技术图片

1.首先找出最新的日志文件名称

2.使用命令导出!(我这里的二进制目录已经改变过,没有改变过的日志文件存放在:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data)(隐藏目录!!!!!!)

 

尝试:使用命令导出:mysqlbinlog -uroot -proot --read-from-remote-server binlog.000003 > e:\\backup\\binlog.000003

 

1.导出后的文件居然打开不乱码!!惊奇

2.尝试导入,别想了 导不进去

 

尝试把二进制文件弄成SQL文件,试着导入!

1.尝试导出 mysqlbinlog --no-defaults --base64-output=decode-rows -v binlog.000004 --result-file=e:\\backup\\123.sql

2.尝试导入:source e:/backup/123.sql 

 

失败!!!!心态炸裂

 

5.最终奥义!

1.思路:使用bat批处理把那个二进制文件复制出来,然后导入呢?

2.尝试 发现日志文件存在的地方是一个隐藏目录,cmd窗口根本就中不到,于是乎!!!!

 

修改mysql配置文件,让它把生成的二进制文件存到别的地方 我好复制

 

参考:https://blog.csdn.net/The_Beetles/article/details/89553653

 

下面贡献两个脚本bat批处理文件,方便使用

 

::--------------全量备份mysql数据库---------------
::服务器数据库ip 用户名 密码 申明需要备份的数据库
set suser=root
set suserpwd=root
set backdatabase=test

::当前系统日期 20160309
set now=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

::备份文件夹
set backup=backup
if not exist %backup% md %backup%

::以日期命名的文件夹
set nowfile=%backup%\\%now%
if not exist %nowfile% md %nowfile%

::开始备份
mysqldump -u%suser% -p%suserpwd% --single-transaction --skip-triggers --skip-lock-tables --master-data=2 --force  -B %backdatabase%>%nowfile%\\%backdatabase%.sql

exit

  

@echo off

::服务器数据库ip 用户名 密码
set suser=root
set suserpwd=root
::mysql 二进制日志文件存放的位置
set filePath= E:\\mysql\\Data ::当前系统日期 20160309 set now=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% ::备份文件夹 set backup=backup if not exist %backup% md %backup% ::以日期命名的文件夹 set nowfile=%backup%\\%now%-Increase if not exist %nowfile% md %nowfile% ::前一次日志文件名 set binlog=%nowfile%\\binlog.txt mysql -u%suser% -p%suserpwd% -e "show master status"|findstr -B binlog.>%binlog% ::处理日志文件名 只取binlog.001365 复制到目标文件夹 FOR /F "delims= " %%i in (%binlog%) do copy %filePath%\\%%i %nowfile% ::刷新日志产生新的日志 mysqladmin -u%suser% -p%suserpwd% flush-logs exit

 

长路漫漫!采坑为伴

 

以上是关于Windows MySql增量备份完整备份采坑之路的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL备份:启用二进制日志功能的MYSQL增量备份

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

MySQL备份与还原

MySQL增量备份与恢复实例

Mysql增量备份与恢复实例

mysql增量备份恢复实战企业案例