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

Mysql主从复制之延时同步

1.延时同步概念

通过人为配置从库和主库延时N小时可以实现延时同步,延时同步可以解决数据库故障出现的数据丢失问题(物理损坏如直接使用rm删除数据库数据和逻辑损坏如使用drop命令删除数据库)

2.延时同步实操

2.1先配置从库延时同步,并且设置sql线程300秒后读取relay log

mysql> stop replica;
mysql> CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 300;
mysql>start replica;
mysql> show replica status\G
SQL_Delay: 300   #在这里可以查看到延时时间已经设置为300秒
SQL_Remaining_Delay: NULL

2.2主库上创建库和表

#创建数据库为relay
mysql> create database relay;
mysql> use relay
#创建表
mysql> create table t1(id int);
mysql> insert into t1 values (1);
#删除表
mysql> drop database relay;

2.3从库上查看sql线程及找到误删数据的位置

#查看sql线程时间
mysql> show slave status \GSQL_Delay: 300SQL_Remaining_Delay: 279
#在sql线程延迟300秒时间内发现误删除数据库则立马停止从库的sql线程
mysql> stop slave sql_thread;
#找到误删前relay log的起点和终点
mysql> show replica status\GRelay_Log_File: slave1-relay-bin.000002Relay_Log_Pos: 323  #当前读取的relay日志的位置#输入以下命令,找到误删数据的位置
mysql> show relaylog events in "slave1-relay-bin.000002";

2.4从库进行备份,并解除从库身份变成主库

#将relay log进行备份
[root@rep1 mysql]# mysqlbinlog --start-position=323 --stop-position=1053  /data/mysql/slave1-relay-bin.000002 > /tmp/relay.sql#恢复误删除的数据库
[root@rep1 mysql]# mysql -uroot -p -e 'source /tmp/relay.sql'
#查看数据是否恢复
mysql> select * from relay.t1;
+------+
| id   |
+------+
|    1 |
+------+#解除从库身份
mysql> stop replica;
mysql> reset replica all;

2.5从库变主库,备份误删的库到/backup/jeams

[root@mysql-mster172 ~]# mkdir /backup
[root@mysql-mster172 ~]# mysqldump -uroot -p123 --all-databases  > /backup/jeams.sql
#scp传输过去
[root@mysql-mster172 ~]# scp /backup/jeams.sql 192.168.75.171:~

2.6将之前的主库给初始化,变为现在的从库

#删除之前mysql所存储的文件
[root@mysql-master171 ~]# rm -rf /data/mysql/*
#进行初始化
[root@mysql-master171 ~]# mysqld --initialize --user=mysql
#启动mysql
[root@mysql-master171 ~]# /etc/init.d/mysqld start
#登录mysql,在上一条会给出初始密码
[root@mysql-master171 ~]# mysql -uroot -poERi2Hf,7x.B
#修改密码为123,然后输入时会让添密码,这时再次输入给出的初始密码即可
[root@mysql-master171 ~]# mysqladmin -uroot -p password '123'
#将从新主库发送来的备份数据传输到mysql里
[root@mysql-master171 ~]#mysql -uroot -p < ~/jeams.sql
#查看库是否更新新主库里面的内容
[root@mysql-master171 ~]# mysql -uroot -p -e 'show databases;'
#登录密码为123即可
[root@mysql-master171 ~]# mysql -uroot -p123

2.7进入新主库创建账户

#登录mysql
[root@mysql-mster172 ~]# mysql -uroot -p123
#创建用户为rep并设置密码rep123,允许任何主机登录
mysql> create user 'rep'@'%' identified  by 'rep123';
#给用户rep权限
mysql> grant  replication slave on *.* to 'rep'@'%';
#查看权限
mysql>  show grants for 'rep'@'%';
+---------------------------------------------+
| Grants for rep@%                            |
+---------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `rep`@`%` |
+---------------------------------------------+

2.8旧主库进行从库的配置

2.8.1查看新主库的状态,即当前日志文件名和二进制日志偏移量

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000008 |      324 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2.8.2之前的旧主库进行新从库的配置

#登录mysql
[root@mysql-master171 ~]# mysql -uroot -p123
#设定从库向主库同步
mysql> CHANGE REPLICATION SOURCE TO-> SOURCE_HOST='192.168.75.172', #主库的ip地址-> SOURCE_USER='rep',            #主库mysql账户-> SOURCE_PASSWORD='rep123',     #主库mysql账户密码-> SOURCE_LOG_FILE='binlog.000008 ',  #主库的文件-> SOURCE_LOG_POS=324,              #主库的位置-> SOURCE_SSL=1; 
Query OK, 0 rows affected, 2 warnings (0.06 sec)mysql> start replica;
Query OK, 0 rows affected (0.01 sec)mysql> show replica status\G

3.测试

3.1在新主库创建库,并在新从库查看

新主库:

mysql> create database haha;
Query OK, 1 row affected (0.01 sec)

新从库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| haha               |
| information_schema |
| mysql              |
| performance_schema |
| relay              |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

3.2在新主库创建表,并在新从库查看

新主库:

mysql> use haha;
Database changed
mysql> create table t1(id int);
Query OK, 0 rows affected (0.06 sec)mysql> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec)

新从库:

mysql> select * from haha.t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

http://www.xdnf.cn/news/19888.html

相关文章:

  • 【Linux基础】Linux系统管理:深入理解Linux运行级别及其应用
  • 面经分享二:Kafka、RabbitMQ 、RocketMQ 这三中消息中间件实现原理、区别与适用场景
  • 笔记:卷积神经网络(CNN)
  • VS2015+QT编译protobuf库
  • 【倒计时2个月】好•真题资源+专业•练习平台=高效备赛2025初中古诗文大会
  • 达人数据导出:小青苔如何让达人数据管理效率飙升?
  • 海康摄像头开发---JSON数据与图片分离
  • 近期刷题总结
  • ChartView的基本介绍与使用
  • 江协科技STM32学习笔记补充之004 基于XC6206P332MR(Torex)的5V到3.3V的电压转换电路分析
  • 2025年中国GEO优化服务机构官方信息汇总与能力概览
  • 《增广贤文》读书笔记(四)
  • 热烈庆祝 | 一二三物联网携这款产品入选2025年度山东省首台(套)技术装备生产企业及产品名单
  • “硬件初始化配置,包括芯片选型、时钟树设计、GPIO/外设参数设置”一般都是哪些需要配置
  • 腾讯云《意愿核身移动 H5》 快速完成身份验证接入
  • 【GitOps】初始Argo CD
  • Unity学习----【进阶】Addressables(一)--概述与简单的使用
  • 小企业环境-流水线管理
  • vue2头部布局示例
  • 基于https+域名的Frp内网穿透教程(Linux+Nginx反向代理)
  • c语言程序之魂——算法(练习题,流程图,程序源码)
  • 2025 年国内外十大顶尖低代码开发平台排行榜
  • 【C++】控制台输入与输出
  • 机器学习实战:逻辑回归算法深度解析与案例应用
  • Win64OpenSSL-3_5_2.exe【安装步骤】
  • ABAP BAPI_CONTRACT_CREATE 报错 06 658
  • 【FastDDS】Layer DDS之Core (详解)
  • pytorch gpu版本安装(最新保姆级安装教程)
  • Masonry
  • 从全栈开发到微服务架构:一位Java工程师的实战经验分享