Mysql数据库的备份恢复
最近正在做一个异地数据的定期同步汇总工作,涉及到的数据库主要是Mysql数据库,用于存储现场的一些IOT采集的实时数据,所以做了以下备份恢复测试,现场和总部网络可定期联通,但速度有限,因此计划采用备份恢复增量文件方式,具体运行环境:Windows10 + mysql-8.0.19-winx64。
一、完全备份(数据库名称保持不变)
1.完全备份一个或多个完整的库 (包括其中所有的表)
mysqldump -uroot -p123456 --databases test1 >D:\dev\mysql-8.0.19-winx64\backup\test1.sql ##备份一个test 库
2.完全备份 MySQL 服务器中所有的库
mysqldump -uroot -p123456 --all-databases > D:\dev\mysql-8.0.19-winx64\backup\all.sql
3.完全备份指定库中的部分表
mysqldump -uroot -p123456 test table1 > D:\dev\mysql-8.0.19-winx64\backup\test-table1.sql
4. 使用source恢复数据库的步骤
登录到mysql后,执行以下命令。
source D:\dev\mysql-8.0.19-winx64\backup\test1.sql
5. 使用mysql命令恢复数据库,解决无须登录mysql数据库情况,使用-e删除数据表,执行mysql备份sql脚本的路径
mysql -uroot -p -e 'drop table test.test;'
mysql -uroot -p test1 < D:\dev\mysql-8.0.19-winx64\backup\test11.sq
mysql -uroot -p -e 'show tables from test'
二、增量备份恢复
# 备份 生成新的二进制文件(例:mysql-bin.0000004,mysql-bin.0000005),这个脚本要求每天做,相当于增量的基础二进制文件,后续用这个恢复数据库。可参考附录的增量备份脚本(Increment_backup.bat)。
mysqladmin -uroot -p123456 flush-logs
#使用64位编码机制去解码,按行读取详细内容,查看解析的内容,查看其他信息及配置详见附录。
mysqlbinlog --no-defaults --base64-output=decode-rows -v D:\dev\mysql-8.0.19-winx64\data\mysql-bin.000001
#也可以将解析的内容输出到文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v D:\dev\mysql-8.0.19-winx64\data\mysql-bin.000014 >D:\dev\mysql-8.0.19-winx64\backup\outinfo.txt
# 1.一般恢复(用的最多)
mysqlbinlog --no-defaults D:\dev\mysql-8.0.19-winx64\data\mysql-bin.000004 | mysql -u root -p
# 2.基于位置点恢复,位置点可通过附录3的命令查询得到。
#仅恢复到操作 ID 为“1104242"之前的数据,即不恢复1104242位置点之后插入更新删除的数据
mysqlbinlog --no-defaults --stop-position='1104242' D:\dev\mysql-8.0.19-winx64\data\mysql-bin.000008| mysql -uroot -p123456
# 3.基于时间点恢复
#仅恢复到16:40:00 之前的数据,即不恢复这个时间点之后的数据。
mysqlbinlog --no-defaults --stop-datetime="2023-04-24 16:40:00" --database=test1 D:\dev\mysql-8.0.19-winx64\data\mysql-bin.000009 | mysql -uroot -p
附录
1.查看 log_bin是否开启登录到mysql后,执行如下命令,见下图。
show variables like '%log_bin%';
如果log_bin为OFF,则需要在my.ini的配置文件中加入如下配置
l# 开启二进制日志功能
log-bin=mysql-bin
# 可选,指定二进制日志(binlog)的记录格式为MIXED(混合输入)
binlog_format = MIXED
2.查看当前使用的 logbin.000*** 日志文件,执行如下命令
show master status;
3.查看这个binlog的内容
show binlog events in 'mysql-bin.000014';