MySQL主从复制无法过滤binlogevent的缺陷,ProxyS...

指尖上的架构 2024-09-24 02:24:04

作者介绍

贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。

MySQL主从复制,在最新的9.0版本里,仍旧无法实现过滤binlog event事件,例如主库上执行drop和truncate操作,从库同步复制后,直接过滤掉drop和truncate操作。

DBA、运维或者研发一旦手滑误操作,直接P0,将是毁灭性的伤害。那么,我们就需要借助ProxySQL来解决MySQL主从复制这一缺陷。

一、思路

如果主库执行drop和truncate,临时关闭binlog,在命令前面增加set sql_log_bin=0,这样主库执行完以后,binlog不会记录,从库也就不会执行。

二、实施

1、安装ProxySQL

# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo[proxysql_repo]name=ProxySQL repositorybaseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.6.x/centos/\$releasevergpgcheck=1gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.6.x/repo_pub_keyEOF# yum install proxysql -y# systemctl start proxysql

2、配置ProxySQL规则

## 连接到ProxySQL管理界面# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '-- 配置MySQL服务器 - 写主节点VIP地址INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'127.0.0.1',6666);-- 配置用户INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('rd','123456',1);-- 设置查询规则来重写DROP和TRUNCATE语句INSERT INTO mysql_query_rules (rule_id, active, match_pattern, replace_pattern, destination_hostgroup, apply)VALUES (1, 1, '^DROP (.*)$', 'SET sql_log_bin=0; DROP \1; SET sql_log_bin=1;', 1, 1);INSERT INTO mysql_query_rules (rule_id, active, match_pattern, replace_pattern, destination_hostgroup, apply)VALUES (2, 1, '^TRUNCATE (.*)$', 'SET sql_log_bin=0; TRUNCATE \1; SET sql_log_bin=1;', 1, 1);-- 加载配置到运行时环境LOAD MYSQL SERVERS TO RUNTIME;LOAD MYSQL USERS TO RUNTIME;LOAD MYSQL QUERY RULES TO RUNTIME;-- 保存配置SAVE MYSQL SERVERS TO DISK;SAVE MYSQL USERS TO DISK;SAVE MYSQL QUERY RULES TO DISK;

3、这个配置的工作原理如下

我们定义了一个主服务器组:主库(hostgroup 1)我们创建了一个DBA、运维、Java研发使用的用户名 rd,默认连接到主库。我们设置了两个查询规则:规则1和2:匹配DROP和TRUNCATE语句,在它们前面添加SET sql_log_bin=0,这可以确保只有特定的DROP或TRUNCATE操作不被记录到binlog,且在执行完后再开启binlog。

例如,如果原始查询是DROP TABLE t6; 重写后的查询将变为:

SET sql_log_bin=0; DROP TABLE t6; SET sql_log_bin=1;

4、使用这种方法的优势

它只影响DROP和TRUNCATE操作,其他操作不受影响。它自动在这些操作前禁用binlog记录,操作后重新启用,无需手动干预。这些更改对应用程序是透明的,不需要修改应用代码。

三、使用

DBA、运维或者Java研发直接访问ProxySQL的6033端口:

# mysql -u rd -p123456 -h 127.0.0.1 -P6033

当执行drop和truncate操作时,只会在主库上执行,从库上不会执行,从而实现了过滤binlog event事件。

注:rd用户需要在后端MySQL主库上创建。

不再开源后,Docker又突然宣布:涨价80%

2024-09-18 14:21·dbaplus社群

从11月15日起,Docker的付费订阅中Pro和Team的价格都将大幅上调:Pro从原来的5美元每月激增到9美元每月,直接涨了80%;而Team也从之前的9美元每月来到15美元每月,涨价66.7%。只有Business保持此前的24美元每月不变。

同时,免费Docker Personal订阅将不再包括Build Cloud分钟数,从支持三个Scout仓库转为一个,并且将限制为一个私人Docker Hub容器注册表仓库,存储空间为2 GB。

不过,Docker也在云计算和安全产品方面进行了进行了调整,以让调价显得更合理、更具吸引力一些。

尽管如此,X上知名的技术博主Jeff Geerling发帖称,“GitHub 或 GitLab 用于镜像构建/版本库,Podman Desktop 用于开发环境。我仍然最喜欢 Docker 的整体集成,但在这一点上(考虑到成本的提高),我愿意转换。”

具体的涨价方案究竟如何,会有大批开发者选择抛弃Docker吗?

一、Docker Pro提价 80% ,但加价不加量

从新的定价表可以看到,Docker Pro 每个用户每月增加 4 美元/月,涨幅达 80%。

上图:2024年11月价格 年度付费

同时,会员的开放权益也发生了改变。对比下图当前的权益来看,Docker Pro 用户Build Cloud 的分钟数增加了一倍,从之前的100分钟一月增长至200。

不过,使用 Scout 分析的 repos 却减少了三分之一。

在当前的定价页面,写着每天能提取 5000 张图片,按每月30天计算,至少有150,000 次提取总额。然而,新计划却只有每月 25000 次拉取总额,偷偷减少了 83%,真正的加价不加量。

上图:2024年9月价格 年度付费

同时,年度会员也变得不吸引人了。Docker Pro 计划保持每年 24 美元的折扣不变,现在是 132 美元优惠 24 美元。而Docker Team 按年付费比按月付费只优惠 12 美元。

上图:2024年11月价格 月度付费

二、Docker官方:只有3%的最大商业用户受影响

Docker首席产品官Giri Sreenivas在公司博客中写道:“为了确保Docker Hub保持可持续发展并继续作为世界上最大的容器注册表增长,我们引入了基于使用量的镜像拉取和存储定价。”他补充道:“此次更新还包括了增强的使用监控工具,使客户更容易理解和管理使用情况。”

Sreenivas估计,只有3%的最大商业用户会受到新定价的影响。个人账户将从每小时33次Docker Hub镜像拉取增加到40次。Pro将包括每月25,000次Docker Hub拉取,Team为100,000次,Business为100万次。博客文章和网站都没有说明Docker Hub上容器镜像存储的定价。

Sreenivas写道:“对于许多拥有服务账户的Docker Team和Docker Business客户来说,新的更高镜像拉取限制将消除之前产生的费用。”

三、分析师判断:Docker定价变化影响不大

Forrester Research的分析师Devin Dickerson表示:“客户在面对今年其他价格变化的新闻时表现得出乎意料的淡定。”他补充道:“考虑到这一点,以及看起来受负面影响的客户群体相对较小,我还没有看到对这一消息的强烈反应。”

一位分析师表示,Docker Hub的定价变化似乎针对那些之前可能滥用系统的账户。

“从我的角度来看,Docker Hub上的限制是为了保护自己,防止少数极端用户将Docker Hub用作其CDN或以其他方式生成每月数百万次拉取,”TechTarget Enterprise Strategy Group的分析师Torsten Volk表示。

Volk和其他分析师表示,Pro和Team定价计划中新功能的加入可能会减轻价格上涨的影响。

“我主要对Testcontainer Cloud和Build Cloud现在成为套餐的一部分感到兴奋,这使得开发者可以根据需求在本地或云中创建环境,”Volk说。“我一直是Testcontainers的忠实粉丝,将它们纳入‘套餐’中是我完全支持的。”

总体来说,“只要用户至少利用了新包含的一些功能,比如Scout、Testcontainers或Build Cloud,价值主张就很强,”他说。

RobustCloud的分析师Larry Carvalho表示,Team和Pro订阅的67%和80%的涨幅“在纸面上看似很大”。

“然而,根据Docker带来的开发者生产力的提升,这一涨幅几乎不成问题,”他说。

Carvalho引用CareerExplorer的数据表示,美国计算机科学毕业生的年薪中位数为83,812美元。

“这一Docker定价上涨不到收入的千分之一,因此几乎不会影响决策过程”。

四、写在最后:不会像21年的调价那样“引战”

就像分析师说得那样,Reddit上大部分参与讨论的网友还算淡定。

Docker 是免费的,而 DOCKER DESKTOP 需要付费订阅,它们是两个不同的产品。考虑到我们是在 "Docker 社区 "中写作,大家应该都知道这种区别。

文章所涉及的产品列表,引用文章本身:" Docker Desktop、Docker Hub、Docker Build Cloud、Docker Scout 和 Testcontainers Cloud。"

跟帖网友:“对啊,我现在花费是0,你提价两倍我还是花费0”。

“Docker Personal 仍然是免费的,而且将永远是免费的。引用公告中的一段话。不知道你用专业版干啥。”

虽然有网友提出,Mac上必须得订阅 Docker Desktop,“请告诉我如何在没有 Docker Desktop 的情况下在 Mac 上运行 Docker。我几年前改用 Podman,至今未曾回头。”

但他的言论很快被反驳(还被点了四个反对):“Docker 引擎不需要图形用户界面。你可以很轻松地通过 cli 进行协调和管理”。

毕竟,这次涨价宣布后,给大家留有3个月的时间进行过渡。

要知道,当Docker在2021年宣布了其Docker Desktop的付费订阅计划时,不止定价大幅提升,而且仅仅给了所有人3周时间,让那些习惯于免费使用Docker Desktop的中小用户不知所措。

相对于那一次网友们的激情开麦来说,此次Docker涨价所带来的反响可能是相对温和的。

>>>>

参考资料

https://www.servethehome.com/docker-raises-prices-up-to-80-percent-and-more/https://www.techtarget.com/searchsoftwarequality/news/366610229/Docker-pricing-changes-hike-midtier-costshttps://www.reddit.com/r/docker/comments/1ffjbcp/new_docker_plan_simpler_more_value_and_pretty/

编辑丨伊风

来源丨公众号:51CTO技术栈(ID:blog51cto)

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

活动推荐

为了和大家一起探索AI相关技术在大数据、数据资产管理、数据库、运维等领域的最佳落地方式,挖掘由此激发的软件发展和技术进步,第九届DAMS中国数据智能管理峰会将于2024年11月29日在上海举办,携手一众产学研界技术领跑单位,带来新思路、重实践、可落地的全日干货盛宴。

活动详情:

0 阅读:0

指尖上的架构

简介:感谢大家的关注