zoukankan      html  css  js  c++  java
  • 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:ProgramDataMySQLMySQL Server 8.0Data)(隐藏目录!!!!!!)

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

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

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

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

    1.尝试导出 mysqlbinlog --no-defaults --base64-output=decode-rows -v binlog.000004 --result-file=e:ackup123.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:mysqlData ::当前系统日期 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%inlog.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

    长路漫漫!采坑为伴

  • 相关阅读:
    php中运算符的分类及注意事项
    ecshopv3.6安装
    phpstudy多站点配置教程
    织梦dedecms出现DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to i解决办法
    thinkphp3.2批量删除功能
    怎么使用阿里图标库
    人人网,微博,QQ空间,朋友圈,常用API调用实现方法
    ueditor注意事项
    大图在小于自身的div中,水平居中
    thinkphp3.2 实现分页功能
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11074479.html
Copyright © 2011-2022 走看看