-
How to change MySQL account passwords with no downtime
Changing the password of a MySQL account that an application uses was hard before MySQL 8.0. It is easy in MySQL 8.0 and later, thanks to two clauses of ALTER USER: RETAIN CURRENT PASSWORD and DISCARD OLD PASSWORD.
-
How to change MySQL account passwords with no downtime
Changing the password of a MySQL account that an application uses was hard before MySQL 8.0. It is easy in MySQL 8.0 and later, thanks to two clauses of ALTER USER: RETAIN CURRENT PASSWORD and DISCARD OLD PASSWORD.
-
Crafting an Extension Framework for MySQL: a talk from MySQL BR Conf 2026
I opened my MySQL BR Conf 2026 talk creating a new data type that stock MySQL doesn’t have: ROT13. … OK, admittedly, it’s a silly type. With a ROT13 column, you insert plain strings and read back plain strings, but the table stores scrambled text. … OK, it’s very *very* silly. But the point of this example isn’t to convince you extensions are useful; it’s to show a tiny extension that allows exploring design choices we made in designing the VEF (VillageSQL Extension Framework).What the talk coversSimpler functions and aggregates. VDF’s (VEF-Defined Functions) resemble MySQL UDF’s (User-Defined Functions), but are easier to write. I explore how we made it both more ergonomic in C++ and also how we make it harder to mess up.Types that take parameters. Some types take parameters; e.g., vectors need a length. To show how to handle this in our existing silly example, I generalize ROT13 into ROT(K).The escape path. I show how functions that don’t have tidy, compile-time signatures like printf fit into the VEF. I also describe our design pattern for cases like these. In the talk, I link to a blog post on this blog, which I will also now link here in an example of Linkception: “Happy Path, Escape Hatch, and the Space Between”.Porting a PostgreSQL extension. The talk ends with what happened when VillageSQL's Claude Code skill ported PostgreSQL's hstore extension, and what the port cost.About Daniel BentleyDan is a founding engineer at VillageSQL. He has worked at Google and Twitter, and he did a startup called Tilt that focused on Kubernetes developer tools. He is on a quest to make databases delightful to use by translating complex systems into elegant simplicity.Get started at villagesql.com, read the docs, or talk to us on Discord.
-
Kiến Thức Lập Trình Web, PHP, MySQL Cho Người Mới
Kiến Thức Lập Trình Web, PHP, MySQL Cho Người Mới
Kiến thức lập trình web, PHP, MySQL và công cụ phát triển là chủ đề chúng tôi hay được hỏi nhất. Rất nhiều bạn muốn tự học lập trình nhưng không biết bắt đầu từ đâu. Nên học công nghệ gì trước? Dùng công cụ nào để không lạc giữa hàng trăm tài liệu trên mạng? Trong bài này, đội ngũ chúng tôi chia sẻ lộ trình từng áp dụng khi hướng dẫn học viên mới. Lộ trình đi từ những bước sơ khai nhất. Cuối cùng, bạn sẽ tự tay dựng được một website hoàn chỉnh.
Vì sao PHP và MySQL vẫn là lựa chọn tốt để bắt đầu học lập trình web
Vì sao PHP và MySQL vẫn là lựa chọn tốt để bắt đầu học lập trình web
Một trong những lý do khiến chúng tôi luôn khuyên người mới chọn PHP và MySQL là cộng đồng rất lớn. Tài liệu tiếng Việt cho hai công nghệ này cũng rất phong phú. Khi bạn gặp lỗi lúc nửa đêm, gần như chắc chắn đã có người hỏi câu tương tự trước đó. Câu trả lời thường nằm sẵn trên một diễn đàn nào đó, viết dễ hiểu và sát với trình độ người mới.
Bên cạnh đó, rất nhiều dự án thực tế hiện nay vẫn chạy ổn định trên nền PHP kết hợp MySQL. Chúng tôi từng hỗ trợ một khách hàng vận hành website bán phụ tùng xe máy suốt gần mười năm. Toàn bộ hệ thống của họ vẫn dựa trên PHP thuần và MySQL cơ bản. Doanh thu tăng đều mỗi năm, trong khi chi phí bảo trì lại thấp hơn nhiều so với việc đập đi xây lại bằng công nghệ mới. Câu chuyện này cho thấy PHP và MySQL không hề lỗi thời như một số người vẫn nghĩ. Đây là công cụ đã được kiểm chứng qua thời gian, đủ ổn định để doanh nghiệp nhỏ yên tâm phát triển lâu dài.
Lộ trình học lập trình web PHP, MySQL từ con số 0
Lộ trình học lập trình web PHP, MySQL từ con số 0
Làm quen với PHP thuần trước khi học framework
Bước đầu tiên trong lộ trình, bạn cần nắm vững cú pháp PHP cơ bản. Cách khai báo biến, viết vòng lặp, xử lý điều kiện là nền tảng bắt buộc phải vững trước khi đi xa hơn. Sau đó, bạn nên học cách xử lý form nhập liệu và quản lý session để lưu trạng thái đăng nhập người dùng.
Chúng tôi luôn khuyên học viên đừng vội học framework ngay từ đầu. Hãy làm quen với PHP thuần trước. Bạn có thể viết vài trang xử lý form đơn giản như form liên hệ hay form đăng ký thành viên. Việc này giúp bạn hiểu rõ luồng dữ liệu đi từ trình duyệt đến server rồi quay lại như thế nào. Khi đã nắm chắc luồng xử lý này, học framework sau đó sẽ nhanh hơn rất nhiều, vì bạn hiểu framework đang làm gì phía sau thay vì chỉ copy code theo hướng dẫn có sẵn.
Thiết kế cơ sở dữ liệu MySQL ngay từ đầu
Song song với PHP, việc thiết kế cơ sở dữ liệu MySQL cơ bản cũng cần được đầu tư nghiêm túc ngay từ những buổi học đầu tiên. Nhiều bạn mới học thường bỏ qua bước thiết kế bảng hợp lý. Hậu quả là sau này phải sửa đi sửa lại cấu trúc dữ liệu khi dự án đã phát triển lớn hơn, gây mất thời gian và đôi khi làm hỏng dữ liệu cũ.
Nếu bạn muốn hiểu sâu hơn về hệ quản trị cơ sở dữ liệu này trước khi bắt tay thực hành, đội ngũ chúng tôi có một bài viết tổng quan về hệ quản trị cơ sở dữ liệu MySQL khá chi tiết. Bài viết này giúp bạn nắm được bức tranh toàn cảnh trước khi đi vào thiết kế bảng cụ thể. Chúng tôi thường khuyên học viên đọc bài này trước, sau đó mới bắt tay vẽ sơ đồ quan hệ giữa các bảng trên giấy, rồi mới chuyển sang viết câu lệnh tạo bảng thật.
Luyện tập với dữ liệu thật qua một dự án nhỏ
Luyện tập với dữ liệu thật qua một dự án nhỏ
Sau khi nắm cú pháp cơ bản, bạn nên thử tạo một cơ sở dữ liệu nhỏ. Ví dụ như quản lý danh sách sản phẩm hoặc danh sách học viên. Từ đó, hãy viết các câu truy vấn thêm, sửa, xóa và tìm kiếm dữ liệu. Việc lặp lại thao tác này nhiều lần sẽ giúp bạn ghi nhớ cú pháp SQL một cách tự nhiên, thay vì chỉ đọc lý thuyết suông rồi quên ngay sau đó.
Chúng tôi từng hướng dẫn một bạn học viên làm quen với lập trình web bằng cách xây dựng một trang quản lý chi tiêu cá nhân đơn giản. Bạn ấy chỉ mất khoảng ba tuần để hoàn thành phiên bản đầu tiên, dù trước đó gần như chưa biết gì về PHP. Điều khiến chúng tôi bất ngờ là bạn ấy nhớ cú pháp SQL nhanh hơn hẳn những bạn chỉ xem video mà không tự tay gõ lại từng dòng lệnh. Bài học rút ra khá rõ ràng: học lập trình web không thể chỉ xem, phải tự gõ, tự sai, rồi tự sửa mới nhớ lâu được.
Chọn công cụ phát triển phù hợp để tăng tốc quá trình học
Khi đã quen dần với PHP và MySQL, việc lựa chọn công cụ phù hợp sẽ giúp quá trình học nhanh và đỡ vất vả hơn rất nhiều. Một công cụ tốt không thay thế được việc thực hành. Nhưng nó giúp bạn tiết kiệm thời gian ở những khâu lặp đi lặp lại như quản lý bảng, xem dữ liệu hay soạn code.
Với phần cơ sở dữ liệu, chúng tôi khuyên bạn nên tìm hiểu thêm MySQL Workbench là gì và vì sao nên cài đặt để có công cụ trực quan quản lý cơ sở dữ liệu, thay vì chỉ gõ lệnh dòng lệnh khô khan. Giao diện trực quan giúp bạn dễ hình dung cấu trúc bảng và mối quan hệ giữa chúng, đặc biệt hữu ích khi cơ sở dữ liệu có từ năm bảng trở lên.
Với phần viết code PHP, một trình soạn thảo phù hợp cũng quan trọng không kém. Chúng tôi có tổng hợp top công cụ soạn thảo PHP miễn phí tốt nhất mà bạn có thể tham khảo để chọn công cụ hợp với thói quen làm việc của mình. Một số bạn thích giao diện tối giản. Một số khác lại cần nhiều tiện ích hỗ trợ debug. Không có công cụ nào là chuẩn nhất cho tất cả mọi người.
Ngoài hai nhóm công cụ trên, bạn cũng nên chuẩn bị:
Một môi trường local đầy đủ PHP, MySQL và web server để chạy thử ngay trên máy, không cần đưa code lên hosting mỗi lần kiểm tra.
Một file ghi chú riêng để lưu lại lỗi thường gặp, giúp bạn tra cứu nhanh khi gặp lại tình huống tương tự.
Một tài khoản trên diễn đàn lập trình để có nơi hỏi đáp khi bí, vì tự học một mình rất dễ nản nếu không có ai trao đổi.
Việc tham khảo kiến thức lập trình web, PHP, MySQL và công cụ phát triển từ nhiều nguồn khác nhau cũng giúp bạn có cái nhìn đa chiều hơn. Học lệch theo một nguồn tài liệu duy nhất đôi khi khiến bạn hiểu sai bản chất vấn đề, vì mỗi tác giả thường chỉ trình bày theo góc nhìn quen thuộc của họ.
Những nhầm lẫn thường gặp khi tự học PHP và MySQL
Một trong những nhầm lẫn phổ biến nhất mà chúng tôi hay gặp ở học viên mới là lẫn lộn giữa MySQL và MySQL Server. Hai khái niệm này nghe gần giống nhau nhưng thực chất phục vụ mục đích khác nhau trong hệ thống. Để tránh mất thời gian tra cứu lại từ đầu, bạn nên đọc qua bài viết sự khác biệt giữa MySQL và MySQL Server ngay từ giai đoạn đầu học tập, thay vì để đến khi làm dự án thật mới bối rối.
Một nhầm lẫn khác là cố học quá nhiều thứ cùng lúc. Có bạn vừa học PHP thuần, vừa học framework, vừa học thêm JavaScript và một hệ quản trị cơ sở dữ liệu khác, tất cả trong cùng một tháng. Kết quả thường là không thứ nào được nắm chắc, kiến thức bị trộn lẫn và dễ quên. Chúng tôi khuyên bạn nên đi chậm mà chắc, hoàn thành trọn vẹn một chủ đề trước khi chuyển sang chủ đề tiếp theo.
Bước tiếp theo sau khi nắm vững nền tảng PHP và MySQL
Khi bạn đã tự tin viết được vài trang PHP tương tác với MySQL, bước tiếp theo là học cách đưa sản phẩm lên môi trường thật. Nhiều bạn học viên dừng lại ở việc chạy code trên máy cá nhân. Họ chưa từng thử đăng ký hosting, trỏ tên miền hay cấu hình SSL cho website. Đây là những kỹ năng tuy không khó nhưng lại cực kỳ cần thiết nếu bạn muốn làm nghề lập trình web một cách nghiêm túc.
Chúng tôi khuyên bạn nên thử thuê một gói hosting giá rẻ để thực hành đưa dự án nhỏ của mình lên internet. Cảm giác thấy website do chính tay mình viết chạy được trên một địa chỉ thật, ai cũng truy cập được, sẽ tạo động lực rất lớn để bạn tiếp tục học sâu hơn. Trong quá trình này, bạn cũng sẽ học thêm cách sao lưu dữ liệu, cách xử lý khi server gặp sự cố, và cách bảo vệ website khỏi các lỗi bảo mật cơ bản như SQL Injection, vốn là lỗi rất phổ biến ở những bạn mới học PHP.
Kết luận
Kiên trì thực hành quan trọng hơn học lý thuyết dàn trải, đặc biệt với người mới bắt đầu học lập trình web bằng PHP và MySQL. Thay vì cố đọc hết mọi tài liệu trước khi bắt tay viết code, bạn nên vừa học vừa làm. Chấp nhận mắc lỗi rồi tự sửa chính là cách kiến thức được ghi nhớ bền vững nhất, theo những gì chúng tôi quan sát được từ rất nhiều học viên đã đi qua con đường này.
Nếu bạn đang tìm thêm hướng dẫn cụ thể cho từng bước trong lộ trình học lập trình web PHP, MySQL, đội ngũ chúng tôi luôn sẵn sàng đồng hành cùng bạn qua các bài viết chuyên sâu tiếp theo. Chặng đường tự học có thể dài, nhưng chỉ cần kiên nhẫn đi từng bước nhỏ, bạn sẽ sớm tự tay dựng được website hoàn chỉnh của riêng mình.
The post Kiến Thức Lập Trình Web, PHP, MySQL Cho Người Mới appeared first on DBAhire.
-
MySQL MCP Server v1.8.0 is out
On paper it’s a boring release. No new tools, no new flags, nothing to reconfigure. In practice it’s one I’m glad I didn’t skip: it closes 37 known vulnerabilities that the server could actually reach, and I found them more or less by accident.
It started as a compatibility check
I had MySQL 8.4, 9.7 and 26.7 running on my test box, plus MariaDB 12.3. So I pointed the MCP server’s test suite at all of them. Mostly to tick a box before moving on to something more fun.
The code was fine. Every version passed.
MySQL 26.7 and MariaDB 12.3 join the matrix
Every pull request now runs the full integration suite against six servers:
MySQL 8.0, 8.4, 9.7 and 26.7
MariaDB 11.4 and 12.3
26.7 is the first Innovation release under Oracle’s new calendar versioning. If you follow MyVector, you know I’ve been chasing it there too.
MySQL 9.0 is out of CI. It was a short-lived Innovation release, and 9.7 covers that line now.
MySQL 8.0 is staying. Yes, it reached end of life in April. No, I’m not dropping it. Plenty of you are still on 8.0 and haven’t moved to 8.4 yet, and I’d rather keep testing it than pretend otherwise.
One more thing turned up along the way. The Sakila tests weren’t running in CI at all: the sample database was never loaded, so they skipped quietly. They run now, on every version.
Green CI, 37 vulnerabilities
CI was not fine. The vulnerability scan and the linter had been failing quietly for a while. Both were set to informational, so nothing ever turned red.
Once the scan ran again, it found 37 vulnerabilities in code the server actually calls. Most were in the Go 1.24 standard library, the rest in the SSH and MCP SDK dependencies.
v1.8.0 fixes all of them:
Go 1.24 → 1.26
golang.org/x/crypto v0.43.0 → v0.58.0
MCP Go SDK v1.2.0 → v1.8.0
If you use the SSH tunnel: that library jumped 15 minor versions, so I tested it through a bastion before tagging. It still connects, and it still refuses a server whose host key doesn’t match known_hosts.
And since the release, govulncheck blocks merges and releases, so this can’t quietly happen again.
Release candidates stay out of Homebrew
This one’s a bit embarrassing. When I cut v1.7.1, all four release candidates went straight to the Homebrew tap. If you ran brew upgrade that week, you got an RC. Sorry about that.
RCs now only show up on the GitHub releases page. brew upgrade only ever gives you a final release.
v1.8.0 went out the new way. rc.1 first, smoke-tested against real 8.4, 9.7, 26.7 and MariaDB 12.3 servers, then the final tag. Homebrew users never saw the RC.
Things I learned the hard way
Two, mostly.
First, don’t write [skip ci] in a commit message. Not even when you’re describing a different commit that had it. GitHub doesn’t read for context. My PR sat there with no CI run at all while I wondered what was going on. With a required check on main now, that PR would have stayed stuck until I reworded the commit.
Second, the AI code reviewers earned their keep this time. CodeRabbit spotted a startup race in the CI health checks. Codex pointed out that scanning on Linux alone misses Windows-only code. And Copilot noticed that one of my test fixes would have broken the release workflow on the very first tag. I would have found that one at release time, which is the worst time to find anything.
Upgrading
Breaking change: building from source now needs Go 1.26 or later. Homebrew, Docker and the release binaries aren’t affected, and there’s nothing to reconfigure.
Homebrew:
brew update && brew upgrade mysql-mcp-server
Docker:
docker pull ghcr.io/askdba/mysql-mcp-server:1.8.0
Or grab a binary from the v1.8.0 release. Here’s what my Mac said after brew upgrade:
$ mysql-mcp-server --version
mysql-mcp-server 1.8.0
Build time: 2026-10-17T09:14:37Z
Git commit: f946f1d37654b5d8958d45a027a3e68133f01d1a
The full list is in the CHANGELOG. Questions, bugs and ideas are welcome on GitHub.
|