码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-06-24 00:14:11      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:https   data   dmi   安装   日志文件   detail   suse   --   beetl   

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增量备份、完整备份采坑之路

标签:https   data   dmi   安装   日志文件   detail   suse   --   beetl   

原文地址:https://www.cnblogs.com/ChromeT/p/11074479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!