数据库服务-日志管理-备份与恢复-主从同步
文章目录
- 🌟数据库服务日志管理
- 💡数据库服务中有什么日志(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线程正常运行
✅再次查看数据库