1.无损半同步复制:主库先将事务记录写入二进制日志(binlog),并等待从库确认已写入中继日志(relay-log)。确认完成后,主库再将事务写入 InnoDB 存储引擎,最后返回客户端结果。在此过程中,只有在事务完全确认后,其他客户端才能看到该事务结果,确保了数据一致性。2.半同步复制:主库在写入二进制日志后直接将事务提交到存储引擎,并允许其他客户端看到该事务。与此同时,主库等待从库确认已写入
核心区别在于:slave_preserve_commit_order=ON 时: 虽然是并行复制(工作线程1和2同时工作)但提交顺序必须严格按照binlog顺序:11 -> 22 -> 33即使工作线程2先完成了id=2的更新,也必须等待工作线程1完成id=1的更新后才能提交slave_preserve_commit_order=OFF 时: 仍然是并行复制但提交顺序取决于哪个工作线程
一图读懂MySQL即时添加列的工作原理:1.添加列之前: 数据字典中只记录了 id 和 name 两列的定义数据文件中存储着实际的行数据2.使用 ALGORITHM=INSTANT 添加列后: 只更新元数据(数据字典),添加新列的定义和默认值原有数据文件保持不变,无需重建表读取数据时,MySQL会自动为旧行的新列填充默认值新插入的行会包含新列的实际值这就是为什么即时添加列能够这么快的原因:无需移动
这个脚本的功能是统计/data/目录下 MySQL binlog 文件的数量、每个日期生成的总大小(MB),以及每小时的平均大小(MB)执行下面的命令:find . -name "mysql-bin.*" -exec ls -lt --time-style=+%F {} \; | \ awk 'BEGIN { FS=" "; printf "%-12s %-8s %-15s %-1
下面通过一个案例,用通俗易懂的方式来解释这两种复制模式。COMMIT_ORDER(时间戳顺序模式): 想象你在一家餐厅排队点餐:不管你点什么菜,都必须按照取号的顺序来处理比如:张三8点取号、李四8:05取号、王五8:10取号即使张三点了牛肉面、李四点了炒青菜、王五点了饺子(完全不冲突的菜品)厨房也必须按照8点、8:05、8:10的顺序来严格处理这就像一个严格的队列,先来先服务,不管具体点的是什么W
由于Percona官方不提供8.0.39 for Centos7二进制版本下载,特源码编译。链接:https://github.com/hcymysql/ps8039/releases/tag/ps8039-centos7
一段时间后,大多数应用程序可能由于bug而出现重复行,这不仅影响用户体验,还增加了存储需求并降低数据库性能。可以通过一个 SQL 查询来完成整个清理过程,从而有效解决这一问题。使用范例-- 创建表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(
summarize_binlogs - MySQL Binlog分析统计概述命令帮助# /root/summarize_binlogs.sh Error: Binlog file is required. Usage: /root/summarize_binlogs.sh -f <binlog_file> [-s <start_time>] [-e <end_time
从Oracle数据库迁移到MySQL存在一定的技术挑战,主要体现在数据类型、存储过程语法以及系统函数等方面的不兼容性。这种迁移通常需要大量的人力物力投入,包括schema重构、代码重写等工作。然而,将Oracle数据库迁移到MariaDB则是一个出人意料的高效选择。MariaDB提供了一个创新的Oracle兼容模式,只需简单配置即可实现近乎无缝的迁移。具体而言,通过设置SQL模式为Oracle模式
1. 身份证号、手机号、银行卡号 采用 Percona data_masking.so 插件脱敏https://docs.percona.com/percona-server/8.0/data-masking-plugin-functions.html安装脱敏插件mysql> INSTALL PLUGIN data_masking SONAME 'data_masking.so'; mys
介绍MariaDB MaxScale的NoSQL协议模块是一个强大而独特的功能,它允许使用MongoDB协议与MariaDB数据库进行交互。以下是该模块的主要特点:协议转换: 将MongoDB的查询语言和操作转换为SQL语句。使得应用程序可以使用MongoDB的驱动程序与MariaDB/MySQL通信。无缝集成: 允许现有的MongoDB应用程序直接连接到MariaDB/MySQL,无需修改应用程
当达到行版本64次限制时,操作将被拒绝,并给出错误信息,建议使用 COPY 或 INPLACE 算法重建表。4092 (HY000): Maximum row versions reached for table test/t1. No more columns can be added or dropped instantly. Please use COPY/INPLACE.自 MySQL 9
用MySQL自身函数实现 - 随机盐加密,解密,脱敏。-- 创建user表,包含id、手机号加密字段(mobile)、以及用于加密的随机盐字段(salt) CREATE TABLE `user` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `mobile` VARBINARY(255) COMMENT '加密后的手机号',
在 ProxySQL 的默认配置下,当所有从库出现故障时,查询请求不会自动切换到主库,这会导致业务中断。以下是一个示例说明:假设你的架构是一主一从,主库监听在 6666 端口,从库监听在 6667 端口。Admin> SELECT hostgroup_id, hostname, port, status, weight FROM mysql_servers; +--------------+
ProxySQL 是一款专为 MySQL 设计的开源高性能、高可用性的数据库软件。它具备对数据库协议的感知能力,能够优化 MySQL 的性能和可用性。然而,由于 ProxySQL 的管理参数和监控选项繁多,默认的控制台命令行方式可能显得不够直观且不便ProxyWeb 是一款用于管理 ProxySQL 的图形化可视化平台。它旨在简化 ProxySQL 的管理流程,特别是针对繁多的参数配置和监控选项。
pt-slave-repair 工具版本号: 1.0.8,更新日期:2024-08-13 - 支持解析jsonpt-slave-repair 工具介绍MySQL主从复制作为一种常见的数据同步方式,有时候会出现同步错误导致同步中断的情况。手动修复这些同步错误通常需要耗费时间和精力,并且对于不熟悉MySQL复制的人来说比较困难。pt-slave-repair是对原有pt-slave-restart工具
reverse_sql 工具介绍reverse_sql 是一个用于解析和转换 MySQL 二进制日志(binlog)的工具。它可以将二进制日志文件中记录的数据库更改操作(如插入、更新、删除)转换为反向的 SQL 语句,以便进行数据恢复。其运行模式需二进制日志设置为 ROW 格式。reverse_sql工具版本号: 2.1.2,更新日期:2024-08-09 - 增加表字段是json或text类型的
在绝大多数业务场景中,分布式数据库并非必需。事实上,约80%的应用程序都可以在单机环境下高效运行。对于绝大多数企业而言,数据库的数据量通常不会达到 TB 级别。在现代应用开发中,json 已成为数据交换和存储的常见格式。尽管 MongoDB 因其天然支持 json 而备受推崇,但 MySQL 也提供了强大的 json 数据类型支持,能够高效地处理 json 数据。在本指南中,我们将探讨如何使用My
MySQL 从 8.0.16 版本开始支持 CHECK 约束功能。接下来,我通过一个案例来演示这一点。https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html我们创建一个名为 scores 的表,表中的 CHECK 约束确保 score 字段的值不能为 0。如果尝试插入值为 0 的记录,MySQL 将会抛
操作 MySQL 数据库是十分危险的,生产环境,经常会有人因手滑把数据误改或者误删,那么如何避免?我的规则是:delete from,这种SQL禁止执行delete from...where 1=1,这种SQL禁止执行update ... set ...,这种SQL禁止执行update ... set ...where 1=1,这种SQL禁止执行实施访问ProxySQL的6032管理端口mysql
是的,这个世界80%的业务都不需要分布式数据库,单机MySQL加一个读写分离足矣。今天我带你用 ProxySQL 实现 MySQL 的读写分离。功能:将 "select ... for update" 语句和增删改(insert/update/delete)语句发送到主库。将 select 只读查询语句发送到从库。如果从库的复制延迟超过10秒,ProxySQL会将查询路由到其他可用的从库,如果从库
MySQL 主从复制,在最新的9.0版本里,仍旧无法实现过滤binlog event事件,例如主库上执行drop和truncate操作,从库同步复制后,直接过滤掉drop和truncate操作。DBA、运维或者研发一旦手滑误操作,直接P0,毁灭性的伤害。而这个实用价值极高的需求,在TiDB DM里早已经实现。那么,我们需要借助ProxySQL来解决MySQL 主从复制这一缺陷。思想如果主库执行dr
遇到MySQL数据丢失的窘境?想象一下这个场景: MySQL没有备份 MySQL是单点部署 MySQL突然宕机无法启动如何恢复 MySQL 5.7 的数据 - 不用离职的救命方案对于 MySQL 5.7 的数据恢复,我们可以借助 dbsake 和 ibd2sql 这两个强大的工具来完成。这个方法不仅可以恢复表结构,还能恢
遇到MySQL数据丢失的窘境?想象一下这个场景:MySQL没有备份MySQL是单点部署MySQL突然宕机无法启动面对业务数据恢复的压力,是不是感觉天要塌了?别急着递交辞呈!ibd2sql工具可能是您的救命稻草。这是一款能将离线ibd文件转换为SQL语句的神器,可以帮助恢复宝贵的数据。让我们直接看看如何使用:安装wget https://github.com/ddcw/ibd2sql/archive
如果你不想学习除了MySQL家族之外的数据库技术,并且也想轻松拥有分片技术,那你不妨看看MariaDB Spider存储引擎。今天我给你演示一下MariaDB Spider分片技术,它类似一个中间件,你可以把它比作为MyCAT,它可以让你的应用程序一行代码不改,即可轻松实现分库分表。具体的实施步骤,我给你说一下,真的非常简单,有手就可以玩。第一步,配置数据节点,我把命令贴在这里了,你直接复制粘贴即
MySQL 8.0.38/8.4.1/9.0.0 超过1万张表触发BUG,系统直接crash下面是测试用例。shell脚本(批量创建1万张表)1w_bug.sh#!/bin/bash # MySQL connection details MYSQL_HOST="127.0.0.1" MYSQL_PORT="3306" MYSQL_USER="admin" MYSQL_PASSWORD="1234
传统TiDB数据恢复流程TiDB的传统数据恢复过程通常包括两个主要步骤:使用Dumpling工具将MySQL数据导出到本地使用Lightning工具将本地数据导入TiDB这个过程需要熟悉TiDB的操作文档,较为繁琐。Mydumper:简化的数据迁移解决方案Mydumper采用更先进的Stream流式管道技术,能够通过一条命令实现备份和恢复,显著加快了恢复速度。它可以:直接替换TiDB Dumpli
SlowQuery 图形化显示MySQL 慢日志工具https://github.com/hcymysql/slowquery2024年7月4日更新:集成sqlai_helper(支持SQL改写,合并LLM模型接口)思想:把MySQL的慢日志集中到平台里展示,调用sqlai_helper工具分析里面的慢SQL,然后自动给出索引优化建议,并给出SQL改写建议,解放双手,释放人力成本,实现18点下班。
性能分析中的一项常见任务是确定哪些代码段消耗的 CPU 时间最多。这通常需要对堆栈跟踪进行剖析。Flame 图形的出现改变了我们对这些剖析进行可视化的方式。它能直观地显示应用程序中占用 CPU 最多的部分。本文将介绍如何使用 perf 生成这些火焰图。步骤1)安装perfyum install -y perf2) 获取性能数据在我们的示例中,我们将捕获 mysqld 进程 60 秒的性能数据。pe
复制功能作为MySQL/MariaDB实现高可用性的核心,几十年来一直扮演着至关重要的角色。然而,在复制过程中,DBA们经常会遇到一个令人头疼的问题——错误号1236。1236错误号对DBA并不陌生,相信你看到过这段报错信息:mysql > show replica status\GLast_IO_Errno: 13114Last_IO_Error: Got fatal error 1236
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号