在windows下进行mysql数据库备份并添加定时任务
新建bak.bat文件,编写脚本代码
@echo off
set path_home_mysql=E:\mysql-8.0.19-winx64\mysql8\
set database_mysql=数据库名
set user_mysql=数据库用户名
set password_mysql=数据库密码
set path_bin_mysql=%path_home_mysql%bin\
set backup_dir=E:\gz_db_bak\
set filename=db_bak_%database_mysql%_%date:~0,4%_%date:~5,2%_%date:~8,2%
set backup_file=%backup_dir%%filename%.sql
echo INFO: 保存文件路径:%backup_file%
echo INFO: 创建备份目录
mkdir %backup_dir%
IF EXIST %backup_file% ( del %backup_file% &echo INFO: %backup_file% 已删除)
echo 删除30天之前的rar文件
forfiles /p "E:\gz_db_bak" /m db_bak_*.rar -d -30 /c "cmd /c del /f @path"
echo INFO: 准备备份数据库: %database_mysql%
cd %path_bin_mysql%
echo INFO: MYSQL目录信息 "%path_bin_mysql%"
"%path_bin_mysql%"mysqldump -u%user_mysql% -p%password_mysql% -h服务器IP -P数据库端口 %database_mysql% > %backup_file%
echo 通过winRAR进行压缩,进行压缩
"C:\Program Files\WinRAR\Rar.exe" a -ep1 -r -o+ -m5 -s -df "%backup_dir%%filename%".rar %backup_file%
echo INFO: 备份完毕
EXIT
添加到系统计划任务中
进入计划任务
添加计划任务
进行保存计划,退出任务计划就可以了
数据还原
通过mysqldump进行备份的数据库有时候用Navicat工具进行还原特别慢,可通过mysql命令的方式进行还原。
mysql -u用户名 -p密码 -f 数据库名< 数据库文件.sql
-f 表示忽略出现的sql错误
常见问题
在mysql8中运行脚本可能会出现警告,或者需要在命令行再次要求输入密码。
这是在mysql8中对安全进行了增强
需要在my.ini配置文件中添加[mysqldump]标签下添加用户名密码,在脚本中去除用户名和密码在进行执行。
[mysqldump]
user=用户名
password=密码
数据库备份还原语句及参数说明
mysqldump备份常见用法
1、导出整个数据库(包括数据库中的数据)
mysqldump -u username -p dbname > dbname.sql
2、导出数据库结构(不含数据)
mysqldump -u username -p -d dbname > dbname.sql
3、导出数据库中的某张数据表(包含数据)
mysqldump -u username -p dbname tablename > tablename.sq
mysqldump -uroot -p -B dbname --table tablename > tablename.sql
4、导出数据库中的某张数据表的表结构(不含数据)
mysqldump -u username -p -d dbname tablename > tablename.sql
5、备份数据库时使用参数(–ignore-table)排除某个表或多个表
mysqldump -uroot -p“password” --ignore-table=dbname.table1 --ignore-table=dbname.table2 dbname > /opt/backup.sql
sql文件还原方法
1、mysql -uroot -p"db_password" -f dbname < backup.sql (-f 参数表示在导出过程中忽略出现的SQL错误)
nohup mysql -uroot -p"db_password" -f dbname < backup.sql > /dev/null 2>&1 & (在导入较大的sql文件时可以放到后台执行)
2、mysql -uroot -p 先登录到数据库,use dbname; 切换到需要导入的库中,然后执行 source /opt/backup.sql; 这样就可以导入了
mysqldump 参数详解
–host 指定要备份数据库的服务器
–port MySQL服务器的端口号
–user 连接MySQL服务器的用户名
–password 连接MySQL服务器的密码
–add-locks 备份数据库表时锁定数据库表
–databases, -B 导出多少数据库,参数后面所有参量都被看作数据库名
–all-databases 备份MySQL服务器上的所有数据库
–all-tablespaces , -Y导出全部表空间 -y不导出任何表空间信息
–add-drop-table 在每个创建数据库表语句前添加删除数据库表的语句
–no-create-db 禁止生成创建数据库语句
–no-create-info 禁止生成创建数据库库表语句
–complete-insert, -c使用完整的insert语句(包含列名称),这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败
–no-data, -d 不导出任何数据,只导出数据库表结构
–no-create-info, -t 只导出数据,而不添加CREATE TABLE 语句
–no-create-db, -n 只导出数据,而不添加CREATE DATABASE 语句
–ignore-table 导出数据库时忽略某个表
–force,-f 在导出过程中忽略出现的SQL错误,当出现错误时仍然继续后面的操作
–add-drop-database 每个数据库创建之前添加drop数据库语句
–add-drop-table 每个数据表创建之前添加drop数据表语句,默认为打开状态,使用–skip-add-drop-table取消选项
–add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE,默认为打开状态,使用–skip-add-locks取消选项
–default-character-set 设置默认字符集,默认值为utf8
–comments 附加注释信息,默认为打开,可以–skip-comments取消
–compact导出更少的输出信息(用于调试),去掉注释和头尾等结构,(可以使用选项 –skip-add-drop-table –skip-add-locks –skip-comments –skip-disable-keys)
–events, -E 导出事件
–flush-privileges 在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句
–flush-logs 开始导出之前刷新日志,请注意,假如一次导出多个数据库(使用选项–databases或者–all-databases),将会逐个数据库刷新日志
除使用–lock-all-tables或者–master-data外,在这种情况下,日志将会被刷新一次,相应的表同时被锁定,因此,如果打算同时导出和刷新日志应该使用–lock-all-tables 或者–master-data 和–flush-logs
–delayed-insert 采用延时插入方式(INSERT DELAYED)
–comments 添加注释信息
–compact 压缩模式,产生更少的输出
–complete-insert 输出完成的插入语句
–default-character-set 指定默认字符集
–lock-tables 备份前,锁定所有数据库表
–lock-all-tables, -x提交请求锁定所有数据库中的所有表,以保证数据的一致性,这是一个全局读锁,并且自动关闭–single-transaction 和–lock-tables 选项
–debug 输出debug信息,用于调试(默认值为d:t:o,/tmp/mysqldump.trace)例 mysqldump -uroot -p –all-databases –debug=” d:t:o,/tmp/debug.trace”