当前位置:首页 > 数据库 > 正文内容

经过延时从库+binlog仿制,康复误操作数据

邻居的猫1个月前 (12-09)数据库983

经过延时从库+binlog仿制,康复误操作数据

一、介绍环境

数据库版别 实例人物 ip地址 端口
GreatSQL 8.0.32-26 master 192.168.134.199 5725
GreatSQL 8.0.32-26 slave 192.168.134.199 5726

二、主库装备

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p
greatsql> create user 'repl'@'%' identified by '123';
greatsql> grant replication slave on . to 'repl'@'%';

三、装备延时从库

greatsql> CHANGE MASTER TO
    master_host='192.168.134.199',
    master_port=5725,
    master_user='repl',
    master_password='123',
    master_auto_position=1,
    master_delay = 7200;
greatsql> START SLAVE;
greatsql> SHOW SLAVE STATUS\G

file

四、模仿主库误删去数据表

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p sysbench
greatsql> DROP TABLE sbtest2;

五、延时从库康复数据到主库毛病前

1、为了防止康复失利,先备份一下从库。

能够运用Xtrabackup/mysqldump,进行备份从库,这儿演示运用 Xtrabackup 备份从库

$ xtrabackup --defaults-file=/data1/greatsql/greatsql5726/my5726.cnf -S /tmp/greatsql5726.sock --backup --slave-info \
--stream=xbstream --target-dir=/backup/full.xb

2、咱们找到主库误操作在哪个binlog里边,并需求承认误操作的binlog方位信息。

$ /usr/local/greatsql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -vvv ./* | grep -rli 'drop'
$ /usr/local/greatsql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -vvv mysql-bin.000002 |less

file

3、中止sql_thread线程,设置不延时仿制,设置仿制中止在误操作binlog方位点。

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5726.sock -p
greatsql> STOP SLAVE;
greatsql> CHANGE MASTER TO master_delay = 0;
greatsql> START SLAVE io_thread;
greatsql> START SLAVE sql_thread until SQL_BEFORE_GTIDS='2fc5a82c-2ac3-11ee-9f7f-00163e402951:187';
greatsql> SHOW SLAVE STATUS\G

4、等候仿制到需求的中止的方位点,sql_thread现已中止

file

5、查看从库误操作的表,备份出来康复到主库

greatsql> SHOW TABLES FROM sysbench;
greatsql> SELECT COUNT(*) FROM sysbench.sbtest2;
shell> /usr/local/greatsql/bin/mysqldump -S /tmp/mysql5726.sock --set-gtid-purged=OFF --single-transaction --master-data=2 --max-allowed-packet=32M -q sysbench sbtest2 > sbtest2.sql

6、将sbtest2表备份数据康复到主库里

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5725.sock -p -A sysbench
greatsql> SET sql_log_bin = off;
greatsql> source sbtest2.sql;
greatsql> EXIT;

7、从库越过误操作的gtid,从头设置延时从库,从库持续仿制主库

shell> /usr/local/greatsql/bin/mysql -S /tmp/mysql5726.sock -p

greatsql> STOP SLAVE;
greatsql> SET gtid_next='2fc5a82c-2ac3-11ee-9f7f-00163e402951:187';
greatsql> BEGIN;COMMIT;
greatsql> SET gtid_next='automatic';
greatsql> CHANGE MASTER TO master_delay = 7200;
greatsql> START SLAVE;
greatsql> SHOW SLAVE STATUS\G

六、总结防备误操作

怎么防止误删库、删表等误操作,以及怎么进步数据库的安全性。

引荐阅览GreatSQL运维办理手册:数据库防备误操作 https://greatsql.cn/docs/8.0.32-26/6-oper-guide/7-avoid-mistakes.html

1.常见危险误操作

在线上出产环境中的任何操作都要十分慎重,或许由于细小忽略形成无法挽回的巨大损失。

比较常见的线上误操作有几种:

  • 想要删去当时目录下的文件,却不当心履行了 rm -fr /,把整个体系中的一切文件都给强行删了。
  • 误以为是测验环境,想要删去某个数据目标,却把线上出产环境的数据库、表等数据目标给删去了。
  • 误以为是测验环境,想要封闭或重启数据库实例,乃至是封闭或重启主机操作体系。
  • 服务器替换硬盘等热插拔操作,现场工程师搞错信息,把正常的服务器给插拔了。
  • 只想更新或删去部分数据,但由于还没来得及写好WHERE条件,不当心按下了回车键,导致全表被更新或删去。

能够防备的办法有几个:

  1. 总是承认每个数据库是否有牢靠的备份战略,以及备份文件的有效性。
  2. 装备好一个推迟仿制实例,防止在主节点上误操作删去数据后,还能够在从节点上完结快速康复。
  3. 防止层层跳转的服务器衔接办法,每跳转一次,就多了一分误操作的或许性。
  4. 完结操作后当即退出出产事务服务器,削减犯错误的时机。
  5. 经常性承认服务器、数据库和途径标明,并且在每次操作前都要重复承认服务器信息。
  6. 每个服务器主机体系上都要设置仅有的主机名,进步辨识度。
  7. 出产环境和测验环境要物理阻隔开,使之不能相互衔接。
  8. 衔接出产环境运用专门的操作机或必须先拨VPN等,多加一道防护门槛。
  9. 防止一起翻开多个终端或操作窗口,这十分简单导致犯错。
  10. 一切重要操作履行前,都先在文档中写清楚,并逐个查看承认无误。
  11. 每个数据库的账号只颁发必要的权限,防止权限过高而有了更多损坏的时机。
  12. 不要在出产环境履行删去操作,而是改成RENAME操作,先改名,承认无误后再删去,而不是直接删去。
  13. 在数据库中设置 sql_safe_updates=1,尽量防止被全表更新、删去的危险。

如果产生误删数据或许误操作大面积更新数据,能够参阅下面几种办法进行闪回或抢救:

  1. [MySQL数据误删去的总结(opens new window)]:https://mp.weixin.qq.com/s/zMtgC24j7iIJ9xwbNo6AYQ
  2. [MySQL闪回东西binlog2sql(opens new window)]:https://mp.weixin.qq.com/s/hEE12-LeCUsC1zKH48hcag
  3. [my2sql东西之快速入门(opens new window)]:https://mp.weixin.qq.com/s/APgBs7MvJuxJvLwg5i7N_w
  4. [Slave被误写入数据怎么康复到主库(opens new window)]:https://mp.weixin.qq.com/s/yoUNEehE6eOBQ7uFqSR48A
  5. [推迟从库加上MASTER_DELAY,主库宕机后怎么快速康复服务(opens new window)]:https://mp.weixin.qq.com/s/qlAhbJq_ZPB5OXDd_zTQNw
  6. [一个推迟库康复的事例(opens new window)]:https://mp.weixin.qq.com/s/i8cvftodUhkcejswuLSQ3w
  7. [浅谈MySQL闪回的完结(opens new window)]:https://mp.weixin.qq.com/s/ZuXS2UcgGS2p2x3p9mTwQg

2.数据安全保护主张

为了让 GreatSQL 数据库运转更安全,主张遵从以下几点标准:

  • 在使用端,一切用户恳求及输入数据都要做预处理,不能直接提交到数据库,防止被SQL注入。
  • 定时扫描使用端用户恳求日志,扫描反常恳求并及时处理。
  • 使用服务器端布置防火墙,阻断用户不合法恳求。
  • 使用程序上线前,都需求进行必要安全扫描,防止常见SQL注入等危险。
  • 数据库端定时扫描恳求特征,判别是否有契合安全隐患的恳求,及时阻断处理。
  • 数据库端启用审计(AUDIT)、SQL防火墙等组件,及时发现并阻断不合法恳求。
  • 数据库中存储的敏感数据,必须先进行单向加密,防止被破解、信息走漏。
  • 出产环境中的数据,导入开发测验环境前,要先进行转码脱敏操作,防止信息走漏。
  • 做好衔接恳求检测和监控,发现有反常频频恳求时,及时阻断处理。

Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级使用的国内自主开源数据库,具有高性能、高牢靠、高易用性、高安全等多个中心特性,能够作为MySQL或Percona Server的可选替换,用于线上出产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿概况:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码增加GreatSQL社区帮手微信老友,发送验证信息加群

image-20221030163217640

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=529

标签: GreatSQL
分享给朋友:

“经过延时从库+binlog仿制,康复误操作数据” 的相关文章

YashanDB 开机自启

YashanDB 开机自启

布景 在YashanDB数据库环境中设置开机自启,一般指的是装备数据库实例在操作体系发动时主动运转。关于备用数据库(Standby Database),即数据保护模式中的灾备节点,也需求装备成在体系重启后主动发动,以保证数据的高可用性和灾祸恢复能力。 YashanDB装备开机自启 以下是在Linux...

时序数据库排名,性能与功能的较量

时序数据库排名,性能与功能的较量

根据多个来源的信息,以下是时序数据库的排名和性能评测情况: 全球时序数据库排名根据DBEngines的最新排名,以下是2024年4月10日更新的全球时序数据库排名:1. InfluxDB 2013年发布,主要用于存储时间序列数据,适用于物联网、分析和监控软件。2. Prometheus...

mysql数据库文件存放位置,MySQL数据库文件存放位置详解

mysql数据库文件存放位置,MySQL数据库文件存放位置详解

MySQL数据库文件的存放位置取决于你的MySQL安装方式和操作系统。以下是几个常见的存放位置:1. Linux系统: 数据库文件通常存放在 `/var/lib/mysql/` 目录下。 配置文件(如 `my.cnf` 或 `my.ini`)通常存放在 `/etc/mysql/` 目录下...

oracle语法大全,Oracle 语法大全

oracle语法大全,Oracle 语法大全

1. Oracle数据库操作 启动数据库: ```sql SQL˃ startup nomount; SQL˃ alter database mount; SQL˃ alter database open; ``` 关闭数据库: ```sql SQL˃ shutdown immedi...

外卖大数据分析,洞察行业趋势,优化运营策略

外卖大数据分析,洞察行业趋势,优化运营策略

外卖大数据分析是一个涉及多个方面和技术的复杂领域,以下是关于外卖大数据分析的一些关键点: 1. 市场规模与用户规模根据艾瑞咨询的调查数据,截至2019年年底,中国外卖消费者规模约为4.6亿人,占城镇常住人口数量的53.9%。外卖产业的渗透率也在不断提升,2019年达到14.0%,相比2018年提升了...

springboot配置数据库,SpringBoot配置数据库详解

在Spring Boot中配置数据库主要涉及以下几个步骤:1. 添加依赖:首先需要在`pom.xml`文件中添加数据库连接依赖。例如,如果你使用的是MySQL,你需要添加`mysqlconnectorjava`依赖。如果使用的是H2数据库,则不需要添加额外的依赖,因为H2是Java自带的内存数据库。...