1. 使用脚本+Windows计划任务备份
1.1 编写备份脚本
rem date:20220307
rem ****** MySQL backup start ********
@echo off
forfiles /p "F:\SQL\MySQL\framework" /m backup_*.sql -d -15 /c "cmd /c del /f @path"
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
"E:\MySQL\MySQL Server 8.0\Install\bin\mysqldump" --opt --single-transaction=TRUE --user=root --password=密码 --host=49.4.69.84 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "framework" > "F:\SQL\MySQL\framework\backup_%Ymd%.sql"
@echo on
rem ****** MySQL backup end ********
语法解释: rem 表示注释,remark的缩写。在SHELL脚本中用#
forfiles /p "F:\SQL\MySQL\framework" /m backup_*.sql -d -30 /c "cmd /c del /f @path"
forfiles 将备份路径下的过期备份进行删除。 "F:\SQL\MySQL\framework" 自己设置的备份文件的路径。 backup_*.sql 备份路径下,所有以backup_开头,以.sql结尾(后缀)的数据库备份文件。 30 表示30天过期。
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
set 定义一个“Ymd”的变量,赋值的内容是当前的日期和时间,就是生成了一个类似的时间戳,用来当sql脚本文件的名称。
"E:\MySQL\MySQL Server 8.0\Install\bin\mysqldump" --opt --single-transaction=TRUE --user=root --password=密码 --host=49.4.69.84 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "framework" > "F:\SQL\MySQL\framework\backup_%Ymd%.sql"
"E:\MySQL\MySQL Server 8.0\Install\bin\mysqldump" 这个路径表示调用MySQL自带的备份工具mysqldump,位置在MySQL的安装路径的bin目录中。 "framework" 需要备份的数据库 "F:\SQL\MySQL\framework\backup_%Ymd%.sql" 备份后保存的路径以及文件名称,这里的Ymd 就是上面定义的变量。
注意:备份的文件路径需要是存在的,如果路径不存在,将备份失败。
1.2 配置任务计划
- 打开windows的任务计划程序,在左侧创建一个MySQL的BackUp目录(或者其他名称),主要是方便管理,可以一目了然。
- 在BackUp目录上右键,创建任务,填入相关内容:
常规: 触发器: 操作: - 确定后,输入本机的账号密码即可:
- 每日定时备份,设置完成。
2. 使用Navicat premium 15 备份
备份文件的存储路径:
- 连接库,点击自动运行:
- 点击左下方的备份,然后选择要备份的数据库。如果要备份多个数据库,可以重复这个②、③ 的操作即可。
- 点击保存
- 点击计划任务
根据实际情况,设置备份的时间以及周期: 点击确定,输入电脑账号密码
- 保存
完成。 在左侧的备份中,可查看备份的文件:
3. 还原sql脚本
打开命令界面输入:
mysql -u root -P 3306 -h IP地址 -p密码
--default-character-set=utf8 表示编码格式,最好加上以免中文乱码。 db_yclb_framework_core 要还原的目标数据库
命令执行后,会提示以下内容,忽略它,等待一会儿,数据库就还原好了。
mysql: [Warning] Using a password on the command line interface can be insecure.
|