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

 

長路漫漫!采坑為伴

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM