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

文章目录

🌟数据库服务日志管理

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

通用日志(默认不存在)

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

错误日志(默认存在)

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

二进制日志(默认存在)

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

慢查询日志

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

📝通用日志管理

bash 复制代码
general_log=ON
general_log_file=/data/3306/data/general.log

❌错误日志管理

bash 复制代码
默认存在-数据库目录-db01.err

#禁用错误日志
log_error=0/off

#指定错误日志保存在哪
log_error=./db.err

⚠️错误日志保存在哪

  • 日志的时间于系统时间对不上,如何修改?
bash 复制代码
1.修改配置文件
vim /etc/my.cnf
log_timestamps = SYSTEM

2.重启数据库服务
/etc/init.d/mysqld restart

3.查看日志信息
tail -f /data/3306/data/db01.err

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

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

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

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

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

查看二进制日志

1) 在数据库中查看
bash 复制代码
#获取数据库中所有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)在命令行中查看
bash 复制代码
1.进入数据库目录
cd /data/3306/data/

2.使用mysqlbinlog命令查看
mysqlbinlog binlog.000024

3.从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.sql

5.恢复指定范围位置的事务操作
mysql -uroot -pzhu </backup/xiaoA.sql

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

SBR(语句格式记录 )

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

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

bash 复制代码
vim /etc/my.cnf
binlog_format=statement

/etc/init.d/mysqld restart

RBR(行格式记录)

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

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

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

bash 复制代码
vim /etc/my.cnf
binlog_format=row

/etc/init.d/mysqld restart

默认是以row行格式记录

MBR(混合方式记录)

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

✂️二进制日志切割

手动执行命令切割

bash 复制代码
1.数据库中切割
flush logs;

2.命令行切割:
mysqladmin -uroot -pzhu flush-logs

✂️在数据库中切割

✂️在命令行中切割

根据文件大小进行切割

bash 复制代码
max_binlog_size  字节量切割(默认1G)

mysql> select @@max_binlog_size;
+-------------------+
| @@max_binlog_size |
+-------------------+
|        1073741824 |
+-------------------+
1 row in set (0.00 sec)

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

bash 复制代码
#!/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; then
        log_message "ERROR: 无法连接到 MySQL 服务器"
        exit 1
    fi
}

# 按时间清理
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 ]; then
            for i in $(seq 1 $((keep_from - 1))); do
                local file_name=$(printf "mysql-bin.%06d" $i)
                if [ -f "$BINLOG_DIR/$file_name" ]; then
                    log_message "删除旧 binlog 文件: $file_name"
                    rm -f "$BINLOG_DIR/$file_name"
                fi
            done
        fi
    fi
}

# 刷新 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" ]; then
    purge_by_time
else
    purge_by_files
fi

# 显示执行后状态
show_binlog_status

log_message "========== binlog 管理脚本执行完成 =========="

#编写定时任务
crontab -e
# 每天凌晨2点执行 binlog 切割
0 2 * * * /bin/bash /server/scripts/purge_binlog.sh >/dev/null 2>&1

✂️二进制日志清理

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

bash 复制代码
1.超过一小时自动清理(3600秒)
vim /etc/my.cnf
binlog-expire-logs-seconds=3600

2.根据二进制日志存在了多少天进行清理
vim /etc/my.cnf
expire_logs_days=0

进行日志信息手工清理

bash 复制代码
# 手工清理binlog.000002之前的binlog文件
purge binary logs to 'binlog.000002';

# 根据指定的时间进行清理
PURGE BINARY LOGS BEFORE '2025-08-20 22:46:26';

🛠️二进制日志远程备份

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

bash 复制代码
1.创建备份目录
mkdir -p /binlog_backup/10.0.0.{51..55}

2.进入备份目录
cd /binlog_backup/10.0.0.51

3.开始备份
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

安装软件包

bash 复制代码
1.进入到存放软件包的目录
cd /opt/

2.解压软件包
unzip binlog2sql-master.zip

3.检查
ls -l binlog2sql-master

第三方工具运行环境

bash 复制代码
1.准备requirements.txt
[root@db01 /opt]# cat requirements.txt 
PyMySQL==0.9.3
wheel==0.29.0
mysql-replication==0.13

2.安装python3
yum -y install python3

3.安装运行环境
pip3 install cryptography
pip3 install -r requirments.txt

4.检查
pip3 show pymysql

登录数据库写入数据

bash 复制代码
1.登录数据库
mysql -uroot -pzhu

2.切换到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;

模拟误操作

bash 复制代码
1.误插入数据
insert into t1 values (4,'xiaoD',18);

2.误修改数据
update t1 set name='zhu' where id=2;

3.误删除数据
delete from t1 where id=3;

测试应用数据闪回工具

bash 复制代码
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'  -B

update t1 set name='oldboy' where id=2; --> update t1 set name='xiaoB' where id=2;
       xiaoB-oldboy id=2
       
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -p123456 -d xiaoD -t t1 --sql-type=delete --start-file='binlog.000003'  -B

delete from t1 where id=3; --> insert into t1 values (3,'xiaoC',20);
bash 复制代码
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模块

bash 复制代码
pip3 install cryptography

测试应用数据闪回工具

  • insert误插入数据恢复
bash 复制代码
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误修改数据恢复
bash 复制代码
1.运行闪回工具
python3 binlog2sql.py -h10.0.0.51 -P3306 -uroot -pzhu -d xiaoD -t t1 --sql-type=update --start-file='binlog.000012' -B

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

2.取出逆向操作SQL语句
INSERT INTO `xiaoD`.`t1`(`age`, `id`, `name`) VALUES (3, 'xiaoC', 18);

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

bash 复制代码
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)

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

实现数据库信息全备

bash 复制代码
1.本地备份
mysqldump -uroot -p密码 -S socket_file -A >/backup/all.sql

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

异地备份

实现数据库恢复数据

bash 复制代码
1.登录数据库
mysql -uroot -p

2.恢复数据库
source /backup/all.sql

实现数据库分库备份

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

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

bash 复制代码
1.命令行恢复
mysqldump -uroot -pzhu -B world >/backup/word.sql
mysqldump -uroot -pzhu -B www >/backup/www.sql

2.登录数据库恢复
mysql -uroot -pzhu
source /backup/word.sql
source /backup/www.sql

实现数据库分库恢复

bash 复制代码
1.命令行恢复
mysql -uroot -pzhu </backup/word.sql
mysql -uroot -pzhu </backup/www.sql

2.登录数据库恢复
mysql -uroot -pzhu
source /backup/word.sql
source /backup/www.sql

实现数据库分表备份

bash 复制代码
mysqldump -uroot -pzhu xiaoD t1 t2 t3 >/backup/xiaoD_t1_t2_t3.sql

实现数据库分表恢复

bash 复制代码
1.命令行恢复
mysql -uroot -pzhu xiaoD </backup/xiaoD_t1_t2_t3.sql

2.登录数据库恢复
mysql -uroot -pzhu
use xiaoD;
source /backup/xiaoD_t1_t2_t3.sql

💾物理备份与恢复

物理备份原理

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

物理恢复原理

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

物理备份过程

bash 复制代码
1.停止数据库服务
/etc/init.d/mysqld stop

2.备份数据库目录
cp -a /data/3306/data/ /backup/data_2025_08_21

3.启动数据库服务
/etc/init.d/mysqld start

物理恢复过程

bash 复制代码
1.停止数据库服务
/etc/init.d/mysqld stop

2.删除数据库目录数据
rm -rf /data/3306/data/*

3.拷贝备份数据到数据库目录
cp -a /backup/data_2025_08_21 /data/3306/data/

4.启动数据库服务
/etc/init.d/mysqld start

实现物理方式热备(XtraBackup)

bash 复制代码
1.下载备份工具
https://www.percona.com/downloads/

2.安装备份工具
yum localinstall -y  percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm

3.创建保存物理数据的空目录
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

数据库恢复

bash 复制代码
1.停止数据库服务
/etc/init.d/mysqld stop

2.删除数据库目录文件
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/data

5.启动数据库服务
/etc/init.d/mysqld start

物理增量备份

bash 复制代码
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 加载第二次的全量数据

物理增量恢复

  • 模拟数据库数据损坏
bash 复制代码
drop database week01;
drop database week02;
drop database week03;
bash 复制代码
1.停止数据库服务
/etc/init.d/mysqld stop

2.删除数据库存储目录
rm -rf /data/3306/data/*

3.全量数据目录中数据信息恢复到内存中的(不做恢复)
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week01

4.第一次增量备份过程中需要恢复到内存中的数据也做加载
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week01 --incremental-dir=/data/backup/week02

5.第二次增量备份过程中需要恢复到内存中的数据也做加载
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/week01 --incremental-dir=/data/backup/week03

6.将全量和增量备份过程中,需要恢复到内存的数据统一恢复到内存中
xtrabackup --prepare --target-dir=/data/backup/week01

--apply-log-only  -- 取消undo日志文件加载过程

以上信息表示将内存信息做整合恢复

7.将磁盘信息做整合恢复
xtrabackup --datadir=/data/3306/data --copy-back --target-dir=/data/backup/week01

8.修改数据目录所属主
chown -R mysql.mysql /data/3306/data

9.启动数据库
/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

在主库中进行数据备份

bash 复制代码
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.sql

4.查看位置点
head -30 /backup/all.sql

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

在从库中进行数据恢复

bash 复制代码
1.登录数据库
mysql -uroot -pzhu

2.恢复数据库
mysql>source /tmp/all.sql

在从库中进行主从配置

bash 复制代码
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表

激活主从同步功能

bash 复制代码
start slave;

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

主从同步异常如何排查

bash 复制代码
show slave status\G
Slave_IO_Running: No
Slave_SQL_Running: Yes

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

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

bash 复制代码
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线程正常运行

再次查看数据库

相关推荐
捷智算云服务2 分钟前
混合云新篇章:H100裸金属租赁与云计算的协同效应
云计算
数据要素X19 分钟前
寻梦数据空间 | 架构篇:从概念到落地的技术实践与突破性创新
大数据·运维·数据仓库·微服务·数据治理·数据中台·可信数据空间
RestCloud27 分钟前
在制造业数字化转型浪潮中,数据已成为核心生产要素。然而,系统割裂、数据滞后、开发运维成本高等问题,却像顽固的 “数据枷锁”,阻碍着企业发展。ETLCloud与
数据库·postgresql
!chen37 分钟前
【Spring Boot】自定义starter
java·数据库·spring boot
玉石观沧海38 分钟前
高压变频器故障代码解析F67 F68
运维·经验分享·笔记·分布式·深度学习
海阳宜家电脑44 分钟前
SQL Server连接字符串
服务器·网络
流烟默1 小时前
MySQL索引调优之索引顺序必须和字段顺序一致吗?
mysql·索引调优
努力学习的小廉1 小时前
深入了解linux网络—— 自定义协议(上)
linux·服务器·网络
十碗饭吃不饱1 小时前
sql报错:java.sql.SQLSyntaxErrorException: Unknown column ‘as0‘ in ‘where clause‘
java·数据库·sql
我是Superman丶2 小时前
【优化】Mysql指定索引查询或忽略某个索引
数据库·mysql