Laravel News Links
MySQL development as it happens
https://blogs.oracle.com/mysql/wp-content/uploads/sites/102/2026/08/MySQLDev_HI.png
Henrik Ingo
MySQL Community Architect
In May we hosted the first MySQL Contributor Summit 2026. We arrange such Summits every quarter, and it’s a forum where contributors come together and make proposals, and then discuss them, on what they wish to work on, or see someone else work on, in future MySQL versions.
All of the presentations are now published as well, so you can follow the discussion even if you weren’t at the summit yourself.
Proposed features were categorized into 4 work streams, and you can now find each of them on the MySQL Community Roadmap project board on GitHub.
Why is this important?
Nurturing an active contributor community is an important factor in the success of the MySQL open-source project. There are many ways and reasons you can contribute to MySQL:
- To avoid having to maintain a patch, which fixes some problem you had with MySQL
- To increase your career market value and professional development
- To get feedback and users for your ideas and projects, as MySQL is the most wide-spread open source database
Regardless of your reasons, MySQL thrives off of your contributions. With your contributions:
- Bugs get fixed faster and more efficiently,
- Users can gain custom features that were requested by users, but that would never have been developed if the only option was to wait for the MySQL engineering team at Oracle to do it,
- MySQL can be a platform that helps you and your ideas reach and collaborate directly with a much larger user community
- Can grow a larger base of developers, who over time grow into senior MySQL or database developers
Where can you participate?
To follow what’s happening , or better yet, if you want to participate in the planning and development of the next version of MySQL , the best place to start is MySQL Community GitHub Discussions . These GitHub discussion threads are the central point for discussions related to actually writing code that goes into MySQL Server. But the discussion is not just about code, rather also including technical topics, proposals, roadmap feedback, and contribution process related questions.
The MySQL Community Slack is a popular space for general community discussions and engagement. In other words, this is a good place for general discussions related to using MySQL as your database.
Depending on your intended level of involvement, you should also sign up for a centralized Oracle user account, which gives you access to the discussion forums, the MySQL bug database, and other MySQL services. We keep maintaining the good old bugs database, and it will remain relevant but we will use GitHub issues for new development of features.
And last but not least, more static information is found on the MySQL Community project’s Wiki. Here you can find the new MySQL Governance Model, the Developer Guide, The developer guide takes you through the whole process of submitting a Feature Request or Proposal, and all the way to a Pull Request.
Early Access releases and Monthly Code Drops
As reported on June 25, we now have a documented governance process, that is based on the assumption that there will be contributors, committers and project leads from various employers, and hopefully also some participating as their individual self.
We have made two Early Access releases, 9.7.0 Early Access and 26.7.0 Early Access. Work is already underway to match those releases with a monthly code drop. This is of course essential for anyone who wants to work on some code contribution, to have a relatively recent snapshot of the MySQL source. A lot of work is also going into setting up all the workflow automation into the mysql-server github repository.
Only when all of that is done, and operating somewhat smoothly, is it time for the open development of the MySQL development work to happen working live in the public mysql-server repo. This is scheduled to happen later this year in Phase 3 of the Community Engagement Plan. But for now we are already in good shape to receive pull requests from the MySQL community as part of Phase 2!
From talks to action!
So what is actually happening on the development frontier, now that we know where to look? Let me give you a quick summary of where each of those work streams are, at this moment in time.
But first…MySQL 26.7. is out, and we are excited to report that the first improvement arising out of the May Contributor Summit, (Bug #119222 ) is already merged and will be part of the 26.7. release. The patch is a performance improvement for how MySQL returns data back to mysqlsh after a mysqlsh util.dumpInstance() call. In case of composite primary keys, it now uses all the primary key columns to break the result set into a smoother, more evenly distributed sequence of chunks.
The authors of this first patch to make it into a release, are Sveta Smirnova and Kamil Holubicki from Percona!
Percona – as most readers will know – have over the years already contributed many bug fixes and features to MySQL Server. So it is perhaps no surprise that they were quick to do one also in this new era of community contributions!
Thank you Percona! And we hope to see many more contributions, small and large, as we continue to develop new versions of MySQL, together and in the open.
AI and Cloud
Most of the focus here is on bringing full featured vector indexes, distance functions and search, to MySQL. There were several alternatives on the table in the past months, that have been discussed back and forth. So far there seems to be consensus on the direction that this should be implemented natively, as a builtin index type that is a first class citizen both as far as extending the SQL syntax and parser, and the query optimizer are concerned.
The design phase is still ongoing, and the team is looking into different vector index structures and algorithms in the field. In addition the the widely used HNSW (Hierarchical Navigable Small World) algorithm, there’s considerable interest in an algorithm developed at Google and known as ScaNN (Scalable Nearest Neighbor). Following the syntax design discussion, it also is looking increasingly likely that the team is thinking of supporting multiple different index types.
Notably there also exists a project by Alkin Teyzusal called MyVector, that is implemented as a MySQL Plugin and User Defined Function. We’ll take a closer look at both of these vector indexing algorithms and implementations in the next blog post.
With vector support clearly leading the way as a high priority work item, there’s also a second projectin this category: Official MCP Server for MySQL.
This will allow various LLM based assistants and coding agents to access and explore MySQL in a standard way. The first version will be “read-only” in the sense that it is focused on exposing metrics for observability and on the other hand allowing the AI agents to discover the schema and query the data.
Performance and Observability
Performance improvements remain a constant topic of interest in the MySQL user community. As we have met with many of you both individually and at events like the contributor summit, often the leading topic are various performance improvements.
Currently in the GitHub backlog there are a range of sub-components of the MySQL Server, ranging from InnoDB B+Tree performance to Replication, where contributors proposed performance improvements. But hhere are a couple of interesting themes I thought are worth highlighting:
As a former sales engineer it warms my heart to see proposal from AWS separate performance improvements into “real issues”, that actually happen and cause problems in production, and “perceived problems”, that aren’t really a big problem in production, but cause the database to perform poorly in benchmarks. (In this case, HammerDB.) So with that introduction, you might be thinking the proposal wanted us to focus on the issues that make production slower. But no, the whole point was that users evaluate databases with benchmarks, or at the very least they read about others who did run a benchmark. And this makes the “perceived” problem a very real problem, because it may cause the user to choose some other database, and then they won’t run MySQL in production at all!
And what is it that promises not just 2x or even 4x improvement in HammerDB results just like that: the RETURNING Clause. More specifically this is an extension to DELETE and UPDATE. If you add the RETURNING clause to a DML command, then you will be able select the column who’s values are returned to the caller. In practice this means you avoid doing a separate SELECT, since you can get the result within the single UPDATE or DELETE statement. Single roundtrip instead of many!
In #24 InnoDB-based binary log Vinicius Grippa from ReadySet, presented a proposal to move the entire binary log inside of InnoDB. The main point of this move would be that for the typical MySQL transaction, both the tables and the binlog are now inside and managed by InnoDB, without the need for coordinating an XA-transaction between 2 separate subsystems. And in particular, removing the need for each of those subsystems doing their own fsync to disk. This ticket is one of the most active ones, with engineers from Oracle, Google and Alibaba discussing different approaches.
The Hypergraph optimizer continues to receive a lot of attention. On the one hand there are improvements to the explain output and other observability improvements. Ultimately the goal is to make this optimizer strictly faster than the old MySQL optimizer for every conceivable use case.
Issue #34 describes a service that should monitor also system events, such as disk or memory utilization. At first sight this appears to be an unnecessary feature, since there are already plenty of tools available that know how to monitor the Operating System. But it turns out that a) when you are diagnosing a database, in production, the server may not have the tools installed that you are used to working with, nor is it possible to easily install them either, and b) it’s just really convenient to have system level performance metrics available through the same channel where you get your database performance metrics from too. A single source for all your dashboards and performance comparisons.
Developer and DBA Experience
MySQL Workbench work falls under the Developer and DBA Experience bucket and issue #10 covers various updates needed to this popular GUI tool.
Issue #12 captures a long standing topic that was also brought up at the Contributor Summit: In MySQL the keyword BOOL and BOOLEAN are really just aliases for TINYINT(1). It also proposes to add ARRAY and UUID as native data types.
There’s a built-in tension in that discussion, since generally we encourage new datatypes to be developed as components! But for very primitive types like booleans and arrays, there’s still an argument they should be always available and therefore in the native set.
A very interesting feature in this category is the proposal to add System versioned tables to MySQL. This means the capability to define snapshots in time of a table, and makes it possible to query past snapshots of the table. The proposal is to implement this as defined in the SQL:2011 standard.
Extensibility and tooling
A well designed modular architecture is important for any software project, but doubly so for popular open source projects. The MySQL Component framework is what allows contributors to create new data types, functions, and of course even entire storage engines, in a relatively independent fashion. To ensure that we can scale MySQL as an open source project, we will have to continue to evolve the MySQL Component Framework.
MySQL was always modular
Over its 30 year history, MySQL has introduced several frameworks that allow new functionality to be developed in a modular way. Most famously of course MySQL gave us the concept of pluggable storage engines, which has allowed developers of different database engines to benefit from MySQL providing the standard SQL user interface and functionality, and MySQL and MySQL users in turn benefited from having a rich collection of database engines packaged into a familiar user experience, yet allowing them to choose the best tool for each job.
Another extension framework that’s been around for a long time is the API for adding User Defined Functions. UDFs allow users, or open source contributors, to extend the set of functions – both scalar and aggregate functions – from the default / built in set.
MySQL 5.1 introduced the Plugin API, which made it possible to distribute and install features separately from the MySQL Server itself.
MySQL Component Framework
And finally from MySQL 8.0 onwards we have introduced the MySQL Component Framework, and since then every major version has added APIs to various aspects of MySQL Server functionality, that can be extended with components. For example various methods for password validation, or logging and auditing, have been implemented as components.
The main improvement that components bring to the table: a well defined and enforced API. While for example the storage engine API is well defined in the sense that a storage engine needs to implement and provide certain things, it’s nevertheless the case that a storage engine plugin or a UDF plugin are loaded and live in the same address space as the rest of mysql-server. In principle there’s nothing stopping a plugin from calling any function and accessing any data it wants to.
Components on the other hand do operate against an API, and these client components can only use the methods made available through that API. Of course, there are a couple hundred different such APIs – called services – so a component could call many of those APIs to do what it needs to do.
Doubling down on the MySQL Component Framework
Following the contributor summit, the focus has been on doubling down on the MySQL Component Framework as the mechanism to write extensions to the core MySQL server. There are still areas of the MySQL Server that aren’t yet available through MCF APIs. A big one is the query optimizer (#22).
But what contributors have focused their efforts on so far is a feature that at the same time is much more basic and fundamental, and on the other hand is actually quite sweeping: User Defined Types (#674). The goal here is not just to allow end users to define new custom types for their use cases, but the goal is to make this API so complete and useful, that also built in (aka “native”) types could be implemented as components, without loss of functionality.
For example the Vector data type has been mentioned as an example: The work to add Vector support is implementing it as a native or built in type, because it is such an important and widely requested feature. But this should not be a choice we need to make. In the future, there should not be any downsides to adding a type via the Component Framework.
A vision for MySQL extensibility
While current work is mostly focused on extending the “surface area” of MySQL Component Framework, we are also aware that this is nowhere near the full scope of what we need to build in the coming years.
The ultimate power of the Component Framework is not just its use as a healthy way to practice good, modular, software architecture. The real goal is to unleash a mode of contributing to MySQL Server in a way where a majority of new code and features needn’t be contributed to the core MySQL server at all. In the future, a typical MySQL “contribution”:
- Should be possible to create and develop independently, without needing to coordinate or get “permission” with anyone employed at Oracle
- (In fact…) Should be possible and quite okay for two contributors to both implement the same feature, in slightly different ways, and let the users decide which one they want to use
- Should be possible for such extensions to clearly declare which component APIs they need to use, which they implement, and which versions they are compatible with
- And probably we need to have a way for one component to express the fact that it needs another component to be present. (dependencies)
- Finally, it should be possible for the independent 3rd party developer to publish their extension to MySQL functionality, and for end users to discover and install the extension, pretty much just as easily as they had installed core MySQL itself.
A great example of a project that is showing us the way is MyVector, by Alkin Tezuysal. Alkin presented a talk on his experience implementing HNSW based vector indexing in MySQL, using the MySQL Component Framework.
Utilities are extensions too
But the above is not yet all: MySQL Server can also be extended by software that is completely separate from the MySQL Server. A great example are the different *SQL Proxy products that have provided us with so many powerful features from thread pooling to encryption.
Tools used for observability, schema design, querying, reporting, dashboards… Various shells and clients… All of these are arguably “components” that extend and add value in the MySQL Ecossystem.
And Storage Engines!
While most of the development focus in the extensibility track is on extending the MySQL Component Framework, we shouldn’t forget that MySQL already has the tried and trusted framework that gave us so much cool database innovation over many decades already, The Storage Engine API.
Our efforts to open up MySQL development to community contributions would not be complete without someone proposing to add a new storage engine. And we couldn’t be more excited about the fact that in the past weeks we’ve added not just one, but two, rather powerful and very state of the art engines to our roadmap dashboard: DuckDB (proposed by Alibaba), the database that has been taking the analytics / OLAP market by storm, and TidesDB, a new and very state of the art LSM engine. LSM architecture is typically used for write-optimized, MVCC type OLTP workloads.
Both of these are scheduled to present at the next Contributor Summit.
Upcoming Contributor Summits
If you’ve read this far, and if you are anywhere near as excited as yours truly… You might be asking the question: When and where are these contributor summits happening and where can you buy tickets?
The answer is that these are by invitation request; if you would like to attend, reach out to the Community Team. These events are by and for developers who already are working on new MySQL features, or have made a proposal that they will be presenting and getting feedback on.
The next summit is just around the corner:
- August 5-6 in Colorado and virtually.
- November will be a 100% virtual summit
- February will be in Europe and adjacent to Fosdem and MySQL Belgium Days
- And after that likely in May at a location still to be determined
If you are working on or intend to propose some contribution to MySQL, and you would like to present in the contributor summit, or attend a summit, you can email HENRIK.INGO@ORACLE.COM or LENKA.KASPAROVA@ORACLE.COM.
Get Involved
And if you just want to roll your sleeves and start submitting issues and PRs… Sure, you can do that, there’s no hard requirement to present slides first. You can create a proposal in the mysql/mysql-community repo, and when you are ready to submit your first Pull Request, you’d typically do that against trunk in the mysql/mysql-server repo.
And as a reminder, to try to keep some focus while we open up the development, we’ve chosen four strategic roadmap categories. As you submit your proposals, try to think of which of these your contribution most closely fits into:
In the following blog posts I want to dive deeper into each of these four work streams, and give a bit more context around the rather technical discussions you will see if you start following the discussions in each ticket. Stay tuned for the next episode in MySQL development as it happens.
Henrik Ingo
MySQL Community Architect
Henrik started his career in open source databases working at MySQL AB, shortly after graduating from college. Now, two decades and seven other database startups later, he is back to where he started, on the Oracle MySQL team. Prior to Oracle, he worked at DataStax where he led the project of porting DataStax Enterprise features back into the open source Apache Cassandra project, and at MongoDB, where he introduced the use of change point detection to automate discovery of performance regressions. Henrik is the author of the book “Open Life: The Philosophy of Open Source”, and its namesake blog.
Planet for the MySQL Community
MySQL Backup Best Practices: A Complete Guide for DBAs in 2026
https://webyog.com/wp-content/uploads/2026/08/Backup-best-practices.png
Most teams believe they have a solid backup strategy. In practice, many have a backup process they set up once, have not tested recently, and would discover is broken only when they actually needed it most.
This guide covers how to build a MySQL backup strategy that works reliably — not just in theory, but when it counts.
The One Rule That Matters Most
An untested backup is not a backup. It is a file you hope works.
Before anything else, commit to testing your restore process at least once a month. Everything in this guide supports that goal.

Your Three Backup Options

Logical backup (mysqldump) exports your database as SQL statements. It is portable, straightforward, and easy to restore individual tables or databases from. Use –single transaction with InnoDB tables to avoid locking:
mysqldump –single-transaction mydb > mydb_backup.sql
Physical backup copies the raw database files. Faster for large databases, but must be restored to the same MySQL version and platform. Minimal locking, supports incremental backups.
Binary log backup records every change to the database continuously. Combined with a full backup, binary logs let you restore to any point in time — not just the last full backup snapshot.
Designing Your Strategy
Three questions define your backup strategy:

RPO and RTO Explained

Know both numbers before an incident, not during one. If restoring a full backup takes 6 hours and your RTO is 2 hours, you have a problem to solve before it becomes an emergency.

Automate Your Backups
Manual backups fail when people are sick, busy, or on vacation. Automation removes the dependency on memory.
Linux Automation
A basic automated backup script using cron and mysqldump:
#!/bin/bash
DATE=$(date +%F)
mysqldump –single-transaction –all-databases \
| gzip > /backups/mysql/backup_$DATE.sql.gz
if [ $? -ne 0 ]; then
echo “Backup failed on $(hostname)” \
| mail -s “ALERT: MySQL Backup Failed” [email protected]
fi
Scheduled via cron to run nightly at 2 AM:
0 2 * * * /usr/local/bin/mysql_backup.sh
Windows Automation with SQLyog
On Windows, SQLyog provides built-in backup scheduling with no scripting required. Configure the databases, output location, and schedule through the GUI. SQLyog handles execution and can send email notifications on completion or failure.
Compress and Protect Backups
Compress every backup before storing it. SQL dumps compress extremely well — typically 70–90% size reduction. Pipe mysqldump output through gzip:
mysqldump mydb | gzip > mydb_backup.sql.gz
For backups stored offsite or in cloud storage, encrypt them. A backup file containing sensitive data is a liability if storage access is ever misconfigured.
The Backup Checklist

Monitor Backup Health
Automated backups still need oversight. Common failure modes to watch for:

MONyog can alert you when disk space on monitored servers approaches a critical threshold — catching the “disk full” failure mode before your next backup runs.
Want to automate MySQL backups without writing scripts? Try SQLyog free and set up your first scheduled backup in minutes.
Frequently Asked Questions
Depends on your RPO — how much data loss is acceptable in a worst case. Nightly full backups with binary log shipping in between gives you both a daily recovery point and the ability to restore to any specific moment. For lower-stakes databases, weekly full backups may suffice.
RPO (Recovery Point Objective) defines how much data you can afford to lose — it drives backup frequency. RTO (Recovery Time Objective) defines how quickly you must restore — it drives how you set up your restore process and whether you need standby infrastructure.
Yes, if you use –single-transaction with InnoDB tables. This creates a consistent snapshot without locking tables during the backup. Avoid lock-based options in production — they block writes for the duration of the dump.
The only way to know for certain is to restore it. File size monitoring catches obvious failures, but a file that looks correct can still be corrupt. Schedule regular restore tests to a staging instance.
At minimum, 7 days of daily backups. For regulated industries, compliance may require 30, 90, or 365 days. Compressed MySQL backups are inexpensive to store in cloud object storage, so err on the side of longer retention.
Never only on the same server as the database — disk failure, ransomware, or an accidental deletion can destroy both simultaneously. Use a separate server or cloud storage (AWS S3, Azure Blob Storage, Google Cloud Storage). Follow the 3-2-1 rule.
Yes. SQLyog’s backup scheduler lets you select individual databases or all databases on the server, schedule the job at your preferred time, and send notifications on completion or failure — all from a single interface.
No. Replication copies changes from your source to replicas in near real time — including accidental DELETE statements or schema changes that break your application. Replication protects against hardware failure. Backups protect against human error and logical data corruption. You need both.
Planet for the MySQL Community
Laravel Architecture for SaaS AI: Service vs Repository – When to Split, When to Combine (Part 3)
Laravel News Links
Liquid Fluoride Can Stop Cavities Without Drilling, Major Trial Finds
https://gizmodo.com/app/uploads/2026/08/teeth-with-cavities-1280×853.jpg
Dentists might soon have an easier option on hand to treat the dreaded cavity.
Researchers at the University of Michigan conducted a large-scale Phase III trial testing out a liquid form of fluoride on children’s cavities. Compared to placebo, the treatment was significantly better at preventing further tooth decay and avoiding the need for more invasive options like fillings or surgery.
The findings show that liquid fluoride can be an effective “noninvasive treatment for young high-risk children and [support] its consideration for FDA drug approval,” the researchers wrote in their paper, published in July in JAMA Pediatrics.
Currently off-label
Cavities (also called caries) are holes caused by bacteria that erode the protective surface of our teeth. Though people these days might be taking better care of their teeth than in the past, more than 40% of children in the U.S. still develop some level of teeth decay. Cavities are usually treated using fillings, but in more severe cases where the decay penetrates deeper and causes an infection, people will need a more invasive root canal or even a complete removal of the affected teeth.
Fluoride has long been known to help prevent cavities, which is why governments in many parts in the world add small amounts of it to their drinking water supply. It also seems to be effective at preventing, or arresting, the further progression of existing cavities. Many countries have approved certain fluoride-based treatments, such as silver diamine fluoride (SDF), to prevent worsening cavities. Notably, however, this list doesn’t include the U.S.
In 2014, the Food and Drug Administration did approve SDF for treating tooth hypersensitivity, which allowed dentists to use it as an off-label treatment for cavities. Two years later, in 2016, the FDA designated SDF as a “breakthrough” therapy, a label intended to speed up the review process for treatments that can meet an urgent need. Without high-quality evidence of its safety and effectiveness, though, the FDA is unlikely to ever approve SDF for this use.
This current trial, funded in part by the U.S. National Institutes of Health, is meant to help provide that evidence.
Solid evidence
The trial involved 830 children under the age of six with severe early childhood cavities. Half of the children were randomized to get a placebo, and the remaining were given a 38% formulation of SDF, applied directly to the affected teeth via a small sponge-filled tip. People received treatment at the start of the study and a second dose six months later. The children were evaluated for cavities over the next eight months.
Ultimately, 70% of children completed the study in full. By the eight-month mark, about 50% of the children treated with SDF showed no progression of their cavities, compared to 17% of children given a placebo.
SDF is known to cause a permanent darkening of the teeth (an effect of the silver). That said, reported adverse events were similar between the two groups. This cosmetic side effect is also likely to be less worrying for children who will eventually lose their baby teeth.
The team’s findings should help strengthen the case for the FDA’s approval of SDF, the researchers say.
“If we want more children and families to benefit from this treatment, we need rigorous evidence showing both that it works and that it’s safe,” said lead author Margherita Fontana, professor of dentistry at the University of Michigan School of Dentistry, in a statement from the university. “From a public health perspective, if we want broader implementation across the United States, including in medical settings, we need carefully collected data in U.S. populations, and we now have that.”
Though the primary use of SDF is likely to be for very young children, it might also be a helpful stopgap for adults who are unable to get or afford other treatments.
“For almost anyone, this can arrest the decay and stop the infection and the pain it causes,” Fontana said. “This could benefit many people.”
Gizmodo
Don’t Be That Guy: The Taxonomy of Lousy Male Friends
https://content.artofmanliness.com/uploads/2010/08/dunce-1.jpg

Editor’s note: This is a guest post from Steve Kamb.
We all know “That Guy,” and we all have at least one in our group of friends.
He’s the one scalawag who is generally pleasant to hang out with except for one glaringly painful characteristic. Although there are different species of That Guy, some far more deplorable than others, they all have one thing in common: they often piss their friends off without knowing it.
Today, you’ll learn about the various forms of That Guy, how to react should you find one in your midst, and how to evolve in case you are That Guy.
The Poor Sport (Crybabial Sporticus)

Characteristics: The Poor Sport is dreadful to play against in any sporting event or competition. He complains incessantly about bad foul calls in pickup basketball, a weekend golf match among friends causes a temporary loss of arithmetic skills, and he will never accept blame for a loss, no matter the occasion. The cards are unlucky in a bad poker loss, the controller is faulty in a video game defeat, and the racquet is the reason for a poor tennis performance. In his own mind, he can do no wrong.
How to deal with That Guy: To start, don’t let him get away with cheating. If you know he counted incorrectly in golf, kindly remind him about the six shots it took him to get out of the bunker. If you defeat him in any competition, brace yourself for a torrent of expletives and excuses, but don’t fan the flames. Although you might want to defend your stellar performance or yell at him for being a crybaby, everybody around you already knows the truth: your friend is a sore loser.
How to evolve if you are That Guy: Go ask a few people about their worst “bad beat” in poker. Exhausted of the complaining yet? This is what you sound like to your friends ALL THE TIME. First of all, stop cheating in golf — your life won’t change if you post a 79 or a 119, and your friends ARE keeping track of your score whether they admit it or not. Show a little sportsmanship and integrity. If you lose to your friends at Halo, pickup basketball, tennis, scrabble, bocce, cards, whatever — take it like a man, and accept defeat. Everybody loses at some point, and nobody wants to hear excuses. Get over it.
The Mooch (Dudicus Moochalum)

Characteristics: The Mooch never has any money, brings any food, or provides any shelter; he instead leeches off of those around him. Think Cosmo Kramer in real life. The cause is most likely an allergic reaction to ambition. The last beer in the case, the final ice cream bar in the freezer, and any leftovers in the fridge tend to disappear whenever he’s around. A Mooch’s wallet gets “accidentally” left at home quite frequently, and he is always a pain to track down for repayment of money borrowed.
How to deal with That Guy: The Mooch usually understands his unfortunate situation, but he’s often too lazy to do anything about it. If you’re feeling magnanimous, help him find a job; just be careful who you recommend him to because it’s your reputation that’s at stake. Now, until he finds employment, do what you can to keep him in line: keep track of how much money you’ve loaned him and consider charging 10% interest each week until the debt is repaid. Don’t be afraid to call him out when he eats the last Oreo either, because that’s just not cool.
How to evolve if you are That Guy: Stop being lazy and get a job (and if you have a good job, quit mooching; the only thing worse than a poor mooch is a well-off cheapskate). Secondly, NEVER take the last one of something that isn’t yours unless you plan on replacing it. Try chipping in every once and awhile, too — show up unexpectedly with a case of beer or volunteer to buy the first round of drinks. I don’t care if you have to rob somebody first, always repay your financial debts to friends within 24 hours, no exceptions. Now, if you already have a job, and you’re still poor, find another way to contribute: are you a good cook? Do you have connections at a restaurant or movie theater? Do what you can to make up for your lack of funding — your friends will appreciate it.
Mr. Unreliable (Amigus Bail’Outicum)
I told the flake to pick me up at 7. Damnit!
Characteristics: It’s never known if Mr. Unreliable is actually going to show up, no matter how many promises have been made. He often signs up for an engagement before backing out at the last minute. “On time” to him usually means at least an hour late. Getting Mr. Unreliable to commit to something that requires an upfront financial deposit is like pulling teeth. Rather than saying no to an obligation, he’ll give a noncommittal answer that allows him to bail out at the last minute with a lame excuse via text message, thus avoiding confrontation.
How to deal with That Guy: Always expect Mr. Unreliable to not show up, and then be pleasantly surprised if he does! If you’re planning a trip with him, make sure to get some sort of financial commitment before putting up your own money — when he tries to back out this time, allow him to only do so if he can find a replacement. At that point, it’s no longer your responsibility. Not surprisingly, you should rely upon Mr. Unreliable as little as possible.
How to evolve if you are That Guy: Your friends don’t think you’ll show up to anything anymore, and eventually they’ll just stop calling. Change that perception by actually showing up to stuff consistently! What a novel idea, I know. Now, if you get invited to an event you don’t want to attend, be up front with your friends and tell them not to expect you. Lastly, start showing up on time. Arriving late consistently tells your friends that your time is more valuable than theirs. Show up at the right place at the right time.
The One-Upper (Betterum Than’Youicus)

Characteristics: Reeking of superiority and elitism, the One-Upper is a constant name-dropper of famous people and locations. During story time, the One-Upper must always ensure that he appears the strongest, best, had the toughest life growing up, drank the most beers, and/or met the coolest people. This is mostly due to a strong sense of insecurity, causing a need for constant affirmation and attention.
How to deal with That Guy: As tempting as it is to get into a pissing match with the One-Upper, the best course of action is to give him his small moment of glory, because he clearly needs it. As explained in Ben Franklin’s Virtuous Life Series, “People may talk about that guy’s exciting story the next day, but they’ll remember how much of a gentleman you are years later.” Be thankful you don’t base your self-worth on how much attention you can get. Go about your business, do great work, and the results will speak for themselves.
How to evolve if you’re That Guy: Nobody really cares how many famous people you know, how much you can bench, or how much better you are at something than everybody else. Start by letting other people have the spotlight every once and a while; continually one-upping your friends is a surefire way to piss everybody off. Instead, pick your battles and share stories when appropriate — not to brag, not to show off, but just to share a great story.
The Fibber (Fullofum Crapolakis)

Characteristics: The Fibber can stretch the truth like a penny-pincher can stretch a dollar. Known to tell dull stories that suddenly become way more exciting (and ultimately completely unbelievable), The Fibber is also known for creating inane excuses when trying to weasel out of any scenario. The Fibber is closely related to Mr. Unreliable and the Poor Sport for similar “lack of truth” qualities.
How to deal with That Guy: Take everything The Fibber says with a grain of salt and don’t bother wasting your time trying to trap him in a lie — he’ll simply get defensive and start weaving another web of lies. Just be thankful that you’re not a liar and take solace in the fact that people can rely on your word. Now, if the lies start to become disruptive to the group, pull the person aside and have a serious conversation about the lies in private rather than calling him out in public.
How to evolve if you’re That Guy: You know you’re lying, your friends know you’re lying, and that hole you’re digging for yourself is only getting deeper. Instead of creating new tall tales and more complex lies to cover for the old ones, just freaking tell the truth and wait until you actually have a good story to tell! Your conscience will thank you and so will your buddies.
Other Lesser Known Species of That Guy
Other than the five prominent species of That Guy listed above, there are actually quite a few others who might be lesser known but are no less abysmal:
The Flip Flopper (Fencium Sitterus). Having no opinion of his own, the Flip Flopper will alter his beliefs depending on who he’s talking to and who he’s trying to impress. He is generally classified as an invertebrate for lacking a backbone.
The Loud Mouth (Pieholus Gigantum). This chump cannot keep his mouth shut, whether it’s keeping a secret, talking during a movie, or putting down another friend when he’s not around. The Loud Mouth generally should not be trusted with any important information unless it needs to be shouted from the rooftops.
The “Takes It Too Far” Guy (Over The’Lineicus). This poor soul lives life to the extreme a little too often. He’s generally the one that always gets WAY too drunk at parties, takes jokes too far after they’ve become unfunny, and gets offended over things that nobody else would ever take personally. Tact is pretty much non-existent.
“The Garbage Man” (In’lovum with Jesses’girlikus). The Garbage Man has no problem attempting to date his friend’s ex-girlfriend, because he lacks the skills to move outside of the social circle and meet new people. The most despicable variation of this species will attempt to date his friend’s current girlfriend, which generally results in an ass-kicking.
Steve Kamb is the founder of Nerd Fitness and the author of How to Try Again. You can find him on Substack.
Be sure to listen to our podcast with Steve about his latest book:
__________________________________________________________________________
With our archives now 4,000+ articles deep, we’ve decided to republish a classic piece each Sunday to help our newer readers discover some of the best, evergreen gems from the past. This article was originally published in August 2010.
This article was originally published on The Art of Manliness.
The Art of Manliness
McDonald’s Backpack
https://www.toxel.com/wp-content/uploads/2026/07/mcfriesbackpack01.jpg
August 1st, 2026 | Tech |

McDonald’s fast food restaurants in China sell limited edition backpacks with side pockets for large Fries and ketchup.
Designed with iconic McDonald’s colors and Golden Arches, the backpack features oversized side pockets that hold large servings of fries.
Shoulder strap includes a built-in storage loop for holding ketchup packets.

Instead of telling people to love fries, McDonald’s created a backpack that lets fans literally carry and display their love for fries wherever they go.

Big Fries Backpack celebrates fast food and does not take itself too seriously.

Most backpacks are designed to carry books, laptops, or clothing. This one proudly makes room for McDonald’s fries.

Included shoulder-strap fry holder allows people to snack hands-free while walking, almost like a wearable dining system.

Also check out: McDonald’s Fries Crosswalk
Toxel.com
MySQL Performance Tuning: 8 Proven Techniques for Faster Queries
https://webyog.com/wp-content/uploads/2026/07/MySQL-performance-tuning.png
Slow MySQL queries are one of the most common database problems — and one of the most solvable. Most performance issues don’t require new hardware or a rewrite. They require knowing where to look and what to fix first.
These eight techniques cover the most impactful improvements, ordered by how quickly they tend to deliver results.
Start With a Map, Not a Guess
The biggest mistake in performance tuning is skipping straight to server configuration changes without knowing where the actual bottleneck is. A misconfigured server running well-optimized queries will outperform a perfectly tuned server running terrible ones.

Skipping steps 1–3 and jumping to step 4 is how teams waste weeks tuning a server without improving anything meaningful.

1. Find Slow Queries First
Enable the MySQL slow query log to capture every query that takes longer than a threshold you define.
SET GLOBAL slow_query_log = ‘ON’;
SET GLOBAL long_query_time = 1;
This creates a log of every query that takes more than one second. Review it with mysqldumpslow (bundled with MySQL) to find your worst offenders.
Fix the top 10 slowest queries before doing anything else. In most databases, a handful of bad queries account for the majority of performance problems.
2. Read EXPLAIN Before Writing a Single Index
Run EXPLAIN before any slow SELECT query to see how MySQL plans to execute it. The most
important column is type .

If you see ALL on a table with meaningful data, there is almost certainly a missing index.
3. Add the Right Indexes
Adding an index on a column you filter by frequently is the single highest-return change you can make in most databases. It can turn a 10-second query into a millisecond one.
At the same time, every index adds overhead to writes. Review indexes regularly and remove ones that are no longer used:
SELECT * FROM sys.schema_unused_indexes;
A table with 15 indexes will have noticeably slower writes. Keep only what you use.
4. Fix the Queries Themselves
Before adjusting any server setting, look at the query logic. A few common patterns that cause avoidable slowness:

These changes require no schema modifications and often improve performance significantly on their own.
5. Size the InnoDB Buffer Pool Correctly
The InnoDB buffer pool is MySQL’s memory cache for data and indexes. If it is too small, MySQL reads from disk on every query — and disk is orders of magnitude slower than memory.
On a server dedicated to MySQL, allocate 70–80% of total RAM to the buffer pool. Check whether your current setting is adequate by looking at the buffer pool hit rate in SHOW ENGINE INNODB STATUS . If the hit rate is below 99%, the buffer pool is likely undersized.
6. Use Connection Pooling
Every time an application opens a fresh MySQL connection, there is overhead — authentication, session setup, memory allocation. For applications handling many concurrent requests, this adds up quickly.
Connection pooling maintains a set of open connections that are reused across requests. The application borrows a connection, uses it, and returns it. MySQL sees a small, stable number of connections regardless of application traffic.
Most application frameworks include built-in connection pooling. Enable it if you have not.
7. Monitor Query Execution in Real Time
Performance problems in production often appear under load — not during development or testing. You need visibility into what your database is doing right now, not just after the fact.
MONyog provides live dashboards showing active sessions, running queries, lock waits, and thread state. Its built-in advisors surface configuration issues and query patterns that commonly cause problems before they become incidents.

8. Tune Configuration Variables
Once queries and indexes are optimized, server configuration adjustments can provide additional gains. Key settings to review:

Always benchmark before and after configuration changes. A setting that helps one workload can hurt another.
Quick-Start Checklist

Want real-time visibility into your MySQL performance? Try MONyog free — monitor query performance, sessions, and server health in minutes. No agents, no overhead
Frequently Asked Questions
Enable the slow query log with long_query_time = 1 and let it run for a few hours. Find your ten slowest queries, run EXPLAIN on each one, and look for type: ALL in the output. In most environments, fixing a handful of queries with missing indexes will resolve the majority of the problem.
On a dedicated MySQL server, 70–80% of total available RAM. On a shared server, start at 50% and monitor. The goal is to keep your working dataset — the data and indexes accessed most frequently — in memory rather than on disk.
No. Every index adds overhead to writes. Too many indexes will slow INSERT, UPDATE, and DELETE operations noticeably. Add indexes based on actual slow query patterns, and remove unused ones regularly using sys.schema_unused_indexes .
Run SHOW ENGINE INNODB STATUS and look for the buffer pool hit rate. Below 99% typically indicates the buffer pool is undersized relative to your working dataset. Also monitor Innodb_buffer_pool_reads versus Innodb_buffer_pool_read_requests .
Usually because production has significantly more data, making table scans that were tolerable in testing very slow at scale. Or production has concurrent load creating lock contention. Enable the slow query log in production and run EXPLAIN — the execution plan can differ from what you saw in testing.
MONyog is Webyog’s MySQL monitoring tool. It provides real-time dashboards showing active queries, session activity, lock waits, and server health metrics. Its 600+ built-in advisors surface configuration issues and performance patterns automatically, alerting your team before users notice a problem.
Most improvements — adding indexes, optimizing queries — can be done on a live production database without downtime. MySQL 5.6+ supports online index creation for InnoDB tables. Configuration changes typically require a MySQL restart, though some can be applied dynamically. Plan configuration changes during low-traffic windows.
Review the slow query log weekly in active development periods and monthly in stable production environments. Set up real-time monitoring so you are alerted to performance regressions immediately rather than discovering them during manual reviews.
Planet for the MySQL Community
A Super Satisfying Marble Run
https://theawesomer.com/photos/2026/07/massive_marble_run_t.jpg
Jelle’s Marble Runs built this impressive display using 19,000 individual marbles along with parts from Xyloba and Gravitrax. The run starts slowly, but builds to a big finish with fields filled with thousands of hand-placed marbles laid out in pixel-art patterns. It took him five days to set it all up, and just a few minutes for all of the marbles to cascade through.
The Awesomer
Laravel Schema Designer
https://opengraph.githubassets.com/dde2f2f98f219065e9b78f42e0904f189e3bee6b38c303db761001279769d73a/hussein4alaa/schema-designer
A visual database schema designer for Laravel, driven entirely by migration files — no database introspection required.
The package replays every migration’s up() method against a capturing schema builder swapped in behind the Schema facade. Blueprints are recorded instead of executed and folded into an in-memory model of your final schema — rendered as an interactive ERD. Every change you make in the UI (create / edit / drop a table) generates a real migration file, shown to you for review before it is written.
composer require g4t/schema-designer
The service provider is auto-discovered. Open the designer at:
http://your-app.test/schema-designer
- ERD canvas — tables as draggable cards, foreign keys as curved colored edges, pan/zoom, auto-layout, fit-to-view, and a live filter. Card positions persist across sessions.
- Create tables — column editor with all common Blueprint types, length/precision/enum values, nullable/unsigned/default/
useCurrentmodifiers, composite indexes, and foreign keys withonDelete/onUpdate. Quick-add buttons forid,uuid,timestamps, and soft deletes. - Edit tables — the designer diffs your changes against the parsed schema and generates an update migration:
renameColumn,->change(),dropColumn, index and FK adds/drops — ordered correctly (FK/index drops before column drops) with a best-effortdown(). - Drop tables — generates a
dropIfExistsmigration whosedown()fully recreates the table from the current parsed definition. - Migration awareness — tables whose source migrations haven’t run yet get a pending badge, and you can run
php artisan migrateright from the UI. - Safe parsing — raw
DB::statement()/ query-builder calls inside migrations run in the connection’s pretend mode, so parsing never touches your database. Files that fail to parse are surfaced as warnings, never fatal.
| Laravel | 8.x, 9.x, 10.x, 11.x, 12.x, 13.x |
| PHP | ^8.0 |
| Databases | Driver-agnostic — parsing happens at the Blueprint level, so MySQL, PostgreSQL, SQLite, and SQL Server projects all work the same. |
php artisan vendor:publish --tag=schema-designer-config
| Key | Default | Purpose |
|---|---|---|
enabled |
null |
null → available everywhere except production. Override with SCHEMA_DESIGNER_ENABLED=true/false. |
path |
schema-designer |
Route prefix. |
middleware |
['web'] |
Add auth etc. to protect the UI. |
migrations_path |
database_path('migrations') |
Where migrations are read from and written to. |
layout_file |
storage/app/schema-designer/layout.json |
Canvas positions. |
- Migration files are loaded in order (both anonymous-class and classic named-class styles).
- The
Schemafacade root is swapped for aCapturingSchemaBuilder; eachSchema::create/table/drop/renamecall produces a Blueprint that is recorded, not executed. - Introspection calls inside migrations (
Schema::hasTable(),hasColumn(), …) are answered from the aggregated state, so conditional migrations behave exactly as they would against a fully migrated database. SchemaAggregatorfolds columns,->change()s, renames, drops, indexes, and foreign keys into the final schema model.
- Raw SQL (
DB::statement('ALTER TABLE …')) can’t be interpreted structurally — the statement is safely ignored and the file is listed under parse warnings when it affects schema. Schema::connection('other')->…calls bypass the capture and are not represented.- Generated
down()methods for edits are best-effort reconstructions.
The UI writes files into your migrations directory and can run php artisan migrate. It is disabled in production by default — if you enable it there, put real auth middleware in front of it.
MIT
Laravel News Links
