作用:二进制日志(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 |
+---------------+-------+


在配置文件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 |
+----------------------------+---------+statement:记录的是 SQL 语句本身,即实际执行的 SQL 语句 row:记录的是每一行数据的变更情况,即具体哪些行被修改以及修改后的值 mixed:结合了statement和row格式的优点。默认情况下使用statement格式记录,但在某些可能导致不一致的场景下自动切换为row格式 推荐使用row格式


binlog日志文件的刷盘策略可以通过sync_binlog系统变量来设置
简介:mysqlbinlog是MySQL自带的二进制日志解析工具,用于查看和管理MySQL的二进制日志文件(binlog)
主要功能:

-- 建库
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;mysqlbinlog --no-defaults --database=testdb --base64-output=decode-rows -vv --start-position=421 --stop-position=4626 binlog.000001删除数据库
drop database testdb;通过日志文件恢复数据
mysqlbinlog --no-defaults --skip-gtids=true --start-position=234 --stop-position=4470 binlog.000001 | mysql -uroot -p -h127.0.0.1 -P3306

database关键字创建的对象)



作用:它是MySQL数据库系统提供的命令行工具,用于逻辑备份和数据导出。它生成包含SQL语句的文本文件,可用于重建数据库结构和数据
核心功能:
创建目录
mkdir /backup/mysql导出
mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb > /backup/mysql/dump.sql查看导出的SQL文件
cat /backup/mysql/dump.sql
删除数据库
drop database testdb;导入数据
在命令行通过MySQL客户端工具直接恢复
mysql -uroot -p < /backup/mysql/dump.sql登录MySQL客户端导入SQL文件
source /backup/mysql/dump.sql查看数据
mysql> use testdb;
Database changed
mysql> select * from t1;
+-----+-----------+
| id | name |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+--single-transaction,在事务中备份,使用MVCC获取一致性视图

作用:它是MySQL数据库系统提供的命令行工具,用于高效地将文本文件数据导入到数据库表中。它是load data infile语句的封装,适用于批量数据加载场景
核心功能:
查看MySQL允许导出的授权目录
mysql> show variables like 'secure_file_priv';
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+导出
select * from t1 into outfile '/var/lib/mysql-files/t1.txt';查看导出的文本文件

删除数据表
delete from t1;导入
mysqlimport -uroot -p testdb /var/lib/mysql-files/t1.txtmysql> select * from t1;
+-----+-----------+
| id | name |
+-----+-----------+
| 101 | person101 |
| 102 | person102 |
| 103 | person103 |
+-----+-----------+作用:Xtrabackup 是由 Percona 开发的一款开源MySQL数据库备份工具。它通过热备份实现高性能的数据库备份与恢复,适用于大规模生产环境
核心功能:
版本选择:




安装软件源
把在Windows系统上下载完毕的percona-xtrabackup-80_8.0.35-34-1.noble_amd64.deb文件上传至Linux服务器
安装软件源
# 安装软件源
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验证是否安装成功

创建备份用户
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 |
+-----+-----------+