当前位置: 首页 > news >正文

数据库服务-日志管理-备份与恢复-主从同步

文章目录

  • 🌟数据库服务日志管理
    • 💡数据库服务中有什么日志(4种)
      • 通用日志(默认不存在)
      • 错误日志(默认存在)
      • 二进制日志(默认存在)
      • 慢查询日志
    • 📝通用日志管理
    • ❌错误日志管理
    • 📝二进制日志(默认存在)
      • 查看二进制日志
        • 1) 在数据库中查看
        • 2)在命令行中查看
    • 📝二进制日志记录格式(三种)
      • **SBR(语句格式记录 )**
      • **RBR(行格式记录)**
      • **MBR(混合方式记录)**
    • ✂️二进制日志切割
      • 手动执行命令切割
      • 根据文件大小进行切割
      • **结合脚本实现自动进行切割**
    • ✂️二进制日志清理
      • 进行日志信息自动清理(根据时间)
      • 进行日志信息手工清理
    • 🛠️二进制日志远程备份
    • 🚀利用binlog日志实现误操作数据的闪回功能
      • 在github下载数据闪回工具binlog2sql
      • 安装软件包
      • 第三方工具运行环境
      • 登录数据库写入数据
      • 模拟误操作
      • 测试应用数据闪回工具
      • 安装cryptography模块
      • 测试应用数据闪回工具
      • 根据闪回工具获取到的逆向SQL语句进行恢复数据
  • 🌟数据库服务备份恢复
    • 💾逻辑备份与恢复
      • 备份原理
      • 恢复原理
      • 实现数据库信息全备
      • 实现数据库恢复数据
      • 实现数据库分库备份
      • 实现数据库分库恢复
      • 实现数据库分表备份
      • 实现数据库分表恢复
    • 💾物理备份与恢复
      • 物理备份原理
      • 物理恢复原理
      • 物理备份过程
      • 物理恢复过程
      • 实现物理方式热备(XtraBackup)
      • 数据库恢复
      • 物理增量备份
      • 物理增量恢复
  • 🌟数据库服务主从同步(基础方式)
    • 📐数据库主从同步原理
      • 详细复述
      • 简述过程
    • 🖥️主从同步实践过程
      • 准备两个数据库实例环境
      • 在主库中进行数据备份
      • 在从库中进行数据恢复
      • 在从库中进行主从配置
      • 激活主从同步功能
      • 主从同步异常如何排查

🌟数据库服务日志管理

💡数据库服务中有什么日志(4种)

通用日志(默认不存在)

✅作用: 记录登录数据库的用户信息,登录用户操作行为会被记录

错误日志(默认存在)

✅作用: 记录数据库运行或启动过程的错误信息,便于排查数据库问题

二进制日志(默认存在)

✅作用: 记录数据库中的事务操作信息,可以用于恢复数据/可以用于主从同步

慢查询日志

✅作用: 记录在操作数据库过程中的慢查询语句

📝通用日志管理

general_log=ON
general_log_file=/data/3306/data/general.log

❌错误日志管理

默认存在-数据库目录-db01.err#禁用错误日志
log_error=0/off#指定错误日志保存在哪
log_error=./db.err

⚠️错误日志保存在哪

  • 日志的时间于系统时间对不上,如何修改?
1.修改配置文件
vim /etc/my.cnf
log_timestamps = SYSTEM2.重启数据库服务
/etc/init.d/mysqld restart3.查看日志信息
tail -f /data/3306/data/db01.err

使用系统本地时间记录日志

📝二进制日志(默认存在)

log_bin 此配置项可以定义binlog日志是否开启

sql_log_bin 此配置项可以定义binlog日志是否做事务记录

做binlog日志数据恢复时,避免记录重复的事务记录,会临时将sql_log_bin功能关闭

查看二进制日志

1) 在数据库中查看
#获取数据库中所有binlog日志信息
show binary logs;#查看数据库中正在使用的binlog日志信息
show master status;#查看binlog内容
show binlog events in 'binlog.000007';

登录数据库查看数据库中正在使用的binlog日志信息

Position: 事务信息的位置点,便于过滤需要恢复的数据信息

Binlog_Do_DB: 指定哪些数据库的事务操作会被记录到binlog(二进制日志记录信息白名单)

Binlog_Ignore_DB: 指定哪些数据库的事务操作不会记录到binlog(二进制日志记录信息黑名单)

查看binlog内容

记录了DDL、DML、DCL的事务操作,不会记录DQL查询操作

当执行DML事务操作的前,使用了begin,会禁用自动提交功能,当进行事务操作过程中,出现了DDL或DCL语句,也会自动触发commit提交事务的操作

2)在命令行中查看
1.进入数据库目录
cd /data/3306/data/2.使用mysqlbinlog命令查看
mysqlbinlog binlog.0000243.从binlog日志中,根据位置点过滤指定事务信息
mysqlbinlog --base64-output=decode-rows -vvv binlog.000007 --start-position=157 --stop-position=794
--start-position=  从哪过滤
--stop-position=   到哪结束
--base64-output=decode-rows -vvv 从binlog日志中,将DML编码语句进行解码,以明文方式显示DML语句4.导出指定范围位置的事务信息
mysqlbinlog --base64-output=decode-rows -vvv binlog.000007 --start-position=157 --stop-position=794 >/backup/xiaoA.sql5.恢复指定范围位置的事务操作
mysql -uroot -pzhu </backup/xiaoA.sql

📝二进制日志记录格式(三种)

SBR(语句格式记录 )

会将DML操作事务信息,以语句明文方式

应用场景:对表操作过程中,没有函数信息应用,并且需要更直观查看DML事务信息

vim /etc/my.cnf
binlog_format=statement/etc/init.d/mysqld restart

RBR(行格式记录)

会将DML操作事务信息,以具体数据行的信息记录

应用场景:对表操作过程中,需要函数信息应用,并且有主从同步架构,为了保证数据一致性

因为函数的值是变化的,语句格式无法准确的记录当时写入的数据

vim /etc/my.cnf
binlog_format=row/etc/init.d/mysqld restart

默认是以row行格式记录

MBR(混合方式记录)

会将DML操作事务信息,进行自动识别,根据识别后内容自动选择记录方式

✂️二进制日志切割

手动执行命令切割

1.数据库中切割
flush logs;2.命令行切割:
mysqladmin -uroot -pzhu flush-logs

✂️在数据库中切割

✂️在命令行中切割

根据文件大小进行切割

max_binlog_size  字节量切割(默认1G)mysql> select @@max_binlog_size;
+-------------------+
| @@max_binlog_size |
+-------------------+
|        1073741824 |
+-------------------+
1 row in set (0.00 sec)

结合脚本实现自动进行切割

#!/bin/bash# 综合 binlog 管理脚本
# 支持按时间和按文件数量两种方式# ================== 配置区域 ==================
MYSQL_CMD="/app/tools/mysql/bin/mysql"
MYSQL_USER="root"
MYSQL_PASS="zhu"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"BINLOG_DIR="/data/3306/data"
LOG_FILE="/data/3306/logs/binlog_manage.log"# 清理方式选择
PURGE_BY="time"  # time 或 files
KEEP_DAYS=7      # 按时间保留天数
KEEP_FILES=20    # 按文件数量保留个数# ================== 函数定义 ==================
log_message() {echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}check_mysql_connection() {if ! $MYSQL_CMD -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "SELECT 1;" >/dev/null 2>&1; thenlog_message "ERROR: 无法连接到 MySQL 服务器"exit 1fi
}# 按时间清理
purge_by_time() {local purge_date=$(date -d "$KEEP_DAYS days ago" +"%Y-%m-%d %H:%M:%S")log_message "按时间清理: 删除 $purge_date 之前的 binlog"$MYSQL_CMD -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "PURGE BINARY LOGS BEFORE '$purge_date';"
}# 按文件数量清理
purge_by_files() {log_message "按文件数量清理: 保留最近 $KEEP_FILES 个 binlog 文件"# 获取应该保留的最新 binlog 文件名local latest_file=$($MYSQL_CMD -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW MASTER STATUS\G" | grep "File:" | awk '{print $2}')if [ -n "$latest_file" ]; then# 计算应该删除的文件序列号local latest_num=$(echo $latest_file | sed 's/mysql-bin.//')local keep_from=$((10#$latest_num - KEEP_FILES + 1))if [ $keep_from -gt 0 ]; thenfor i in $(seq 1 $((keep_from - 1))); dolocal file_name=$(printf "mysql-bin.%06d" $i)if [ -f "$BINLOG_DIR/$file_name" ]; thenlog_message "删除旧 binlog 文件: $file_name"rm -f "$BINLOG_DIR/$file_name"fidonefifi
}# 刷新 binlog
flush_binlog() {log_message "刷新 binlog,创建新的日志文件"$MYSQL_CMD -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "FLUSH BINARY LOGS;"
}show_binlog_status() {log_message "当前 binlog 状态:"$MYSQL_CMD -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW MASTER LOGS;" >> $LOG_FILE 2>&1
}# ================== 主程序 ==================
log_message "========== binlog 管理脚本开始执行 =========="# 检查 MySQL 连接
check_mysql_connection# 显示执行前状态
show_binlog_status# 刷新 binlog
flush_binlog# 根据配置方式进行清理
if [ "$PURGE_BY" = "time" ]; thenpurge_by_time
elsepurge_by_files
fi# 显示执行后状态
show_binlog_statuslog_message "========== binlog 管理脚本执行完成 =========="#编写定时任务
crontab -e
# 每天凌晨2点执行 binlog 切割
0 2 * * * /bin/bash /server/scripts/purge_binlog.sh >/dev/null 2>&1

✂️二进制日志清理

进行日志信息自动清理(根据时间)

1.超过一小时自动清理(3600)
vim /etc/my.cnf
binlog-expire-logs-seconds=36002.根据二进制日志存在了多少天进行清理
vim /etc/my.cnf
expire_logs_days=0

进行日志信息手工清理

# 手工清理binlog.000002之前的binlog文件
purge binary logs to 'binlog.000002';# 根据指定的时间进行清理
PURGE BINARY LOGS BEFORE '2025-08-20 22:46:26';

🛠️二进制日志远程备份

实现高可用会应用binlog日志远程备份功能

1.创建备份目录
mkdir -p /binlog_backup/10.0.0.{51..55}2.进入备份目录
cd /binlog_backup/10.0.0.513.开始备份
mysqlbinlog -R --host=10.0.0.51 --user=root --password=zhu --raw --stop-never binlog.000007 &
-R           远程拉取目标主机日志信息
--host       指定拉取日志主机地址
-user        指定登录目标数据库服务用户
--password   指定登录目标数据库服务用户密码
--raw        实时拉取日志信息
--stop-never 以守护进程方式一直拉取日志信息
binlog.000007 从哪个日志开始拉取日志信息

🚀利用binlog日志实现误操作数据的闪回功能

数据信息物理损坏:硬件出现异常 数据库服务异常 (主从架构 高可用架构)

数据信息逻辑损坏:出现数据信息误操作(一般是DML)

常规修复方法:备份文件修复或二进制日志修复

**快捷的修复方法:****数据闪回修复工具**修复

在github下载数据闪回工具binlog2sql

www.github.com – 搜索 binlog2sql

requirments.txt

安装软件包

1.进入到存放软件包的目录
cd /opt/2.解压软件包
unzip binlog2sql-master.zip3.检查
ls -l binlog2sql-master

第三方工具运行环境

1.准备requirements.txt
[root@db01 /opt]# cat requirements.txt 
PyMySQL==0.9.3
wheel==0.29.0
mysql-replication==0.132.安装python3
yum -y install python33.安装运行环境
pip3 install cryptography
pip3 install -r requirments.txt4.检查
pip3 show pymysql

登录数据库写入数据

1.登录数据库
mysql -uroot -pzhu2.切换到test库
use test;3.创建t1表
create table t1 (id int,name char(10),age int);4.插入数据
insert into t1 values (1,'xiaoA',18),(2,'xiaoB',18),(3'xiaoC',18);5.查看数据
select * from t1;

模拟误操作

1.误插入数据
insert into t1 values (4,'xiaoD',18);2.误修改数据
update t1 set name='zhu' where id=2;3.误删除数据
delete from t1 where id=3;

测试应用数据闪回工具

1.恢复误insert插入的数据
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=insert --start-file='binlog.000012' -B
-h 指定哪台数据库
-P 指定哪个数据库实例
-u 指定登录数据库用户
-p 指定登录数据库密码
-d 指定哪个库做闪回
-t 指定哪个表做闪回
--sql-type= 之前做了什么类似的误操作
--start-file= 指定误操作记录在哪个的binlog文件里
-B 获取逆向操作SQL语句insert into t1 values (4,'xiaoD',18); -逆向操作信息-> delete from t1 where id=4 and name=xiaoD and age=18;  -- 在数据库中执行python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -p123456 -d xiaoD -t t1 --sql-type=update --start-file='binlog.000003'  -Bupdate t1 set name='oldboy' where id=2; --> update t1 set name='xiaoB' where id=2;xiaoB-oldboy id=2python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -p123456 -d xiaoD -t t1 --sql-type=delete --start-file='binlog.000003'  -Bdelete from t1 where id=3; --> insert into t1 values (3,'xiaoC',20);
1.运行闪回工具
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=insert --start-file='binlog.000012'2.运行闪回工具时报错
Python 环境缺少必要的加密库导致的

RuntimeError: cryptography is required for sha256_password or caching_sha2_password

运行时错误:sha256_password 或 caching_sha2_password 需要 cryptography 模块

安装cryptography模块

pip3 install cryptography

测试应用数据闪回工具

  • insert误插入数据恢复
1.运行闪回工具
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=insert --start-file='binlog.000012' -B
-h 指定哪台数据库
-P 指定哪个数据库实例
-u 指定登录数据库用户
-p 指定登录数据库密码
-d 指定哪个库做闪回
-t 指定哪个表做闪回
--sql-type= 之前做了什么类似的误操作
--start-file= 指定误操作记录在哪个的binlog文件里
-B 获取逆向操作SQL语句2.取出逆向操作SQL语句
DELETE FROM `xiaoD`.`t1` WHERE `age`=4 AND `id`='xiaoD' AND `name`=18

  • update误修改数据恢复
1.运行闪回工具
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=update --start-file='binlog.000012' -B2.取出逆向操作SQL语句
UPDATE `xiaoD`.`t1` SET `age`=2, `id`='xiaoB', `name`=18 WHERE `age`=2 AND `id`='zhu' AND `name`=18

  • delete误删除数据恢复
1.运行闪回工具
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=delete --start-file='binlog.000012' -B2.取出逆向操作SQL语句
INSERT INTO `xiaoD`.`t1`(`age`, `id`, `name`) VALUES (3, 'xiaoC', 18);

根据闪回工具获取到的逆向SQL语句进行恢复数据

1.误插入数据恢复
DELETE FROM `xiaoD`.`t1` WHERE `id`=4 AND `name`='xiaoD' AND `age`=18;2.误修改数据恢复
UPDATE `xiaoD`.`t1` SET `id`=2, `name`='xiaoB', `age`=18 WHERE `id`=2 AND `name`='zhu' AND `age`=18;3.误删除数据恢复
INSERT INTO `xiaoD`.`t1`(`id`, `name`, `age`) VALUES (3, 'xiaoC', 18);

🌟数据库服务备份恢复

💾逻辑备份与恢复

备份原理

读取数据库中数据对象以及表中数据信息,将数据对象创建过程中数据插入过程SQL语句导出

show databases – show create database 库名 – 创库语句

use 库名 – show tables – show create tables 表明 – 创表语句

识别表中数据信息 – insert 语句

恢复原理

重新加载备份SQL语句

应用场景:只适合于少量数据进行备份于恢复(50G)

可以将备份后的数据进行灵活恢复

实现数据库信息全备

1.本地备份
mysqldump -uroot -p密码 -S socket_file -A >/backup/all.sql2.远程备份(异地备份)
mysqldump -uroot -p密码 -h数据库服务器IP地址 -P数据库服务端口 -A >/backup/all.sql

异地备份

实现数据库恢复数据

1.登录数据库
mysql -uroot -p2.恢复数据库
source /backup/all.sql

实现数据库分库备份

每个数据库分开来备份,尽量不要多个数据库同时备份,同时备份可能会影响业务

编写脚本每天凌晨循环备份数据库

1.命令行恢复
mysqldump -uroot -pzhu -B world >/backup/word.sql
mysqldump -uroot -pzhu -B www >/backup/www.sql2.登录数据库恢复
mysql -uroot -pzhu
source /backup/word.sql
source /backup/www.sql

实现数据库分库恢复

1.命令行恢复
mysql -uroot -pzhu </backup/word.sql
mysql -uroot -pzhu </backup/www.sql2.登录数据库恢复
mysql -uroot -pzhu
source /backup/word.sql
source /backup/www.sql

实现数据库分表备份

mysqldump -uroot -pzhu xiaoD t1 t2 t3 >/backup/xiaoD_t1_t2_t3.sql

实现数据库分表恢复

1.命令行恢复
mysql -uroot -pzhu xiaoD </backup/xiaoD_t1_t2_t3.sql2.登录数据库恢复
mysql -uroot -pzhu
use xiaoD;
source /backup/xiaoD_t1_t2_t3.sql

💾物理备份与恢复

物理备份原理

将数据库数据目录中的所有信息做备份

物理恢复原理

将备份后的数据目录重新迁移到原有数据库数据目录中,重新启动数据库服务加载

物理备份过程

1.停止数据库服务
/etc/init.d/mysqld stop2.备份数据库目录
cp -a /data/3306/data/ /backup/data_2025_08_213.启动数据库服务
/etc/init.d/mysqld start

物理恢复过程

1.停止数据库服务
/etc/init.d/mysqld stop2.删除数据库目录数据
rm -rf /data/3306/data/*3.拷贝备份数据到数据库目录
cp -a /backup/data_2025_08_21 /data/3306/data/4.启动数据库服务
/etc/init.d/mysqld start

实现物理方式热备(XtraBackup)

1.下载备份工具
https://www.percona.com/downloads/2.安装备份工具
yum localinstall -y  percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm3.创建保存物理数据的空目录
mkdir -p /data/backup/full/4.全量备份
xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.57 --user=root --password=zhu --port=3306 --backup --target-dir=/data/backup/full

数据库恢复

1.停止数据库服务
/etc/init.d/mysqld stop2.删除数据库目录文件
rm -rf /data/3306/data/*3.恢复数据库数据
xtrabackup --prepare --target-dir=/data/backup/full     ---恢复备份过程中的内存数据
xtrabackup --copy-back --target-dir=/data/backup/full   ---恢复备份过程前的磁盘数据4.修改数据库目录所属主
chown -R mysql.mysql /data/3306/data5.启动数据库服务
/etc/init.d/mysqld start

物理增量备份

mkdir -p /data/backup/week01   --作为第一周全备数据存储目录
mkdir -p /data/backup/week02   --作为第二周全备数据存储目录
mkdir -p /data/backup/week03   --作为第三周全备数据存储目录第一周全备
xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.57 --user=root --password=zhu --port=3306 --backup --parallel=4 --target-dir=/data/backup/week01
--parallel=4  表示备份过程中使用4个备份线程#创建第二周的增量数据
create database week02;
use week02
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;第二周增量备份
xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.57 --user=root --password=zhu --port=3306 --backup --parallel=4 --target-dir=/data/backup/week02 --incremental-basedir=/data/backup/week01
--incremental-basedir 加载第一次的全量数据#创建第三周的增量数据
create database week03;
use week03
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;第三周做增量备份
xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.57 --user=root --password=zhu --port=3306 --backup --parallel=4 --target-dir=/data/backup/week03 --incremental-basedir=/data/backup/week02
--incremental-basedir 加载第二次的全量数据

物理增量恢复

  • 模拟数据库数据损坏
drop database week01;
drop database week02;
drop database week03;

1.停止数据库服务
/etc/init.d/mysqld stop2.删除数据库存储目录
rm -rf /data/3306/data/*3.全量数据目录中数据信息恢复到内存中的(不做恢复)
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week014.第一次增量备份过程中需要恢复到内存中的数据也做加载
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week01 --incremental-dir=/data/backup/week025.第二次增量备份过程中需要恢复到内存中的数据也做加载
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week01 --incremental-dir=/data/backup/week036.将全量和增量备份过程中,需要恢复到内存的数据统一恢复到内存中
xtrabackup --prepare --target-dir=/data/backup/week01--apply-log-only  -- 取消undo日志文件加载过程以上信息表示将内存信息做整合恢复7.将磁盘信息做整合恢复
xtrabackup --datadir=/data/3306/data --copy-back --target-dir=/data/backup/week018.修改数据目录所属主
chown -R mysql.mysql /data/3306/data9.启动数据库
/etc/init.d/mysqld start

🌟数据库服务主从同步(基础方式)

作用01:可以实现数据信息实时保存

作用02:可以实现数据库高可用架构

作用03:可以实现数据库读写分离功能(负载功能)

📐数据库主从同步原理

详细复述

1️⃣在从库上进行主从功能配置(change master to)

2️⃣当从库配置信息配置完毕后,会将配置信息进行保存,将内容保存到**master_info文件**中(mysql8.0版本以后保存在mysql库中的slave_master_info表)

3️⃣激活主从同步功能(start slave)

4️⃣在从库中会出现两个线程(**IO线程 **SQL线程)

 IO线程的出现,会完成三个工作任务a.读取master_info文件信息,根据文件内容向主库发起连接请求b.和主库建立连接会话,接受主库发送的binlog日志信息,保存到从库中继日志文件中(**<font style="color:#ECAA04;">relay log</font>**)c.会随着不断接受binlog日志信息,实时更新master_info文件位置点信息

5️⃣主库接受从库IO线程连接请求,会在主库中创建**binlog dump线程**

 dump线程的出现,会完成两个工作任务a.和从库建立维护会话b.监控binlog日志信息变化,并将新的**<font style="color:#ECAA04;">binlog日志</font>**中事务信息进行发送个从库IO线程

6️⃣在从库中应用SQL线程,完成主库信息同步

 **<font style="color:#ECAA04;">SQL线程</font>**的出现,会完成两个工作任务a.读取relay log文件中的事务信息,并将事务信息在从库中执行b.会将relay log中同步数据的位置点,记录到**<font style="color:#ECAA04;">relay log info文件</font>**(mysql8.0版本后保存在mysql库中的            slave_relay_log_info表)

简述过程

主从同步过程中的3个线程和四个文件

3个线程:

  • IO线程:(出现在从库)

可以实现和主建立会话,可以保存binlog日志信息

  • dump线程:(出现在主库)

可以实现和从库建立会话,可以将主库binlog日志信息发送给从库

  • SQL线程:(出现在从库)

可以读取从库中继日志信息,将日志中的事务信息做回放

4个文件:

主库中:

  • binlog文件:记录主库事务操作信息(DDL DML DCL)

从库中:

  • master info:记录主从配置信息
  • relay log:同步保存主库发送过来的事务操作信息
  • relay log info:记录relay log日志的回放位置点

🖥️主从同步实践过程

准备两个数据库实例环境

主机ip
db03(主库)10.0.0.53
db04(从库)10.0.0.54

在主库中进行数据备份

1.创建复制同步数据用户
create user repl@'10.0.0.%' identified with mysql_native_password by '123456';
grant replication slave on *.* to repl@'10.0.0.%';2.全量备份数据库
mysqldump -uroot -pzhu -A --single-transaction --source-data >/backup/all.sql
--single-transaction: 在备份期间可以不影响数据库业务,不加参数会锁库
--source-data: 在备份文件中记录备份后的binlog日志和位置点信息,便于主从同步3.将备份的sql文件拷贝到从库
scp -rp /backup/all.sql 10.0.0.54:/tmp/all.sql4.查看位置点
head -30 /backup/all.sql

binlog文件:binlog.000004,执行备份后的位置点21840105

在从库中进行数据恢复

1.登录数据库
mysql -uroot -pzhu2.恢复数据库
mysql>source /tmp/all.sql

在从库中进行主从配置

CHANGE MASTER TO
MASTER_HOST='10.0.0.53',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=21840105,
MASTER_CONNECT_RETRY=10;

配置完自动在mysql数据库slave_master_info表

激活主从同步功能

start slave;

可以看到未同步新创建的数据库

主从同步异常如何排查

show slave status\G
Slave_IO_Running: No
Slave_SQL_Running: Yes

⚠️主节点和从节点有相同的server id,主从的时候最好是不同的server id

server_id默认是1,从节点修改为2

1.修改配置文件
vim /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/app/tools/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
server_id=2
[mysql]
prompt=slave01 [\\d]>2.重启数据库服务
/etc/init.d/mysqld restart

此时IO线程和SQL线程正常运行

再次查看数据库

http://www.dtcms.com/a/352749.html

相关文章:

  • 项目经验处理
  • 获取服务器指标的信息
  • 幂等性设计艺术:在分布式重试风暴中构筑坚不可摧的防线
  • 大批量查询数据库大字段导致OOM问题
  • TCP服务端并发模型
  • 第5章 Excel公式与函数应用指南(4):日期和时间函数
  • Paimon——官网阅读:主键表
  • 计算神经科学数学建模编程深度前沿方向研究(下)
  • 【C++】类型系统:内置类型与自定义类型的对比
  • super(msg)层层上抛
  • 数据结构青铜到王者第七话---队列(Queue)
  • 基于Spring Boot的考研辅导知识共享平台-项目分享
  • Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)
  • 计算机组成原理实验报告
  • Kafka架构以及组件讲解
  • 【Kafka】重点概念和架构总结
  • Unity 串口通信
  • 解开 Ansible 任务复用谜题:过滤器用法、Include/Import 本质差异与任务文件价值详解
  • Writer-你的私人内容创作助手
  • TCP并发服务器构建
  • TensorFlow 深度学习 | Layer 基础知识介绍
  • 浅谈Elasticsearch数据写入流程的refresh和flush操作
  • 智能一卡通系统通过集成身份识别、权限管理、数据联动等技术,实现多场景一体化管理。以下是多奥基于最新技术趋势和应用案例的系统解析
  • screen命令
  • AI一周事件(2025年8月20日-8月26日)
  • 74hc4094芯片点亮LED闪烁问题的解决
  • JS(面试)
  • 深度学习——激活函数
  • 碳化硅衬底 TTV 厚度不均匀性测量的特殊采样策略
  • Redis哨兵机制:高可用架构的守护神!⚔️ 主从秒级切换实战指南