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';

猜你喜欢

转载自blog.csdn.net/hhue2007/article/details/130421220