经过延时从库+binlog仿制,康复误操作数据
经过延时从库+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
四、模仿主库误删去数据表
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
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现已中止
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条件,不当心按下了回车键,导致全表被更新或删去。
能够防备的办法有几个:
- 总是承认每个数据库是否有牢靠的备份战略,以及备份文件的有效性。
- 装备好一个推迟仿制实例,防止在主节点上误操作删去数据后,还能够在从节点上完结快速康复。
- 防止层层跳转的服务器衔接办法,每跳转一次,就多了一分误操作的或许性。
- 完结操作后当即退出出产事务服务器,削减犯错误的时机。
- 经常性承认服务器、数据库和途径标明,并且在每次操作前都要重复承认服务器信息。
- 每个服务器主机体系上都要设置仅有的主机名,进步辨识度。
- 出产环境和测验环境要物理阻隔开,使之不能相互衔接。
- 衔接出产环境运用专门的操作机或必须先拨VPN等,多加一道防护门槛。
- 防止一起翻开多个终端或操作窗口,这十分简单导致犯错。
- 一切重要操作履行前,都先在文档中写清楚,并逐个查看承认无误。
- 每个数据库的账号只颁发必要的权限,防止权限过高而有了更多损坏的时机。
- 不要在出产环境履行删去操作,而是改成RENAME操作,先改名,承认无误后再删去,而不是直接删去。
- 在数据库中设置
sql_safe_updates=1
,尽量防止被全表更新、删去的危险。
如果产生误删数据或许误操作大面积更新数据,能够参阅下面几种办法进行闪回或抢救:
- [MySQL数据误删去的总结(opens new window)]:https://mp.weixin.qq.com/s/zMtgC24j7iIJ9xwbNo6AYQ
- [MySQL闪回东西binlog2sql(opens new window)]:https://mp.weixin.qq.com/s/hEE12-LeCUsC1zKH48hcag
- [my2sql东西之快速入门(opens new window)]:https://mp.weixin.qq.com/s/APgBs7MvJuxJvLwg5i7N_w
- [Slave被误写入数据怎么康复到主库(opens new window)]:https://mp.weixin.qq.com/s/yoUNEehE6eOBQ7uFqSR48A
- [推迟从库加上MASTER_DELAY,主库宕机后怎么快速康复服务(opens new window)]:https://mp.weixin.qq.com/s/qlAhbJq_ZPB5OXDd_zTQNw
- [一个推迟库康复的事例(opens new window)]:https://mp.weixin.qq.com/s/i8cvftodUhkcejswuLSQ3w
- [浅谈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
技术交流群:
微信:扫码增加GreatSQL社区帮手
微信老友,发送验证信息加群
。