Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql日志与备份恢复

MySQL核心日志与备份恢复示例详解

作者:九转苍翎

本文介绍了MySQL二进制日志(BinaryLog)的用途、工作原理、配置方法以及使用场景,同时,文章还涵盖了MySQL的备份与恢复技术,包括全量备份、增量备份和差异备份,并分别介绍了mysqldump、mysqlimport和Xtrabackup等工具的使用方法和优缺点,感兴趣的朋友跟随小编一起看看吧

1.二进制日志

1.1 概述

作用:二进制日志(Binary Log)以二进制格式存储,记录所有修改数据库数据的SQL语句(如insert、update、delete)或事件(如表结构变更)

核心功能:

配置:

系统级配置:使用Vim 编辑器编辑MySQL的配置文件(vim /etc/mysql/my.cnf),永久生效

会话级配置:在命令行客户端中设置变量session sql_log_bin,仅本次连接生效

-- 1 -> 开启 
-- 0 -> 关闭
mysql> set session sql_log_bin = [1 | 0];
mysql> show variables like '%sql_log_bin%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | ON   |
+---------------+-------+

1.2 磁盘文件

日志文件的大小达到 max_binlog_size设置的上线(默认值1GB)

可以使用reset master重置日志文件和索引文件为初始状态

1.3 过期时间

在配置文件my.cnf中配置日志文件的过期时间,默认为2592000秒(30天),过期后会自动删除

#MySQL服务器配置
[mysqld]
#二进制日志过期时间
binlog_expire_logs_seconds=2592000

查看系统变量

mysql> show variables like '%binlog_expire_logs_seconds%';
+----------------------------+---------+
| Variable_name              | Value   |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+

1.4 日志格式

推荐使用row格式

1.5 刷盘策略

binlog日志文件的刷盘策略可以通过sync_binlog系统变量来设置

1.6 mysqlbinlog工具

简介:mysqlbinlog是MySQL自带的二进制日志解析工具,用于查看和管理MySQL的二进制日志文件(binlog)
主要功能:

1.6.1 准备数据

-- 建库
drop database if exists testdb;
create database testdb character set utf8mb4 collate utf8mb4_0900_ai_ci;
use testdb
-- 建表
create table t1 (
id bigint not null,
name varchar(20) not null
);
-- 写⼊
insert into t1 (id, name) values (101, 'user101');
insert into t1 (id, name) values (102, 'user102');
insert into t1 (id, name) values (103, 'user103');
insert into t1 (id, name) values (104, 'user104');
insert into t1 (id, name) values (105, 'user105');
insert into t1 (id, name) values (106, 'user106');
-- 更新
update t1 set name = 'person101' where id = 101;
update t1 set name = 'person102' where id = 102;
update t1 set name = 'person103' where id = 103;
-- 删除
delete from t1 where id = 104;
delete from t1 where id = 105;
delete from t1 where id = 106;

1.6.2 查看binlog

mysqlbinlog --no-defaults --database=testdb --base64-output=decode-rows -vv --start-position=421 --stop-position=4626 binlog.000001

1.6.3 数据恢复

2.数据备份与恢复

2.1 分类

2.1.1 按数据存储形式划分

逻辑备份:备份数据库的逻辑结构和数据内容(如SQL语句、导出文件),与物理存储无关。例如MySQL的mysqldump

2.1.2 按数据库运行状态划分

2.1.3 按备份数据范围划分

全量备份:备份整个数据库或文件系统的所有数据,包括所有的文件、数据库表和配置文件等。不依赖于其他备份,可用独立恢复数据

增量备份:仅备份自上次备份后变化的数据块

差异备份:仅备份自上次全量备份以来所有变化的数据

2.2 mysqldump

2.2.1 工具介绍

作用:它是MySQL数据库系统提供的命令行工具,用于逻辑备份数据导出。它生成包含SQL语句的文本文件,可用于重建数据库结构和数据
核心功能:

2.2.2 示例

查看导出的SQL文件

cat /backup/mysql/dump.sql

2.2.3 数据一致性问题

解决办法:使用--single-transaction,在事务中备份,使用MVCC获取一致性视图

2.3 mysqlimport

2.3.1 工具介绍

作用:它是MySQL数据库系统提供的命令行工具,用于高效地将文本文件数据导入到数据库表中。它是load data infile语句的封装,适用于批量数据加载场景
核心功能:

2.3.2 示例

查看导出的文本文件

2.4 Xtrabackup

2.4.1 工具介绍

作用:Xtrabackup 是由 Percona 开发的一款开源MySQL数据库备份工具。它通过热备份实现高性能的数据库备份与恢复,适用于大规模生产环境
核心功能:

官网:Xtrabackup下载网址

版本选择:

查看Linux系统版本

查看MySQL版本

查看CPU架构

安装软件源

# 安装软件源
dpkg -i percona-xtrabackup-80_8.0.35-34-1.noble_amd64.deb
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80
# 如果提示缺少依赖运行以下命令安装
apt-get install -f
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80

验证是否安装成功

2.4.2 示例

创建备份用户

mysql> create user 'backup_user'@'localhost' identified with mysql_native_password by '123456Aa@@';
Query OK, 0 rows affected (0.00 sec)
mysql> grant backup_admin,process,select,reload,lock tables,replication client,event on *.* to 'backup_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)

备份数据文件

xtrabackup --defaults-file=/etc/mysql/my.cnf --host=localhost --port=3306 --user=backup_user --password=123456Aa@@ --use-memory=1G --parallel=2 --backup --target-dir=/backup/mysql/full

移动或删除原来的的数据目录

创建数据目录同名的空目录

# 准备
xtrabackup --prepare --target-dir=/backup/mysql/full
# 数据恢复
xtrabackup --defaults-file=/etc/mysql/my.cnf --copy-back --parallel=2 --target-dir=/backup/mysql/full

为恢复后的数据目录授权

chown -R mysql:mysql /var/lib/mysql

重启MySQL服务

systemctl restart mysql

登录数据库验证数据

mysql> use testdb;
No connection. Trying to reconnect...
Connection id:    8
Current database: *** NONE ***
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t1;
+-----+-----------+
| id  | name      |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+

到此这篇关于MySQL核心日志与备份恢复示例详解的文章就介绍到这了,更多相关mysql日志与备份恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文