Community journal

The latest from the MySQL community

Ideas, releases, practical guides, and perspectives from the people building with MySQL.

Follow the feed
Showing entries 21 to 30 of 5674 « Previous | Next »
Searching For: gp update (reset)
Replication Internals: Decoding the MySQL Binary Log - Part 8: Row Events — WRITE_ROWS, UPDATE_ROWS, and DELETE_ROWS

In this eighth post of our series, we decode the three row events — WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, and DELETE_ROWS_EVENT — that carry the actual row data for INSERT, UPDATE, and DELETE operations in row-based replication.

Introduction

In the previous posts, we decoded the events that set the stage for row-based replication: the GTID_LOG_EVENT identifies the transaction, the QUERY_EVENT opens it with BEGIN, and the TABLE_MAP_EVENT describes the table's schema. Now we finally arrive at the events that carry the actual data — the row events.

All three row events share the same base structure defined by the Rows_event class. The differences come down to which row images each event carries: …

[Read more]
Using PHP and Readyset for the First Time with MySQL

Speed up your PHP application without changing a single query.

A few days ago I set out to answer a simple question: how much faster can a PHP app go if you drop a SQL cache in front of MySQL — without touching application code? The answer is below. On a four-table join aggregating revenue by category and region, Readyset served the same result 60x faster than MySQL. And all I did was change a port number.

This post walks through exactly what I did, step by step, so you can reproduce it yourself.

What Is Readyset?

Readyset is a SQL-aware caching engine that speaks the native MySQL wire protocol. Your PHP application connects to it the same way it connects to MySQL — same driver, same queries, same credentials. Underneath, Readyset proxies queries to your upstream database and, for the ones you choose to cache, serves …

[Read more]
MyVector v1.26.3: Maintenance, CI, and Readiness for MySQL 9.7

In my recent series on Scoped Vector Search, we looked at the query patterns that make vector search a first-class citizen in MySQL. While the logic for those searches is now established, the infrastructure supporting them requires constant attention as the MySQL ecosystem moves toward its new release model.

Today, I’m announcing MyVector v1.26.3. This is a foundational release focused on environment compatibility and CI/CD robustness.

What’s in v1.26.3?

This release ensures that MyVector remains stable and buildable across the shifting landscape of MySQL Innovation and LTS releases.

  • MySQL 8.4 & 9.6 Compatibility: We’ve updated the component sources and build logic to align with the headers and …
[Read more]
Where can you find MySQL next? (Updated events list for March–May 2026)

As a follow-up to our previous blog post, “Where can you find MySQL during January to April 2026” (published at the end of January 2026), we would like to share an update. With the dynamic nature of event planning, we have slightly adjusted our plans—both for in-person conferences and for online sessions—so you always have […]

Hardening MySQL: Practical Security Strategies for DBAs

MySQL Security Best Practices: A Practical Guide for Locking Down Your Database Introduction

MySQL runs just about everywhere. I’ve seen it behind small personal projects, internal tools, SaaS platforms, and large enterprise systems handling serious transaction volume. When your database sits at the center of everything, it becomes part of your security perimeter whether you planned it that way or not. And that makes it a target.

Securing MySQL isn’t about flipping one magical setting and calling it done. It’s about layers. Tight access control. Encrypted connections. Clear visibility into what’s happening on the server. And operational discipline that doesn’t drift over time.

In this guide, I’m going to walk through practical MySQL security best practices that you can apply right away. These are the kinds of checks and hardening steps that reduce real risk in real environments, and help build a database …

[Read more]
MySQL + Neo4j for AI Workloads: Why Relational Databases Still Matter

So I figured it was about time I documented how to build persistent memory for AI agents using the databases you already know. Not vector databases - MySQL and Neo4j.

This isn't theoretical. I use this architecture daily, handling AI agent memory across multiple projects. Here's the schema and query patterns that actually work.

The Architecture

AI agents need two types of memory:

  • Structured memory - What happened, when, why (MySQL)
  • Pattern memory - What connects to what (Neo4j)

Vector databases are for similarity search. They're not for tracking workflow state or decision history. For that, you need ACID transactions and proper relationships.

The MySQL Schema

Here's the actual schema for AI agent persistent memory:

-- Architecture decisions the AI made
CREATE TABLE architecture_decisions (
    id INT …
[Read more]
A Guide to Accelerating Your Application with Valkey: Caching Database Queries and Sessions

Modern applications often rely on multiple services to provide fast, reliable, and scalable responses. A common and highly effective architecture involves an application, a persistent database (like MySQL), and a high-speed cache service (like Valkey).

In this guide, we’ll explore how to integrate these components effectively using Python to dramatically improve your application’s performance.

Understanding the 3-Server Architecture

In our example, the setup looks like this:

Application(172.31.68.72)
|
|-- MySQL client --> Percona Server (172.31.67.228)
|
|-- Valkey client --> Valkey Server (172.31.22.118)

The Application: The brain of the system. It decides when to query the database and when to rely on cached data.

Valkey: An in-memory key-value store optimized for extremely fast reads and writes.

MySQL: The …

[Read more]
Rebuilding a Replica with MyDumper

When a replica fails due to corruption or drift, the standard solution is to rebuild it from a fresh copy of the master when pt-table-sync is not an option. Traditionally, when we need to build a new replica, we use a physical backup for speed, but there are some cases where you still need logical backups. For instance, when you migrate to a specific vendor (i.e.: MariaDB to MySQL) or storage engines (in the past MyISAM to InnoDB and nowadays from InnoDB to RocksDB), upgrade to a new database version or move to a cloud based solution. This is where a logical backup shines, offering portability and simplicity, but only if it can be performed quickly. MyDumper emerges as the essential, modern solution, delivering the best of both worlds: the cross-platform, cross-version flexibility of a logical dump combined with the parallel, multi-threaded speed previously reserved for physical methods, making it the clear choice for rapidly rebuilding a consistent …

[Read more]
Scoped Vector Search with the MyVector Plugin for MySQL — Part III

From Concepts to Production: Real-World Patterns, Query Plans, and What’s Next

In Part I, we introduced scoped vector search in MySQL using the MyVector plugin, focusing on how semantic similarity and SQL filtering work together.

In Part II, we explored schema design, embedding strategies, HNSW indexing, hybrid queries, and tuning — and closed with a promise to show real-world usage and execution behavior.

This final part completes the series.

Semantic Search with Explicit Scope

In real systems, semantic search is almost never global. Results must be filtered by tenant, user, or domain before ranking by …

[Read more]
joins... joins... everywhere

 

I have a curse. My curse is curiosity. 

Here in Percona I found one person that is very “dangerous” for me, and he and I also share the same first name, well almost, Marcos Albe. 

Marcos is a smart guy with a lot of ideas, and he is not shy to share them. One day we were talking about sysbench, and he mentioned to me: you know it would be nice to have a test for joins in sysbench. I wonder why we don’t have it; it will be so useful to identify regressions in that area.
You see where this is going right? He put that in my mind, luckily I was busy with other stuff and I forgot. Until one day. That day I had to take a more in-depth look at some claims about joins performance regressions. In that moment Marcos voice comes back as an echo resonating in my mind … it would be useful to identify regressions… 

That’s it. Ok let’s do it, let’s build this joins test and see how …

[Read more]