前言

为什么做数据库自动备份?

公司之前一个很久没用的项目服务器突然挂了,原因居然是数据库不见了,莫名其妙;看了日志、什么都查了,数据库消失的干干净净🤔️❓这可真是要命,还好我之前有导出过sql文件做本地数据库,不然就GG了;至此,数据库自动备份必然开始着手布置了。



一、mysqldump命令

在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump
我们可以通过命令行直接实现数据库内容的导出dump,以下为mysqldump基本命令用法:

1
2
3
4
5
6
7
8
9
10
11
#MySQLdump常用
mysqldump -uroot -p123456 --databases 数据库1 数据库2 > xxx.sql

(固定参数不可改变)
# mysqldump:固定参数
# -u:固定参数 root:mysql数据库的账号(紧跟-u参数,也可以使用空格与-u隔开)
# -p:固定参数 123456:mysql数据库的密码(紧跟-p参数,不可与-p隔开,我自己测试隔开命令会报错)
# --databases:固定参数 后面跟需要备份的数据库名,可以是多个,空格隔开
# >:固定参数
# xxx.sql:最终备份的文件名(文件地址,详细解析看下面)
(以上除-u及-p后的参数,其余所有参数之间使用空格号隔开)
  1. 备份全部数据库的数据和结构

    /data/mysqlDump/mydb.sql为备份的sql文件最后的保存路径,下面所有的命令均是如此

    ⚠️注意:路径中的文件名切勿带空格,如:/da ta/mysqlDump/mydb.sql

    mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql

  2. 备份全部数据库的结构(加 -d 参数)

    mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql

  3. 备份全部数据库的数据(加 -t 参数)

    mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql

  4. 备份单个数据库的数据和结构(数据库名mydb)

    mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql

  5. 备份单个数据库的结构

    mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql

  6. 备份单个数据库的数据

    mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql

  7. 备份多个表的数据和结构(数据,结构的单独备份方法与上同)

    mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql

  8. 一次备份多个数据库

    mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql




二、数据库备份的脚本文件

  • 使用.bat脚本进行操作
  • 简单介绍:批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 具体请看出处:bilibili

1、脚本处理文件

先使用txt文档把下面内容复制进去,然后修改后缀.txt为.bat即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@echo off
echo =============================
echo ### mysql database backup bat
echo =============================

echo =========当前日期时间==========
set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
echo %nowdate%
echo =============================

echo =========IP地址和端口==========
set ipconfig=192.168.2.201
echo %ipconfig%
echo =============================

echo ======进入到mysql安装目录======
D:
cd D:\MySQL\bin
echo =============================

echo ====备份mysql文件到指定文件夹====
echo mysql文件备份中...
echo =============================
mysqldump -uroot -proot school > "D:\MySQLCopy_File\copy_%ipconfig%_%nowdate%.sql"
echo MySQL 备份成功
echo =============================

echo 备份的sql文件
forfiles /p "D:\MySQLCopy_File" /s /m *.sql
echo =============================

rem 获取"D:\MySQLCopy_File"目录下的sql文件,并且删除7天前的文件
echo *********************
echo * 按时间删除7天前的sql文件 *
echo *********************
echo 删除操作前存在的sql文件
forfiles /p "D:\MySQLCopy_File" /s /m *.sql
echo =============================

rem 删除sql文件操作
forfiles /p "D:\MySQLCopy_File" /s /m *.sql /d -7 /c "cmd /c del /q /f @path"

echo 删除操作后存在的sql文件
forfiles /p "D:\MySQLCopy_File" /s /m *.sql
echo =============================

rem 不关闭窗口操作
rem pause>nul 表示命令窗口不会出现“请按任意键继续”
rem pause>nul

rem 关闭窗口
@echo 数据库备份操作完成,5秒后关闭程序...
ping /n 5 127.1 >nul
exit

2、脚本处理文件解析

  • set:用于设定参数
  • echo:该命令用于在控制台输出文字信息,更具体可百度了解。
  • rem:该命令为注释作用,不会在控制台显示
  • forfiles:该命令对文件进行操作,可参考文章:forfiles命令详解;或自行百度了解
  • mysqldump:数据库备份命令,上面有介绍
  • set nowdate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%这里可自行百度了解
  • 如果不想关闭窗口,可以使用pause>nul命令(把前面的rem删除即可),并把最后三行代码rem注释掉或删掉

3、脚本需要更改处

  • set ipconfig=192.168.2.201
    • 更改为自己的ip地址
  • cd D:\MySQL\bin
    • 更改为自己MySQL所在的安装位置
    • 进入这个目录之前一定要先进入这个目录所在的系统盘;如果是在C盘,则D:\MySQL\bin命令的上一行D:改为C:
  • mysqldump -uroot -proot school > "D:\mysql_backup\shop%ipconfig%_%nowdate%.sql"
    • 可参考mysqldump命令
    • 高亮部分需要更改,第一处root为账号,改为自己mysql数据库的账号
    • 高亮部分需要更改,第二处root为密码,改为自己mysql数据库的密码
    • 高亮部分需要更改,第三处school为数据库名,改为需要备份的数据库名称
    • 高亮部分需要更改,第四处为备份文件保存的路径,改为需要保存的位置
  • D:\MySQLCopy_File
    • 这里所有的这个地址均要改为自己的保存地址
  • forfiles /p “D:\MySQLCopy_File” /s /m *.sql /d -7 /c “cmd /c del /q /f @path”
    • -7为删除7天前的sql文件;要删除几天前的sql文件,只需要将7改为指定天数

4、脚本执行乱码错误

如果出现乱码错误,可以使用文档编辑.bat文件,选择功能另存为,选择编码格式为ANSI
如果还是出现中文乱码,可以文件内容最顶部加入以下代码,即@echo off这一行代码上面

rem 标注为使用936编码格式编译中文

chcp 936

@echo off




三、Windows定时任务

按图索骥

MySQLCopy_pic_1


进入管理页面,选择任务计划程序

MySQLCopy_pic_2


如果没有MySQL文件夹则新建一个,在MySQL文件夹下创建任务

MySQLCopy_pic_3


输入任务名称和描述

MySQLCopy_pic_4


选择每天(这个看自己需要)

MySQLCopy_pic_5


选择开始时间(我这里是每天早上九点半)

MySQLCopy_pic_6


操作选择“启动程序”

MySQLCopy_pic_7


点击浏览,选择上面你创建好的.bat脚本文件,之后下一步、完成即可

MySQLCopy_pic_8


创建完成之后就可以在定时任务的列表看到自己创建好的定时任务了,每天早上九点半自动开始备份命令中定义的数据库

MySQLCopy_pic_9





借鉴链接

MySQL 数据库定时备份的几种方式(非常全面)
mysql数据库自动备份(Windows版)



声明

借鉴部分均注明了原文出处,可在文章的`借鉴链接`处获取原文出处
文中若内容有涉及原版权,请邮件联系elvin-chen@qq.com,涉及的相关文章或内容将会及时更改或取消发布