MySQL 日志管理及备份与恢复(二)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 1、日志管理2、备份与恢复

2387773-20210831120758307-795408172.png



完全备份 MySQL 服务器中所有的库

mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql

例如:

mysqldump -u root -p123123 --all-databases > /opt/all.sql

2387773-20210831120851498-321719539.png

完全备份指定库中的部分表

mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql 

例如:

mysqldump -uroot -p123123 SCHOOL CLASS1 >    /opt/SCHOOL_CLASS1.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份


查看备份文件:

grep -v "^--" /opt/SCHOOL_CLASS1.sql | grep -v "^/" | grep -v "^$"

2387773-20210831121026754-1018057252.png


完全备份恢复:    


恢复数据库

mysql -uroot -p123123 -e 'drop database SCHOOL;'


#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出

mysql -uroot -p123123 -e 'SHOW DATABASES;'
mysql -uroot -p123123 < /opt/SCHOOL.sql
mysql -uroot -p123123 -e 'SHOW DATABASES;'

2387773-20210831121225682-56424041.png

恢复数据表

当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。


mysql -uroot -pabc123 -e 'drop table SCHOOL.CLASS1;'
mysql -uroot -pabc123 -e 'show tables from SCHOOL;'
mysql -uroot -pabc123 SCHOOL < /opt/SCHOOL_CLASS1.sql
mysql -uroot -pabc123 -e 'show tables from SCHOOL;'

2387773-20210831121332755-2011488398.png


MySQL 增量备份与恢复:  


MySQL 增量备份

开启二进制日志功能


vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED   
server-id = 1<em id="__mceDel"><br></em>

#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

systemctl restart mysqld
ls -l /usr/local/mysql/data/mysql-bin.*

2387773-20210831121534970-2054505282.png

2387773-20210831121558112-2048362070.png


可每周对数据库或表进行完全备份

mysqldump -uroot -p123123 SCHOOL CLASS1 > /opt/SCHOOL_CLASS1_$(date +%F).sql
mysqldump -uroot -p123123 --all-databases SCHOOL > /opt/SCHOOL_$(date +%F).sql


2387773-20210831121639864-1664162511.png


可每天进行增量备份操作,生成新的二进制日志文件(例如 mysql-bin.000002)

mysqladmin -uroot -p123123 flush-logs


2387773-20210831121712394-2114778128.png


插入新数据,以模拟数据的增加或变更

mysql -uroot -p123123
use SCHOOL;
insert into CLASS1 values(3,'user3','male','game');
insert into CLASS1 values(4,'user4','female','reading');

2387773-20210831121746415-1818620174.png


再次生成新的二进制日志文件(例如 mysql-bin.000003)

mysqladmin -uroot -p123123 flush-logs


#之前的步骤4的数据库操作会保存到mysql-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.000003文件中

2387773-20210831121823564-1512156924.png


查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000002 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002


#- -base64-output=decode-rows:使用64位编码机制去解码并按行读取 #-v:显示详细内容

2387773-20210831121905458-977976508.png

2387773-20210831121915187-143198061.png

MySQL 增量备份恢复:      

一般恢复

模拟丢失更改的数据的恢复步骤

mysql -uroot -p123123
use SCHOOL;
delete from CLASS1 where id=3;
delete from CLASS1 where id=4;
select * from CLASS1;
quit
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123123
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"

2387773-20210831122334956-1933920196.png


模拟丢失所有数据的恢复步骤(基本一样)

mysql -uroot -pabc123
use SCHOOL;
drop table CLASS1;
quit
mysql -uroot -pabc123 SCHOOL < /opt/SCHOOL_CLASS1_2021-01-29.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -pabc123
mysql -uroot -pabc123 -e "select * from SCHOOL.CLASS1;"


断点恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002


和刚刚一样的使用64位编码机制去解码并按行读取二进制文件000002的详细内容

 

基于位置恢复

#仅恢复到操作 ID 为“609”之前的数据,即不恢复“user4”的数据

mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p

例如:

mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"
mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS1;"
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"
mysqlbinlog --no-defaults --stop-position='609' /opt/mysql-bin.000002 | mysql -uroot -p
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"

2387773-20210831122606800-786746652.png



例如:

mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"
mysqlbinlog --no-defaults --start-position='609' /opt/mysql-bin.000002 | mysql -uroot -p123123
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"

2387773-20210831122718374-2067962789.png


基于时间点恢复

#仅恢复到 21:30:12 之前的数据

例:先清空表CLASS1,方便实验

mysql -uroot -p123123 -e "truncate table SCHOOL.CLASS1;"
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"
mysqlbinlog --no-defaults --stop-datetime='2021-01-29 0:39:13' /opt/mysql-bin.000002 |mysql -uroot -p123123
mysql -uroot -p123123 -e "select * from SCHOOL.CLASS1;"

2387773-20210831122816153-1722321143.png


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
27天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
15天前
|
SQL 存储 关系型数据库
mysql数据库备份与恢复
mysql数据库备份与恢复
|
1月前
|
存储 SQL 关系型数据库
[MySQL]事务原理之redo log,undo log
[MySQL]事务原理之redo log,undo log
|
1月前
|
SQL 缓存 关系型数据库
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
66 0
|
2月前
|
存储 监控 关系型数据库
ELK架构监控MySQL慢日志
ELK架构监控MySQL慢日志
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下定时备份mysql数据库
Linux环境下定时备份mysql数据库
|
2月前
|
SQL 运维 关系型数据库
MySQL中常见的几种日志类型
MySQL中常见的几种日志类型
|
22天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
77 1
|
24天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1

热门文章

最新文章