In this blog post, we will explore how network partitions impact group replication and the way it detects and responds to failures. In case you haven’t checked out my previous blog post about group replication recovery strategies, please have a look at them for some insight. Topology: [crayon-67266b201fb2a722397174/] Scenario 1: One of the GR nodes […]
Just thought I’d share a script I use daily and helps me redirect my attention if needed.
This is but a mere pointer, guideline and starting point in any task. I just thought I’d share and hope someone else’s day becomes slightly easier thanks to some brief investigation and command tweaking.
Now the really handy thing here is that I only hard code the router01 node name, as I’m using that as a potential endpoint (thinking cloud, XaaS, etc…) where it could also be a VIP, LBR or similar. It’s the entry point so I can query the P_S table error_log so I can get different views and act accordingly.
For example:
- First, give me the InnoDB Cluster ordered server list so I can take a step back from my usual pains and worries, and see the architecture view. And make me type “Y” or similar to move on. Here if there were any server missing, I’d see the summary right away so I don’t really need to …
I thought I’d share some quick intro steps into how we can monitor the MySQL Router.
This can be useful if we’re observing intermittent outages, network packet drops or you’re just not sure if everythings fine in your MySQL InnoDB Cluster.
My scenario: The drupal servers are connecting and sometimes the users are getting connection errors. I don’0t see anything at MySQL server level of any instance nor cluster problem. Let’s review the Routers.
On all MySQL Router servers, double check the config file for the log location and also the log level. At /etc/mysqlrouter/mysqlrouter.conf (default rpm install location):
[DEFAULT]
name=myrouter
user=mysqlrouter
..
..
logging_folder=/routerlog/log
..
[logger]
level=DEBUG
#level=INFO
I’ve changed my logger level to DEBUG which will give you a lot more info about connections and counters so you can see what’s happening …
[Read more]TL;DR: Make sure to run “SET persist_only disabled_storage_engines=’MyISAM’, persist sql_generate_invisible_primary_key=ON;” on all instances and restart each one in your MySQL InnoDB Cluster.
Ok, what does “safe from naughtiness” mean?:
– Anyone creating tables that aren’t InnoDB, as this doesn’t make
sense, after all, it is an “InnoDB” cluster.
– Making sure all tables have a Primary Key (invisible or
not).
– Making sure that my (invisible) primary keys are visible to the
cluster as it will rightfully complain if they aren’t!
This basically means that once you’ve got it all up and running you won’t run into those horrible situations whereby someone, somewhere, creates a MyISAM table that didn’t have a Primary Key and thus leave you with a broken cluster.
Eg.
MySQL rtnode-01:3306 ssl JS > vlc.status()
{
"clusterName": "VLC",
"clusterRole": "PRIMARY", …
[Read more]
Now this is far from being any observability manual for your InnoDB Cluster and let alone go into everything MySQL Shell API Admin, or the collectDiagnostics utility. You can also use the default javascript commands that we all know and love via dba.getCluster() and so on, but here’s a different take.
I just want to share something I’ve been playing with to pull out some key info from mycluster. Hope it helps someone else out there.
General setup:
select cluster_id, cluster_name, description, cluster_type, primary_mode, clusterset_id
from mysql_innodb_cluster_metadata.clusters;
Members of our cluster:
select * from …
[Read more]
Back again, now with MySQL installs. And this means using the MySQL repository this time around.
I’ve been installing and configuring InnoDB Clusters and ClusterSets and thinking about the Ansible and Terraform users amongst us, maybe one-liners might help someone out there.
So, what about if I share how to install the MySQL repo, install the MySQL instance, create an InnoDB Cluster, add a MySQL Router, create a ClusterSet, make sure the Router is ClusterSet-aware, and then test it out. And all via one-liners.
First up, obrigado Miguel for https://github.com/miguelaraujo/ClusterSet-Demo.
To simplify the command execution sequence, these sections aim to help summarize the technical commands required to create the whole platform. And on a default path & port configuration, to ease operational deployments for all those 000’s of …
[Read more]Maintaining a production dataset at a manageable size can present a considerable challenge during the administration of a MySQL InnoDB Cluster.
Old Days
Back in the day when we only had one main copy of our data (the
source), and one read copy (the replica) that we used to look at
current and old data from our main system, we used a special
trick to remove data without affecting the replica. The trick was
to turn off writes to the binary log for our removal commands in
the main system. External tools like pt-archiver were also able to use that trick. To
stop bypass writing into the binary log, we used the command:
SET SQL_LOG_BIN=0
.
This mean that on the main production server (replication source), we were purging the data without writing the delete operation into the binary logs:
Current Days
These …
[Read more]When working with group replication, MySQL router would be the obvious choice for the connection layer. It is tightly coupled with the rest of the technologies since it is part of the InnoDB cluster stack.The problem is that except for simple workloads, MySQL router’s performance is still not on par with other proxies like Haproxy […]
During last Ubuntu Summit in Riga, I got an interesting question from Alex Lutay, engineering manager at Canonical regarding the different ways to perform some Admin API commands in MySQL Shell.
He wanted to know why, in the manual and blogs, we always use separate commands instead of combining them, as he would expect this to have an impact on the connections established with the server.
Let’s illustrate this by looking at the different ways of obtaining the state of a cluster. Here are the four different methods:
Method 1
This is the method most frequently used in the documentation:
$ mysqlsh admin@10.0.0.1
JS> cluster=dba.getCluster()
JS> cluster.status()
Method 2
This is Alex’s preferred method as he expects to have less round trips with the network:
$ …
[Read more]
Let’s see how to deploy WordPress and MySQL on a Kubernetes Cluster. The Kubernets cluster we are using is OKE (Oracle Kubernetes Engine) in OCI (Oracle Cloud Infrastructure):
OKE Cluster
We start by creating a Kubernetes Cluster on OCI using the Console:
We select the Quick create mode:
We need to name our cluster and make some choices:
When created, we can find it in the OKE Clusters list:
And we can see the pool of workers nodes and the workers:
kubectl
I like to use kubectl
directly on my latop to manage
my K8s Cluster.
On my Linux Desktop, I need to install
kubernetes-client
package (rpm).
Then on the K8s Cluster details, you can click on Access Cluster to get all the commands to use:
We need to copy them on our terminal and then, I like to also enable the bash completion for …
[Read more]