<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>EditLine vs ReadLine on FromDual GmbH</title><link>https://www.fromdual.com/blog/what-are-the-differences-between-mysql-community-and-mysql-enterprise-server-5-7/comment-975/</link><description>Recent content in EditLine vs ReadLine on FromDual GmbH</description><generator>Hugo</generator><language>en-GB</language><managingEditor>oli.sennhauser@fromdual.com (Oli Sennhauser)</managingEditor><webMaster>oli.sennhauser@fromdual.com (Oli Sennhauser)</webMaster><copyright>© FromDual GmbH</copyright><lastBuildDate>Mon, 23 Mar 2026 17:42:00 +0100</lastBuildDate><atom:link href="https://www.fromdual.com/blog/what-are-the-differences-between-mysql-community-and-mysql-enterprise-server-5-7/comment-975/index.xml" rel="self" type="application/rss+xml"/><item><title>MariaDB/MySQL Environment MyEnv 3.0.0 has been released</title><link>https://www.fromdual.com/blog/myenv-release-notes/fromdual-environment-myenv-3.0.0-has-been-released/</link><pubDate>Mon, 23 Mar 2026 17:42:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/myenv-release-notes/fromdual-environment-myenv-3.0.0-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 3.0.0 of its popular MariaDB, MySQL and PostgreSQL multi-instance environment &lt;a href="https://www.fromdual.com/software/fromdual-myenv/" title="MariaDB, MySQL and PostgreSQL multi-instance environment"&gt;MyEnv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The new MyEnv can be downloaded &lt;a href="https://support.fromdual.com/admin/public/download.php" target="_blank" title="FromDual download"&gt;here&lt;/a&gt;. How to install MyEnv is described in the &lt;a href="https://support.fromdual.com/documentation/myenv/myenv.html#installation-guide" target="_blank"&gt;MyEnv Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the MyEnv please report it to us by sending an &lt;a href="mailto:contact@fromdual.com?Subject=Bug report for myenv"&gt;email&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please &lt;a href="mailto:feedback@fromdual.com?Subject=Feedback for fpmmm"&gt;send them to us&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-2x-to-30"&gt;Upgrade from 2.x to 3.0&lt;/h2&gt;
&lt;p&gt;Please check the &lt;a href="https://support.fromdual.com/documentation/myenv/myenv.html#upgrade" target="_blank" title="Upgrading MyEnv"&gt;MyEnv Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="changes-in-myenv-300"&gt;Changes in MyEnv 3.0.0&lt;/h2&gt;
&lt;h3 id="myenv"&gt;MyEnv&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Template warning improved.&lt;/li&gt;
&lt;li&gt;Distro version in &lt;code&gt;--version&lt;/code&gt; added.&lt;/li&gt;
&lt;li&gt;Check MyEnv configuration permissions.&lt;/li&gt;
&lt;li&gt;#fd increased for MyEnv.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;myenv.conf&lt;/code&gt; should have more secure permissions now.&lt;/li&gt;
&lt;li&gt;Situation caught when &lt;code&gt;my.cnf&lt;/code&gt; is missing in &lt;code&gt;myenv.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Directories &lt;code&gt;home&lt;/code&gt; and &lt;code&gt;run&lt;/code&gt; moved to &lt;code&gt;dba&lt;/code&gt; and &lt;code&gt;myenv&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Unit file &lt;code&gt;mariadb.service&lt;/code&gt; and &lt;code&gt;mysql.service&lt;/code&gt; replaced by &lt;code&gt;dba.service&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;User &lt;code&gt;mysql&lt;/code&gt; replaced by &lt;code&gt;dba&lt;/code&gt; in template.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;start_stop&lt;/code&gt; fixed warning in case &lt;code&gt;argv[1]&lt;/code&gt; is missing.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sys_uid&lt;/code&gt; filter fixed for Rocky Linux.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dba&lt;/code&gt; unit file added to package.&lt;/li&gt;
&lt;li&gt;Nagios plugins detection removed from &lt;code&gt;showMyEnvVersion&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Old SysV init files removed and replaced by Systemd unit files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dba&lt;/code&gt; user was introduced and check for system user added.&lt;/li&gt;
&lt;li&gt;User &lt;code&gt;dba&lt;/code&gt; changed an cosmetic fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="myenv-installer"&gt;MyEnv Installer&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2 concurrent &lt;code&gt;installMyEnv&lt;/code&gt; versions cannot run any more.&lt;/li&gt;
&lt;li&gt;Directroy &lt;code&gt;binlog&lt;/code&gt;, &lt;code&gt;cgroups&lt;/code&gt; and &lt;code&gt;angel&lt;/code&gt; removed from &lt;code&gt;postgresql&lt;/code&gt; &lt;code&gt;type&lt;/code&gt; installation.&lt;/li&gt;
&lt;li&gt;Wrapper script &lt;code&gt;installMyEnv.sh&lt;/code&gt; removed.&lt;/li&gt;
&lt;li&gt;Cosmetics fixed in installer.&lt;/li&gt;
&lt;li&gt;Installation made more mysql friendly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libaio1t64&lt;/code&gt; considered during installation recommendations on DEB systems.&lt;/li&gt;
&lt;li&gt;Next free port suggestion during &lt;code&gt;installMyEnv&lt;/code&gt; improved. It will suggest the first free port now.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apt-get&lt;/code&gt; and &lt;code&gt;yum&lt;/code&gt; replaced by &lt;code&gt;apt&lt;/code&gt; and &lt;code&gt;dnf&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="myenv-utilities"&gt;MyEnv Utilities&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;insert_test.sh&lt;/code&gt; made PostgreSQL ready.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="postgresql"&gt;PostgreSQL&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PostgreSQL instance is stopped with fast instead of immediate now.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show_create_table.sh&lt;/code&gt; for PostgreSQL made nicer.&lt;/li&gt;
&lt;li&gt;PostgreSQL &lt;code&gt;status.sql&lt;/code&gt; added.&lt;/li&gt;
&lt;li&gt;Minor fixes for PostgreSQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="general"&gt;General&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CHANGELOG&lt;/code&gt; updated.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rc&lt;/code&gt; made unique.&lt;/li&gt;
&lt;li&gt;Minor bugs …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>FromDual Performance Monitor 2.2.1 has been released</title><link>https://www.fromdual.com/blog/fpmmm-release-notes/fromdual-performance-monitor-2.2.1-has-been-released/</link><pubDate>Thu, 19 Feb 2026 18:18:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/fpmmm-release-notes/fromdual-performance-monitor-2.2.1-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 2.2.1 of its popular Database Performance Monitor for MariaDB, Galera Cluster, MySQL and PostgreSQL &lt;a href="https://www.fromdual.com/software/fromdual-performance-monitor/"&gt;&lt;code&gt;fpmmm&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The FromDual Performance Monitor enables Database and System Administrators to monitor and understand what is going on inside their databases and on the machines where the databases reside.&lt;/p&gt;
&lt;p&gt;More information you can find here: &lt;a href="https://www.fromdual.com/software/fromdual-performance-monitor/"&gt;FromDual Performance Monitor&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="download"&gt;Download&lt;/h2&gt;
&lt;p&gt;The new FromDual Performance Monitor can be downloaded from our &lt;a href="https://support.fromdual.com/admin/public/download.php" target="_blank"&gt;Sofware Download&lt;/a&gt; page or you can use our &lt;a href="https://www.fromdual.com/repositories/"&gt;repositories&lt;/a&gt;. How to install and use the FromDual Performance Monitor is documented in the &lt;a href="https://support.fromdual.com/documentation/fpmmm/fpmmm.html" target="_blank"&gt;Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Performance Monitor please report it to us by sending an &lt;a href="mailto:contact@fromdual.com?Subject=Bug report for fpmmm"&gt;email&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them &lt;a href="mailto:feedback@fromdual.com?Subject=Feedback for fpmmm"&gt;to us&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="monitoring-as-a-service-maas"&gt;Monitoring as a Service (MaaS)&lt;/h2&gt;
&lt;p&gt;You do not want to set-up your database monitoring yourself? No problem: Choose our &lt;a href="https://www.fromdual.com/services/monitoring-as-a-service-maas/"&gt;Monitoring as a Service&lt;/a&gt; (MaaS) to safe time and costs!&lt;/p&gt;
&lt;h2 id="installation-of-performance-monitor-221"&gt;Installation of Performance Monitor 2.2.1&lt;/h2&gt;
&lt;p&gt;How to install the FromDual Performance Monitor you can find in the &lt;a href="https://support.fromdual.com/documentation/fpmmm/fpmmm.html#installation-guide" target="_blank"&gt;Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-of-fpmmm-tar-ball-from-1x-to-221"&gt;Upgrade of fpmmm tar ball from 1.x to 2.2.1&lt;/h2&gt;
&lt;p&gt;There are some changes in the configuration file (&lt;code&gt;fpmmm.conf&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The access rights should be change as follows: &lt;code&gt;chmod 600 /etc/fpmmm.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The key &lt;code&gt;Methode&lt;/code&gt; was spelled wrong in the configuration file. It was renamed to &lt;code&gt;Method&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The key &lt;code&gt;PidFile&lt;/code&gt; is ambiguous which could lead to problems and bugs. Thus it was changed to either &lt;code&gt;MyPidFile&lt;/code&gt; for fpmmm and &lt;code&gt;DbPidFile&lt;/code&gt; for the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrade with DEB/RPM packages should happen automatically. For tar balls follow this instruction:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd /opt
$ tar xf /download/fpmmm-2.2.1.tar.gz
$ rm -f fpmmm
$ ln -s fpmmm-2.2.1 fpmmm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="changes-in-fromdual-performance-monitor-221"&gt;Changes in FromDual Performance Monitor 2.2.1&lt;/h2&gt;
&lt;p&gt;These release notes include both the changes that came with version 2.2.0 and version 2.2.1.&lt;/p&gt;
&lt;p&gt;This release contains new features and various bug fixes.&lt;/p&gt;
&lt;p&gt;You can verify your current FromDual Performance Monitor version with the …&lt;/p&gt;</description></item><item><title>What is the quickest way to load data into the database?</title><link>https://www.fromdual.com/blog/load-data-quick-into-the-database/</link><pubDate>Wed, 11 Feb 2026 10:04:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/load-data-quick-into-the-database/</guid><description>&lt;p&gt;We had some really exciting problems to solve for the last customer! Especially because the database wasn&amp;rsquo;t exactly small.&lt;/p&gt;
&lt;p&gt;Here are some key data: CPU: 2 sockets x 24 cores x 2 threads = 96 vCores, 756 G RAM, 2 x 10 Tbyte PCIe SSD in RAID-10 and 7 Tbyte data, several thousand clients, rapidly growing.&lt;/p&gt;
&lt;p&gt;The current throughput: 1 M &lt;code&gt;SELECT&lt;/code&gt;/min, 56 k &lt;code&gt;INSERT&lt;/code&gt;/min, 44 k &lt;code&gt;UPDATE&lt;/code&gt;/min, 7 k &lt;code&gt;DELETE&lt;/code&gt;/min averaged over 30 days. With a strong upward trend. Application and queries not consistently optimised. Database configuration: ‘state of the art’ not verified with benchmarks. CPU utilisation approx. 50% on average, more at peak times. I/O system still has available resources.&lt;/p&gt;
&lt;p&gt;The customer collects position and other device data and stores it in the database. In other words, a classic IoT problem (with time series, index clustered table, etc.).&lt;/p&gt;
&lt;p&gt;The question he has asked is: What is the fastest way to copy data from one table (pending data, a kind of queue) to another table (final data, per client)?&lt;/p&gt;
&lt;p&gt;The data flow looks something like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;+------------+
| IoT Device |--+
+------------+ \
 \ +-----+
+------------+ \ | AS | +--------------+ Processing +------------+
| IoT Device |------+--&amp;gt;| |--&amp;gt;| Pending data |-------------&amp;gt;| Final data |
+------------+ / | 400 | +--------------+ of data +------------+
 / +-----+
+------------+ /
| IoT Device |--+
+------------+
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3 different variants to copy the data were available for selection.&lt;/p&gt;
&lt;h2 id="variant-1-insert-and-delete-simplest-form"&gt;Variant 1: &lt;code&gt;INSERT&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; (simplest form)&lt;/h2&gt;
&lt;p&gt;The simplest variant is a simple &lt;code&gt;INSERT&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt;. This variant is particularly problematic because MariaDB/MySQL and PostgreSQL have &lt;code&gt;AUTOCOMMIT&lt;/code&gt; enabled by default (&lt;a href="https://dev.mysql.com/doc/refman/8.4/en/innodb-autocommit-commit-rollback.html" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="https://mariadb.com/docs/server/reference/sql-statements/transactions/start-transaction" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="https://www.postgresql.org/docs/current/ecpg-sql-set-autocommit.html" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="https://www.cybertec-postgresql.com/en/disabling-autocommit-in-postgresql-can-damage-your-health/" target="_blank"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To help you visualise this a little better, here is some pseudocode:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;// 20k rows
for (i = 1; i &amp;lt;= 2000; i++) {

 SELECT * FROM pending LIMIT 10;
 foreach ( row ) {
 INSERT INTO final;
 -- implicit COMMIT
 DELETE FROM pending WHERE id = row[id];
 -- implicit COMMIT …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>MariaDB has broken the concept of dynamically configurable buffer pools!</title><link>https://www.fromdual.com/blog/mariadb-dynamically-configurable-buffer-pool-broken/</link><pubDate>Mon, 09 Feb 2026 19:14:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/mariadb-dynamically-configurable-buffer-pool-broken/</guid><description>&lt;h2 id="problem-description"&gt;Problem description&lt;/h2&gt;
&lt;p&gt;MySQL introduced the dynamically configurable InnoDB buffer pool with 5.7.5 in September 2014 (&lt;a href="https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html#innodb-buffer-pool-online-resize" target="_blank"&gt;here&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The innodb_buffer_pool_size configuration option can be set dynamically using a SET statement, allowing you to resize the buffer pool without restarting the server. For example:&lt;br&gt;&lt;br&gt;
mysql&amp;gt; SET GLOBAL innodb_buffer_pool_size=402653184;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MariaDB 10.2.2 adopted this feature in September 2016 (&lt;a href="https://mariadb.com/docs/release-notes/community-server/old-releases/10.2/10.2.2#notable-changes" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;InnoDB was merged from MySQL-5.7.14 (XtraDB is disabled in MariaDB-10.2.2 pending a similar merge)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problematic thing is, on the one hand, that this feature now no longer works as it did before and no longer works as expected. On the other hand, they changed the behaviour in spring 2025 within a major release series (LTS), which in my opinion is an absolute no-go (&lt;a href="https://mariadb.com/docs/server/server-usage/storage-engines/innodb/innodb-buffer-pool#buffer-pool-changes" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From MariaDB 10.11.12 / 11.4.6 / 11.8.2, there are significant changes to the InnoDB buffer pool behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And what is more, the description of this is quite poor (&lt;a href="https://mariadb.com/docs/release-notes/community-server/10.11/10.11.12#innodb" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;decreasing innodb_buffer_pool_size at runtime does not release memory (MDEV-32339)&lt;/li&gt;
&lt;li&gt;reorganise innodb buffer pool (and remove buffer pool chunks) (MDEV-29445)&lt;/li&gt;
&lt;li&gt;The Linux memory pressure interface, which could previously not be disabled and could cause performance anomalies, was rewritten and is disabled by default. (MDEV-34863)&lt;/li&gt;
&lt;li&gt;Server crashes when resizing default innodb buffer pool after setting innodb-buffer-pool-chunk-size to 1M (MDEV-34677)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the corresponding worklog (&lt;a href="https://jira.mariadb.org/browse/MDEV-36197" target="_blank"&gt;MDEV-36197&lt;/a&gt;) MarkoM also describes a different behaviour:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;innodb_buffer_pool_size_auto_max (my proposal for this task) would set the maximum for the automation (default: 0 to disable the logic).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which would have made much more sense in my opinion.&lt;/p&gt;
&lt;h2 id="how-did-it-work-before"&gt;How did it work before?&lt;/h2&gt;
&lt;p&gt;How did it work in the past with MariaDB and still today with MySQL:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SQL&amp;gt; SHOW GLOBAL VARIABLES LIKE &amp;#39;innodb_buffer_pool%size&amp;#39;;
+-------------------------------+-----------+
| Variable_name | Value |
+-------------------------------+-----------+
| …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>How much space does NULL need?</title><link>https://www.fromdual.com/blog/how-much-space-does-null-need/</link><pubDate>Sun, 08 Feb 2026 16:15:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/how-much-space-does-null-need/</guid><description>&lt;p&gt;The last time I consulted a customer, he came up to me beaming with joy and said that he had taken my advice and changed all the primary key columns from &lt;code&gt;BIGINT&lt;/code&gt; (8 bytes) to &lt;code&gt;INT&lt;/code&gt; (4 bytes) and that had made a big difference! His MySQL 8.4 database is now 750 Gbyte smaller (from 5.5 Tbyte). Nice!&lt;/p&gt;
&lt;p&gt;And yes, I know that contradicts the recommendations of some of my PostgreSQL colleagues (&lt;a href="https://www.crunchydata.com/blog/postgres-serials-should-be-bigint-and-how-to-migrate" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="https://www.cybertec-postgresql.com/en/uuid-serial-or-identity-columns-for-postgresql-auto-generated-primary-keys/#should-i-use-integerserial-or-bigintbigserial-for-my-auto-generated-primary-key" target="_blank"&gt;here&lt;/a&gt;). In the MySQL world, more emphasis is placed on such things (&lt;a href="https://dev.mysql.com/doc/refman/8.4/en/data-size.html" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Use the most efficient (smallest) data types possible. MySQL has many specialized types that save disk space and memory. For example, use the smaller integer types if possible to get smaller tables&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also, InnoDB works a wee bit differently (index clustered table and primary key in all secondary keys) than PostgreSQL (heap table, indices with row pointer (&lt;code&gt;ctid&lt;/code&gt;)).&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s not really the issue. Immediately afterwards, he asked me whether the deletion of columns of type &lt;code&gt;DOUBLE&lt;/code&gt; (8 bytes, in PostgreSQL-speak &lt;code&gt;DOUBLE PRECISION&lt;/code&gt;) would also save space or whether he should rather drop the columns straight away. My first reflex response to &lt;code&gt;DOUBLE&lt;/code&gt; was: &lt;code&gt;NULL&lt;/code&gt; is good, followed by &lt;code&gt;OPTIMIZE TABLE&lt;/code&gt; (&lt;code&gt;VACUUM FULL&lt;/code&gt; in PostgreSQL parlance). But the second thought was, &lt;code&gt;DOUBLE&lt;/code&gt; is a data type of fixed length, does &lt;code&gt;NULL&lt;/code&gt; also apply there or only for data types with variable length? Caution is the mother of the porcelain box! Love to consult the manual first&amp;hellip;&lt;/p&gt;
&lt;p&gt;And there it says (&lt;a href="https://dev.mysql.com/doc/refman/8.4/en/data-size.html" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Declare columns to be NOT NULL if possible. It makes SQL operations faster, by enabling better use of indexes and eliminating overhead for testing whether each value is NULL. You also save some storage space, one bit per column. If you really need NULL values in your tables, use them. Just avoid the default setting that allows NULL values in every column.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and (&lt;a href="https://dev.mysql.com/doc/refman/8.4/en/innodb-row-format.html" target="_blank"&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The variable-length part of the record header contains a bit vector for indicating NULL columns. &amp;hellip; Columns that are NULL do not occupy space other than the bit in this vector. The variable-length part of …&lt;/p&gt;&lt;/blockquote&gt;</description></item><item><title>Someone is deleting my shared memory segments!</title><link>https://www.fromdual.com/blog/deleted-postgresql-shared-memory-segments/</link><pubDate>Sun, 08 Feb 2026 06:27:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/deleted-postgresql-shared-memory-segments/</guid><description>&lt;p&gt;When we work with PostgreSQL under our &lt;a href="https://www.fromdual.com/myenv/"&gt;myEnv&lt;/a&gt;, we regularly get shared memory segment errors. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;psql: error: connection to server on socket &amp;#34;/tmp/.s.PGSQL.5433&amp;#34; failed:
FATAL: could not open shared memory segment &amp;#34;/PostgreSQL.4220847662&amp;#34;:
No such file or directory
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or we see similar messages in the PostgreSQL error log:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ERROR: could not open shared memory segment &amp;#34;/PostgreSQL.4220847662&amp;#34;:
No such file or directory
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Because I am a MariaDB/MySQL admin, I am not very familiar with shared memory problems (MariaDB/MySQL does not work with shared memory). Fortunately, a search on the Internet led us on the right track (&lt;a href="https://www.postgresql.org/message-id/56A52018.1030001%40gmx.net" target="_blank" title="Re: systemd deletes shared memory segment in /dev/shm/Postgresql.NNNNNN"&gt;source&lt;/a&gt;). It is noted there:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The documentation of systemd states that this only happens for
non-system users. Can you check whether your &amp;ldquo;postgres&amp;rdquo; user (or
whatever you are using) is a system user?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="linux-system-user"&gt;Linux System User&lt;/h2&gt;
&lt;p&gt;First I had to find out what a system user under Linux actually is. I found an answer here: &lt;a href="https://unix.stackexchange.com/questions/80277/whats-the-difference-between-a-normal-user-and-a-system-user" target="_blank"&gt;What&amp;rsquo;s the difference between a normal user and a system user?&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;That is not a technical difference but an organizational decision. E.g. it makes sense to show normal users in a login dialog (so that you can click them instead of having to type the user name) but it wouldn&amp;rsquo;t to show system accounts (the UIDs under which daemons and other automatic processes run) there.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The LSB standard says: &lt;a href="https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/uidrange.html" target="_blank"&gt;User ID Ranges&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The system User IDs from 0 to 99 should be statically allocated by the system, and shall not be created by applications.&lt;br&gt;
The system User IDs from 100 to 499 should be reserved for dynamic allocation by system administrators and post install scripts using useradd.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On my Ubuntu system it looks like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ grep SYS_ /etc/login.defs
#SYS_UID_MIN 100
#SYS_UID_MAX 999
#SYS_GID_MIN 100
#SYS_GID_MAX 999
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This would be correct for the PostgreSQL user:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ id postgres
uid=130(postgres) gid=142(postgres) groups=142(postgres),116(ssl-cert)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But since the PostgreSQL instance in question runs under our …&lt;/p&gt;</description></item><item><title>FromDual Backup and Recovery Manager</title><link>https://www.fromdual.com/software/fromdual-backup-and-recovery-manager/</link><pubDate>Sat, 07 Feb 2026 20:17:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/software/fromdual-backup-and-recovery-manager/</guid><description>&lt;p&gt;Coming soon&amp;hellip;&lt;/p&gt;
&lt;p&gt;Have also a look at the &lt;a href="https://support.fromdual.com/documentation/brman/brman.html" target="_blank"&gt;Backup and Recovery Manager Documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Load CSV files into the database</title><link>https://www.fromdual.com/blog/load-csv-files-into-the-database/</link><pubDate>Fri, 06 Feb 2026 18:04:00 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/load-csv-files-into-the-database/</guid><description>&lt;p&gt;Recently, I wanted to display the places of residence of the members of my club on a map for a personal gimmick (&lt;a href="https://www.shinguz.ch/computer/gis/igoc-mitglieder/" target="_blank"&gt;IGOC members&lt;/a&gt;). I knew the addresses of the club members. But not the coordinates of their places of residence.&lt;/p&gt;
&lt;p&gt;So I went in search of the coordinates and found what I was looking for at the Federal Office of Topography (&lt;a href="https://www.swisstopo.admin.ch/en" target="_blank"&gt;swisstopo&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The data is available there as a CSV file. Details here: &lt;a href="https://www.shinguz.ch/computer/gis/schweizer-ortschafts-koordinaten/" target="_blank"&gt;Swiss town coordinates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;How do I load this data into a database?&lt;/p&gt;
&lt;h2 id="loading-the-data-with-mariadbmysql"&gt;Loading the data with MariaDB/MySQL&lt;/h2&gt;
&lt;p&gt;MariaDB and MySQL have the &lt;code&gt;LOAD DATA INFILE&lt;/code&gt; command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SQL&amp;gt; DROP TABLE IF EXISTS wgs84;

SQL&amp;gt; -- SET GLOBAL local_infile = ON; -- Only needed with MySQL

SQL&amp;gt; CREATE TABLE wgs84 (
 ortschaftsname VARCHAR(32)
, plz4 SMALLINT
, zusatzziffer SMALLINT
, zip_id SMALLINT UNSIGNED
, gemeindename VARCHAR(32)
, bfs_nr SMALLINT
, kantonskuerzel CHAR(2)
, adressenanteil varchar(8)
, e DOUBLE
, n DOUBLE
, sprache VARCHAR(8)
, validity VARCHAR(12)
);

SQL&amp;gt; -- TRUNCATE TABLE wgs84;

SQL&amp;gt; LOAD DATA LOCAL INFILE &amp;#39;/tmp/AMTOVZ_CSV_WGS84/AMTOVZ_CSV_WGS84.csv&amp;#39;
INTO TABLE wgs84
FIELDS TERMINATED BY &amp;#39;;&amp;#39;
LINES TERMINATED BY &amp;#39;\r\n&amp;#39;
IGNORE 1 LINES
;
Query OK, 5713 rows affected
Records: 5713 Deleted: 0 Skipped: 0 Warnings: 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can then query the data in the database:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SQL&amp;gt; SELECT * FROM wgs84 ORDER BY ortschaftsname LIMIT 5;
+----------------+------+--------------+--------+--------------+--------+----------------+----------------+-------------------+--------------------+---------+------------+
| ortschaftsname | plz4 | zusatzziffer | zip_id | gemeindename | bfs_nr | kantonskuerzel | adressenanteil | e | n | sprache | validity |
+----------------+------+--------------+--------+--------------+--------+----------------+----------------+-------------------+--------------------+---------+------------+
| Aadorf | 8355 | 0 | 4672 | Aadorf | 4551 | TG | 96.802 % | 8.903193007810433 | 47.491079014637265 | de | 2008-07-01 …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Attribute promotion and demotion in the MariaDB Galera Cluster</title><link>https://www.fromdual.com/blog/attribute-promotion-and-demotion-in-the-mariadb-galera-cluster/</link><pubDate>Fri, 28 Nov 2025 16:26:48 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/attribute-promotion-and-demotion-in-the-mariadb-galera-cluster/</guid><description>&lt;p&gt;In MariaDB master/slave replication there is a feature called &lt;a href="https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-when-the-primary-and-replica-have-different-table-definitions" target="_blank"&gt;attribute promotion/demotion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Simply put, it is about how the slave behaves or should behave if the master and slave have different column definitions or even a different number of columns or a different sequence of columns.&lt;/p&gt;
&lt;h2 id="use-case-of-the-customer"&gt;Use case of the customer&lt;/h2&gt;
&lt;p&gt;This week we discussed with a customer the case of how he could perform a rolling schema upgrade (RSU) in a Galera cluster.&lt;/p&gt;
&lt;p&gt;With previous schema changes he has always had problems, which has led to a total failure of the cluster for several hours.&lt;/p&gt;
&lt;p&gt;The customer says that columns are never deleted and new columns are only ever added at the end of a table.&lt;/p&gt;
&lt;p&gt;And that it is NOT possible to ensure that there are no more write connections during the rolling schema upgrade.&lt;/p&gt;
&lt;p&gt;The PHP ORM framework &lt;a href="https://www.doctrine-project.org/" target="_blank"&gt;Doctrine&lt;/a&gt; is used.&lt;/p&gt;
&lt;h2 id="what-does-the-mariadb-documentation-say-about-this"&gt;What does the MariaDB documentation say about this?&lt;/h2&gt;
&lt;p&gt;The study of the MariaDB documentation did not lead to a conclusive result whether a rolling schema upgrade in the running Galera Cluster operation WITH changes (DML statements) on the schema to be changed (AND the tables to be changed) is supported or not and thus should work or not.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://mariadb.com/docs/galera-cluster/galera-management/general-operations/performing-schema-upgrades-in-galera-cluster#rolling-schema-upgrade-rsu" target="_blank"&gt;Rolling Schema Upgrade (RSU)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When replicating with different table structures, there is only general information on replication but nothing specific to Galera (whether it works or not):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Tables on the replica and the primary do not need to have the same definition in order for replication to take place. There can be differing numbers of columns, or differing data definitions and, in certain cases, replication can still proceed.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-when-the-primary-and-replica-have-different-table-definitions" target="_blank"&gt;Replication When the Primary and Replica Have Different Table Definitions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the attribute promotion/demotion feature there is a special MariaDB Server configuration parameter that controls the behaviour: &lt;code&gt;slave_type_conversions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you read between the lines here, this could also work for Galera Cluster:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Determines the type conversion mode on the replica when using row-based replication, including replications in …&lt;/em&gt;&lt;/p&gt;</description></item><item><title>FromDual Backup and Recovery Manager for MariaDB and MySQL 2.3.2 has been released</title><link>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.2-has-been-released/</link><pubDate>Wed, 22 Oct 2025 20:41:15 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.2-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 2.3.2 of its popular &lt;a href="https://www.fromdual.com/backup-and-recovery-manager-user-guide" title="FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;Backup and Recovery Manager for MariaDB and MySQL&lt;/a&gt; (&lt;code&gt;brman&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The new FromDual Backup and Recovery Manager can be downloaded from &lt;a href="https://support.fromdual.com/admin/public/download.php?operation=select&amp;amp;product_id=12&amp;amp;release_series_id=28&amp;amp;product_version_id=154" title="Download FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;here&lt;/a&gt;. The FromDual Repositories were updated. How to install and use the Backup and Recovery Manager is described in &lt;a href="https://www.fromdual.com/fromdual-backup-and-recovery-manager-installation-guide" title="FromDual Backup and Recovery Manager (brman) installation guide"&gt;FromDual Backup and Recovery Manager (&lt;code&gt;brman&lt;/code&gt;) installation guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Backup and Recovery Manager please send us an [email](mailto:contact@fromdual.com?Subject=Bug report for brman).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them to &lt;a href="mailto:feedback@fromdual.com?Subject=Feedback"&gt;feedback@fromdual.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-2x-to-232"&gt;Upgrade from 2.x to 2.3.2&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;$ cd /opt
$ tar xf /download/brman-2.3.2.tar.gz
$ rm -f brman
$ ln -s brman-2.3.2 brman
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="changes-in-fromdual-backup-and-recovery-manager-232"&gt;Changes in FromDual Backup and Recovery Manager 2.3.2&lt;/h2&gt;
&lt;p&gt;This release is a new minor release. It contains mainly bug fixes. We have tried to maintain backward-compatibility with the 1.2, 2.0, 2.1, 2.2 and 2.3 release series. But you should test the new release seriously!&lt;/p&gt;
&lt;p&gt;You can verify your current FromDual Backup Manager version with the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bman --version
$ rman --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="general"&gt;General&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tests improved.&lt;/li&gt;
&lt;li&gt;New features documented and documentation updated.&lt;/li&gt;
&lt;li&gt;Libraries from MyEnv project updated.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fromdual-backup-manager-bman"&gt;FromDual Backup Manager (bman)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SSL/TLS implemented for &lt;code&gt;bman&lt;/code&gt; only.&lt;/li&gt;
&lt;li&gt;Binary log position should be gathered correctly now also with MySQL 8.4.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fromdual-recovery-manager-rman"&gt;FromDual Recovery Manager (rman)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;No changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Subscriptions for commercial use of FromDual Backup and Recovery Manager you can get from [from us](mailto:contact@fromdual.com?Subject=Commercial use of FromDual brman).&lt;/p&gt;</description></item><item><title>MariaDB Honeypot</title><link>https://www.fromdual.com/blog/mariadb-honeypot/</link><pubDate>Thu, 06 Mar 2025 09:50:18 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/mariadb-honeypot/</guid><description>&lt;p&gt;In our &lt;a href="https://www.fromdual.com/advanced-mysql-mariadb-training"&gt;MariaDB advanced training courses&lt;/a&gt;, which we hold approximately every two months, we use machines that are directly exposed to the Internet with a public IP address.
&lt;strong&gt;Warning&lt;/strong&gt;: You should NEVER expose a database directly to the Internet without protection!
Typically, it takes less than 72 hours (3 days) before we are exposed to the first external access attempts.&lt;/p&gt;
&lt;p&gt;This looks something like this in the MariaDB error log:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Warning] Aborted connection 22939 to db: 'unconnected' user: 'unauthenticated' host: '118.193.58.125' (This connection closed normally without authentication)
[Warning] Aborted connection 22940 to db: 'unconnected' user: 'unauthenticated' host: '118.193.58.125' (This connection closed normally without authentication)
[Warning] Access denied for user ''@'118.193.58.125' (using password: NO)
[Warning] Access denied for user 'root'@'118.193.58.125' (using password: YES)
[Warning] Access denied for user 'root'@'118.193.58.125' (using password: YES)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;First of all, it was checked whether a database is listening and how it responds. Then various attempts are made to penetrate the database. It looks like there are various sampling and attack patterns. The anonymous user (&lt;code&gt;''@'%'&lt;/code&gt;) and &lt;code&gt;'root'@'%'&lt;/code&gt; are checked with and without a password.
Whether other users will be tested remains to be seen over a longer observation period.&lt;/p&gt;
&lt;p&gt;And this is what it looks like from the MariaDB General Query Log:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;287793 Connect root@196.251.91.77 on using TCP/IP
287793 Connect Access denied for user 'root'@'196.251.91.77' (using password: NO)
287794 Connect root@196.251.91.77 on using TCP/IP
287794 Connect Access denied for user 'root'@'196.251.91.77' (using password: YES)
287796 Connect root@196.251.91.77 on using TCP/IP
287796 Connect Access denied for user 'root'@'196.251.91.77' (using password: YES)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="preparing-the-honeypot"&gt;Preparing the honeypot&lt;/h2&gt;
&lt;p&gt;At the end of the training, we no longer need the machines, they will be removed. That&amp;rsquo;s why I was tempted to try out what happens when an access attempt is successful. To test this, the user …&lt;/p&gt;</description></item><item><title>How does Galera Cluster behave with many nodes?</title><link>https://www.fromdual.com/blog/how-does-galera-cluster-behave-with-many-nodes/</link><pubDate>Fri, 24 Jan 2025 18:12:55 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/how-does-galera-cluster-behave-with-many-nodes/</guid><description>&lt;p&gt;Recently I had the opportunity to have a lot of Linux systems (VMs with Rocky Linux 9) from one of our regular &lt;a href="https://www.fromdual.com/galera-cluster-for-mysql-mariadb-training" title="Overview of FromDual Galera Cluster Training"&gt;Galera Cluster trainings&lt;/a&gt; all to myself for a week. And MariaDB 11.4.4 with Galera Cluster was already installed on the machines.&lt;/p&gt;
&lt;p&gt;Since I had long wanted to try out how a Galera Cluster behaves with an increasing number of nodes, now was the opportunity to try it out.&lt;/p&gt;
&lt;p&gt;The following questions were to be answered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How does the throughput of a Galera cluster behave depending on the number of Galera nodes?&lt;/li&gt;
&lt;li&gt;Which configuration gives us the highest throughput?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A total of 5 different test parameters were experimented with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Number of Galera nodes.&lt;/li&gt;
&lt;li&gt;Number of client machines (= instances).&lt;/li&gt;
&lt;li&gt;Number of threads per client (&lt;code&gt;--threads=&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Number of Galera threads (&lt;code&gt;wsrep_slave_threads&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Runtime of the tests. This parameter was varied because some tests were cancelled during the run. It may be possible to eliminate this parameter with a lower rate (&lt;code&gt;--rate&lt;/code&gt;) in the load test. As it turned out, it did have an influence on the result or the measured throughput (e.g. test 4b and 5 or 18 and 19).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A total of 35 different tests were run. See &lt;a href="https://www.fromdual.com/blog/how-does-galera-cluster-behave-with-many-nodes/#raw-data"&gt;raw data&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="throughput-as-a-function-of-the-number-of-galera-nodes"&gt;Throughput as a function of the number of Galera nodes&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.fromdual.com/sites/default/files/galera_node_scaling_graph1.png" alt="graph"&gt;&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;Throughput related to # nodes&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;# gal nodes&lt;/th&gt;
&lt;th&gt;# threads/client&lt;/th&gt;
&lt;th&gt;runtime [s]&lt;/th&gt;
&lt;th&gt;tps&lt;/th&gt;
&lt;th&gt;runtime [s]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;7&lt;/th&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;596.3&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;8&lt;/th&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;567.8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;9&lt;/th&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;531.9&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;11&lt;/th&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;495.2&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;12&lt;/th&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;492.2&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;13&lt;/th&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;502.9&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;14&lt;/th&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;459.5&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;15&lt;/th&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;458.6&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;16&lt;/th&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;td&gt;429.2&lt;/td&gt;
&lt;td&gt;180&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Throughput related to &lt;br&gt;# nodes&lt;/p&gt;
&lt;p&gt;The throughput in the Galera cluster decreased slightly from 600 tps to 430 tps (28%) when the number of nodes was increased from 1 to 9.&lt;/p&gt;
&lt;h2 id="throughput-as-a-function-of-the-number-of-connections"&gt;Throughput as a function of the number of connections&lt;/h2&gt;
&lt;p&gt;The main variation here was with the number of clients and threads per client. The optimum seems to be 30 - 40 connections in this setup. Varying the number of Galera threads (&lt;code&gt;wsrep_slave_threads&lt;/code&gt;) does not seem to have had much effect in our case. The system does not seem to be able to deliver much more than …&lt;/p&gt;</description></item><item><title>Model v2 slightly improves results</title><link>https://www.fromdual.com/blog/playing-with-mariadb-vector-for-initial-ai-tests/comment-1065/</link><pubDate>Wed, 28 Aug 2024 15:55:43 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/playing-with-mariadb-vector-for-initial-ai-tests/comment-1065/</guid><description>&lt;p&gt;We have improved our model (&lt;a href="https://www.fromdual.com/sites/default/files/fromdual_llm_v2.phpx"&gt;see v2&lt;/a&gt;) so the results are a bit better/more accurate now.&lt;/p&gt;
&lt;p&gt;For usage see &lt;code&gt;./fromdual_llm_v2.php --help&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Playing with MariaDB Vector for initial AI tests</title><link>https://www.fromdual.com/blog/playing-with-mariadb-vector-for-initial-ai-tests/</link><pubDate>Wed, 28 Aug 2024 10:51:23 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/playing-with-mariadb-vector-for-initial-ai-tests/</guid><description>&lt;p&gt;Artificial intelligence (AI) and vector databases are on everyone&amp;rsquo;s lips these days. Since MariaDB will soon be coming onto the market with vector database functionality, as a database consultant I thought it was about time I got to grips with the subject so that I have at least a hint of what it&amp;rsquo;s all about&amp;hellip;&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m not so much of a theoretician but rather like to do something practical, I&amp;rsquo;ve built a small &amp;ldquo;AI&amp;rdquo; prototype that anyone can build very quickly and easily on their laptop (without a GPU)&amp;hellip;&lt;/p&gt;
&lt;p&gt;I also took the liberty of stealing the graphs from the MariaDB Foundation presentation (see sources at the end).&lt;/p&gt;
&lt;h2 id="downloading-the-mariadb-database-with-vector-functionality"&gt;Downloading the MariaDB database with vector functionality&lt;/h2&gt;
&lt;p&gt;There are no MariaDB packages with vector functionality yet, but the &lt;a href="https://mariadb.org/download/?t=mariadb&amp;amp;p=mariadb&amp;amp;r=11.6.0+Vector&amp;amp;os=source" target="_blank" title="MariaDB Vector source code"&gt;source code&lt;/a&gt; is already available. So you can quickly build the binaries yourself. This took just under an hour on my old box. Once the binaries are built, you can make a tarball out of them:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# tar xf mariadb-11.6.0_vector.tar.gz
# cd mariadb-11.6.0_vector/
# cmake .
# make
# make package
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The MariaDB database then only needs to be started.&lt;/p&gt;
&lt;h2 id="the-model"&gt;The model&lt;/h2&gt;
&lt;p&gt;To show the concept of tokenisation I decided to build an AI for URLs and to show the concept of different models and their potential for improvement I built a very stupid model in PHP, which simply decomposes a URL.&lt;/p&gt;
&lt;p&gt;The question that this model should be able to answer is: &amp;ldquo;Give me similar URLs to the following URL.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The corresponding table looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DROP TABLE IF EXISTS `urls`;
-- TRUNCATE TABLE is NOT sufficient!!!
CREATE TABLE `urls` (
 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
, `url` varchar(1024) DEFAULT NULL
, `title` varchar(2000) DEFAULT NULL
, `embedding` blob NOT NULL
, VECTOR KEY `embedding` (`embedding`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The model &lt;code&gt;fromdual_llm_v1&lt;/code&gt; can be downloaded &lt;a href="https://www.fromdual.com/sites/default/files/fromdual_llm_v1.phpx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This diagram from the MariaDB Foundation shows roughly how the whole thing works:&lt;/p&gt;
&lt;img src="https://www.fromdual.com/sites/default/files/vector_1.png" width="640" /&gt;
&lt;h2 id="training-the-ai"&gt;Training the AI&lt;/h2&gt;
&lt;p&gt;The database is then trained: The URL is taken …&lt;/p&gt;</description></item><item><title>FromDual Backup and Recovery Manager for MariaDB and MySQL 2.3.1 has been released</title><link>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.1-has-been-released/</link><pubDate>Mon, 12 Aug 2024 16:25:13 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.1-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 2.3.1 of its popular &lt;a href="https://www.fromdual.com/backup-and-recovery-manager-user-guide" title="FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;Backup and Recovery Manager for MariaDB and MySQL&lt;/a&gt; (&lt;code&gt;brman&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The new FromDual Backup and Recovery Manager can be downloaded from &lt;a href="https://support.fromdual.com/admin/public/download.php?operation=select&amp;amp;product_id=12&amp;amp;release_series_id=28&amp;amp;product_version_id=151" title="Download FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;here&lt;/a&gt;. The FromDual Repositories were updated. How to install and use the Backup and Recovery Manager is described in &lt;a href="https://www.fromdual.com/fromdual-backup-and-recovery-manager-installation-guide" title="FromDual Backup and Recovery Manager (brman) installation guide"&gt;FromDual Backup and Recovery Manager (&lt;code&gt;brman&lt;/code&gt;) installation guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Backup and Recovery Manager please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual Bug tracker"&gt;Bugtracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for brman).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them to &lt;a href="mailto:feedback@fromdual.com?Subject=Feedback"&gt;feedback@fromdual.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-2x-to-231"&gt;Upgrade from 2.x to 2.3.1&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; cd ${HOME}/product
shell&amp;gt; tar xf /download/brman-2.3.1.tar.gz
shell&amp;gt; rm -f brman
shell&amp;gt; ln -s brman-2.3.1 brman
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="changes-in-fromdual-backup-and-recovery-manager-231"&gt;Changes in FromDual Backup and Recovery Manager 2.3.1&lt;/h2&gt;
&lt;p&gt;This release is a new minor release. It contains mainly bug fixes. We have tried to maintain backward-compatibility with the 1.2, 2.0, 2.1 and 2.2 release series. But you should test the new release seriously!&lt;/p&gt;
&lt;p&gt;You can verify your current FromDual Backup Manager version with the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; fromdual_bman --version
shell&amp;gt; bman --version
shell&amp;gt; rman --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="general"&gt;General&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Testing: LXC library updated.&lt;/li&gt;
&lt;li&gt;Testing: Test preparation improved.&lt;/li&gt;
&lt;li&gt;General: CHANGELOG updated.&lt;/li&gt;
&lt;li&gt;General: rc made unique.&lt;/li&gt;
&lt;li&gt;Documentation: Documentation improved.&lt;/li&gt;
&lt;li&gt;Documentation: Create user documented.&lt;/li&gt;
&lt;li&gt;Documentation: New release notes added to documentation.&lt;/li&gt;
&lt;li&gt;Packaging: Distro Debian 10 removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fromdual-backup-manager-bman"&gt;FromDual Backup Manager (bman)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Utility mariabackup replaced by mariadb-backup.&lt;/li&gt;
&lt;li&gt;Branch guessing improved.&lt;/li&gt;
&lt;li&gt;Code refactored.&lt;/li&gt;
&lt;li&gt;No realistic password is used any more.&lt;/li&gt;
&lt;li&gt;Error message for missing client utilities made more distro specific.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fromdual-recovery-manager-rman"&gt;FromDual Recovery Manager (rman)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Branch guessing improved.&lt;/li&gt;
&lt;li&gt;Code refactored.&lt;/li&gt;
&lt;li&gt;No realistic password is used any more.&lt;/li&gt;
&lt;li&gt;Error message for missing client utilities made more distro specific.&lt;/li&gt;
&lt;li&gt;Typo …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Partial physical database restore for MariaDB and MySQL</title><link>https://www.fromdual.com/blog/partial-physical-database-restore-for-mariadb-and-mysql/</link><pubDate>Tue, 02 Jul 2024 18:13:47 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/partial-physical-database-restore-for-mariadb-and-mysql/</guid><description>&lt;h2 id="what-is-it-about"&gt;What is it about?&lt;/h2&gt;
&lt;p&gt;When describing backup and restore scenarios, a full backup and a full restore of the database instance (&lt;code&gt;mariadbd&lt;/code&gt;/&lt;code&gt;mysqld&lt;/code&gt;) are usually assumed. This means that the entire database instance, including all databases (schemas), is backed up and restored.&lt;/p&gt;
&lt;p&gt;In practice, however, the situation is often different: An entire database instance is not to be restored, but only individual databases or even individual tables, because only these have broken.&lt;/p&gt;
&lt;p&gt;In many cases, this can be done quite easily with the tools &lt;code&gt;mariadb-dump&lt;/code&gt;/&lt;code&gt;mariadb&lt;/code&gt; or &lt;code&gt;mysqldump&lt;/code&gt;/&lt;code&gt;mysql&lt;/code&gt; (logical backup). However, if the database or table is very large, the restore will not be completed in a reasonable time (some minutes to a few hours).&lt;/p&gt;
&lt;p&gt;This is exactly where the so-called partial physical restore comes into play. Partial stands for one or more tables (or an entire database), physical for: Individual SQL statements are not executed, but the data files are physically restored. In this scenario, very large amounts of data can be restored very quickly, provided the appropriate infrastructure is in place. Rule of thumb: On fat hardware: 1 Tbyte per hour. In this way, database restores can be carried out very quickly.&lt;/p&gt;
&lt;p&gt;MariaDB and MySQL already offer this functionality out of the box. The mechanism is reasonably practicable for individual tables (see &lt;a href="https://www.fromdual.com/xtrabackup_in_a_nutshell#pb_restore"&gt;Restore partial backup&lt;/a&gt;). For entire databases with possibly dozens or hundreds of tables, however, the on-board mechanism is very cumbersome and error-prone.&lt;/p&gt;
&lt;h2 id="use-case"&gt;Use case&lt;/h2&gt;
&lt;p&gt;This is exactly where the new functionality of the &lt;a href="https://www.fromdual.com/fromdual-backup-manager-2.3.0-has-been-released"&gt;FromDual Backup and Recovery Manager (brman) v2.3.0&lt;/a&gt; comes into play: it considerably simplifies the partial physical database restore.&lt;/p&gt;
&lt;p&gt;A second scenario in which this new functionality can also be used is when moving a large database from one database instance to another (e.g. from Dev to Prod).&lt;/p&gt;
&lt;h2 id="preparations-for-the-partial-physical-database-restore"&gt;Preparations for the partial physical database restore&lt;/h2&gt;
&lt;p&gt;In order to be able to restore a database, a clean backup must of course first be available. This can either be created with the FromDual …&lt;/p&gt;</description></item><item><title>FromDual Backup and Recovery Manager for MariaDB and MySQL 2.3.0 has been released</title><link>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.0-has-been-released/</link><pubDate>Tue, 25 Jun 2024 15:12:02 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/brman-release-notes/fromdual-backup-manager-2.3.0-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 2.3.0 of its popular &lt;a href="https://www.fromdual.com/backup-and-recovery-manager-user-guide" title="FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;Backup and Recovery Manager for MariaDB and MySQL&lt;/a&gt; (&lt;code&gt;brman&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The new FromDual Backup and Recovery Manager can be downloaded from &lt;a href="https://support.fromdual.com/admin/public/download.php?operation=select&amp;amp;product_id=12&amp;amp;release_series_id=28&amp;amp;product_version_id=151" title="Download FromDual Backup and Recovery Manager for MariaDB and MySQL"&gt;here&lt;/a&gt;. The FromDual Repositories were updated. How to install and use the Backup and Recovery Manager is described in &lt;a href="https://www.fromdual.com/fromdual-backup-and-recovery-manager-installation-guide" title="FromDual Backup and Recovery Manager (brman) installation guide"&gt;FromDual Backup and Recovery Manager (&lt;code&gt;brman&lt;/code&gt;) installation guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Backup and Recovery Manager please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual Bug tracker"&gt;Bugtracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for brman).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them to &lt;a href="mailto:feedback@fromdual.com?Subject=Feedback"&gt;feedback@fromdual.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-2x-to-230"&gt;Upgrade from 2.x to 2.3.0&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; cd ${HOME}/product
shell&amp;gt; tar xf /download/brman-2.3.0.tar.gz
shell&amp;gt; rm -f brman
shell&amp;gt; ln -s brman-2.3.0 brman
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="changes-in-fromdual-backup-and-recovery-manager-230"&gt;Changes in FromDual Backup and Recovery Manager 2.3.0&lt;/h2&gt;
&lt;p&gt;This release is a new major release. The most important new feature is the &lt;strong&gt;partial physical restore&lt;/strong&gt;. We have tried to maintain backward-compatibility with the 1.2, 2.0, 2.1 and 2.2 release series. But you should test the new release seriously!&lt;/p&gt;
&lt;p&gt;You can verify your current FromDual Backup Manager version with the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; fromdual_bman --version
shell&amp;gt; bman --version
shell&amp;gt; rman --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="general"&gt;General&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Packaging: Release el9 added and debian format increase from 9 to 10 because of debian12.&lt;/li&gt;
&lt;li&gt;Documentation prepared for Asciidoctor.&lt;/li&gt;
&lt;li&gt;Distribtion dependent things fixed.&lt;/li&gt;
&lt;li&gt;Build script improved.&lt;/li&gt;
&lt;li&gt;Typos fixed.&lt;/li&gt;
&lt;li&gt;All print replaced by standard PHP echo commands.&lt;/li&gt;
&lt;li&gt;Redhat replace by Red Hat and CentOS by Rocky Linux.&lt;/li&gt;
&lt;li&gt;Copyright year updated to 2024.&lt;/li&gt;
&lt;li&gt;Library myEnv updated (&lt;code&gt;getDistribution&lt;/code&gt;, &lt;code&gt;lsb_release&lt;/code&gt; removed).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fromdual-backup-manager-bman"&gt;FromDual Backup Manager (bman)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Bug in &lt;code&gt;sftp&lt;/code&gt; transfer for archiving files fixed.&lt;/li&gt;
&lt;li&gt;Also create subdirectories only once if necessary in physical backup.&lt;/li&gt;
&lt;li&gt;Archive location directory is only created once in physical backup. This avoids errors and makes the backup slightly faster.&lt;/li&gt;
&lt;li&gt;In …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Shrinking the InnoDB system tablespace</title><link>https://www.fromdual.com/blog/shrinking-the-innodb-system-tablespace/</link><pubDate>Mon, 17 Jun 2024 14:45:32 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/shrinking-the-innodb-system-tablespace/</guid><description>&lt;p&gt;One feature that really excited me in the new MariaDB 11.4 LTS release is the shrinking of the system tablespace (&lt;code&gt;ibdata1&lt;/code&gt;). I have been eagerly waiting for this feature since around 2006 and now it has finally arrived with MariaDB 11.4.
Actually, this feature has been available since &lt;a href="https://www.fromdual.com/enterprise-support-for-mariadb-and-mysql#mariadb-eol"&gt;MariaDB 11.2 IR&lt;/a&gt; (June 2023).&lt;/p&gt;
&lt;p&gt;Unfortunately, the announcement of this feature came a little too short. In the MariaDB release notes it says succinctly:&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;The InnoDB system tablespace is now shrunk by reclaiming unused space at startup (&lt;a href="https://jira.mariadb.org/browse/MDEV-14795" target="_blank"&gt;MDEV-14795&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;From the &lt;a href="https://mariadb.com/kb/en/mariadb-11-2-0-release-notes/"&gt;MariaDB 11.2.0 Release Notes&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The reasons why this file can grow immeasurably have actually been known for a long time and the measures against it are also clear (see &lt;a href="https://www.fromdual.com/blog/shrinking-the-innodb-system-tablespace/#literature"&gt;literature&lt;/a&gt;). But again and again we see MariaDB users out in the field who didn&amp;rsquo;t realise the problem or realised it too late and are now left with an &lt;code&gt;ibdata1&lt;/code&gt; file that is far too large&amp;hellip;&lt;/p&gt;
&lt;h2 id="how-can-the-problem-be-provoked"&gt;How can the problem be provoked?&lt;/h2&gt;
&lt;p&gt;The problem can be provoked by creating a table in the system tablespace:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SET global innodb_file_per_table = off;

SQL&amp;gt; CREATE TABLE `test` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `data` varchar(128) DEFAULT NULL,
 `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then filling it with data:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; INSERT INTO test
SELECT NULL, 'Some data to provoke huge data growth in system tablespace', NOW()
;

SQL&amp;gt; INSERT INTO test
SELECT NULL, 'Some data to provoke huge data growth in system tablespace', NOW()
 FROM test LIMIT 1000000
;
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While the table is being filled, you can observe how the file &lt;code&gt;ibdata1&lt;/code&gt; swells on the file system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ while [ 1 ] ; do ll -h ibdata1 ; sleep 5 ; done
-rw-rw---- 1 mysql mysql 12M Jun 2 13:57 ibdata1
-rw-rw---- 1 mysql mysql 76M Jun 12 13:57 ibdata1
-rw-rw---- 1 mysql mysql 76M Jun 12 13:57 ibdata1
-rw-rw---- 1 mysql mysql 140M Jun 12 13:58 ibdata1
-rw-rw---- 1 mysql mysql 204M Jun 12 13:58 ibdata1
-rw-rw---- 1 mysql mysql 268M Jun 12 13:58 ibdata1
-rw-rw---- 1 …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>MDEV-34412</title><link>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1064/</link><pubDate>Mon, 17 Jun 2024 12:05:44 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1064/</guid><description>&lt;p&gt;&lt;a href="https://jira.mariadb.org/browse/MDEV-34412"&gt;https://jira.mariadb.org/browse/MDEV-34412&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Migration Problem mysql 5.7 to mariadb/galera</title><link>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1063/</link><pubDate>Mon, 17 Jun 2024 11:53:57 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1063/</guid><description>&lt;p&gt;Hi dcz01&lt;/p&gt;
&lt;p&gt;No it is not solved&amp;hellip; It is closed and &amp;ldquo;not a bug&amp;rdquo;&amp;hellip; I try to intervene&lt;/p&gt;
&lt;p&gt;Regards,
Oli&lt;/p&gt;</description></item><item><title>Possibly a bug</title><link>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1061/</link><pubDate>Mon, 17 Jun 2024 11:29:33 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/migrating-from-mysql-master-master-to-galera-replication/comment-1061/</guid><description>&lt;p&gt;Hello dcz01&lt;/p&gt;
&lt;p&gt;I would say, this is probably a bug. I can reproduce it on my system (MySQL 5.7 Master and MariaDB 10.6 Galera Cluster).&lt;/p&gt;
&lt;p&gt;Please contact your MariaDB support contact&amp;hellip; If you need assistance we are happy to sell you our remote-DBA services&amp;hellip;&lt;/p&gt;
&lt;p&gt;Regards,
Oli&lt;/p&gt;</description></item><item><title>How to downgrade MariaDB or MySQL</title><link>https://www.fromdual.com/blog/downgrade-mariadb-or-mysql/</link><pubDate>Tue, 21 May 2024 09:54:14 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/downgrade-mariadb-or-mysql/</guid><description>&lt;p&gt;On this page we have summarised information about downgrading a MariaDB/MySQL database. We do not cover migrating from MySQL to MariaDB or vice versa. For migrations (sidegrade) please look here: &lt;a href="https://www.fromdual.com/mysql-mariadb-migration"&gt;MySQL - MariaDB migration&lt;/a&gt; and here: &lt;a href="https://www.fromdual.com/migration-between-mysql-percona-server-and-mariadb"&gt;Migration between MySQL/Percona Server and MariaDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The downgrade process tends to be neglected because nobody really wants to do it. So we are in swampy territory here. Unforeseen situations can occur very easily and good preparation is essential.&lt;/p&gt;
&lt;p&gt;I can think of the following possible options for the downgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restore the backup that was made BEFORE the upgrade began.&lt;/li&gt;
&lt;li&gt;Binary inplace downgrade (which is NOT supported in many cases).&lt;/li&gt;
&lt;li&gt;Dump (&lt;code&gt;mariadb-dump&lt;/code&gt;/&lt;code&gt;mysqldump&lt;/code&gt;) of the upgraded database and restore (&lt;code&gt;mariadb&lt;/code&gt;/&lt;code&gt;mysql&lt;/code&gt;) to the old version (logical backup/restore).&lt;/li&gt;
&lt;li&gt;Master/slave replication (with Statement Based Replication (SBR) or Row Based Replication (RBR)) and fallback to the slave with the old version.&lt;/li&gt;
&lt;li&gt;Partial Backup/Restore with &lt;code&gt;mariadb-backup&lt;/code&gt;/&lt;code&gt;xtrabackup&lt;/code&gt; (Transportable Tablespace (TTS) method).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these options have their advantages and disadvantages and must be carefully tested in advance.&lt;/p&gt;
&lt;h2 id="downgrade-mariadb"&gt;Downgrade MariaDB&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mariadb.com/kb/en/downgrade-mariadb/" target="_blank"&gt;Downgrade MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mariadb.com/kb/en/downgrading-between-major-versions-of-mariadb/" target="_blank"&gt;Downgrading between Major Versions of MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;blockquote&gt;
&lt;p&gt;Downgrading MariaDB is not officially supported between major versions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;First sentence in &lt;a href="https://mariadb.com/kb/en/downgrading-between-major-versions-of-mariadb/"&gt;&lt;/a&gt;Downgrading between Major Versions of MariaDB by MariaDB Foundation.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;FromDual says: But it usually works. Downgrading from minor versions practically always works.&lt;/p&gt;
&lt;h3 id="physical-in-place-downgrade-not-possible"&gt;Physical (in-place) downgrade NOT possible:&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;From version&lt;/th&gt;
 &lt;th&gt;To version&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;11.0 or later&lt;/td&gt;
 &lt;td&gt;to 10.4 or earlier: NOT possible&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;11.0 or later&lt;/td&gt;
 &lt;td&gt;to 10.5 or later: Possible with restrictions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10.8 or later&lt;/td&gt;
 &lt;td&gt;unclear description&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10.5&lt;/td&gt;
 &lt;td&gt;to 10.4: With restrictions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10.5&lt;/td&gt;
 &lt;td&gt;to 10.3: With restrictions or problems&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10.3&lt;/td&gt;
 &lt;td&gt;to 10.2: With restrictions …&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description></item><item><title>FromDual Ops Center 1.2.2 for MariaDB and MySQL databases has been released</title><link>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.2-for-mariadb-mysql-and-compatible-databases-has-been-released/</link><pubDate>Mon, 29 Apr 2024 17:41:04 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.2-for-mariadb-mysql-and-compatible-databases-has-been-released/</guid><description>&lt;p&gt;FromDual is pleased to announce the release of the new version 1.2.2 of the popular FromDual Ops Center &lt;a href="https://www.fromdual.com/ops-center-general-information"&gt;focmm&lt;/a&gt;, a Graphical User Interface (GUI) for MariaDB, MySQL and compatible databases.&lt;/p&gt;
&lt;p&gt;The FromDual Ops Center for MariaDB and MySQL (focmm) helps DBAs and system administrators to better manage their MariaDB and MySQL databases and Galera Cluster farms. Ops Center makes life easier for DBAs and Admins!&lt;/p&gt;
&lt;p&gt;The main purpose of the Ops Center is to help you with your daily MariaDB and MySQL operations. More information about FromDual Ops Center can be found in the &lt;a href="https://www.fromdual.com/ops-center-general-information" title="General Information"&gt;General Information&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="download-now"&gt;Download now&lt;/h2&gt;
&lt;p&gt;The new FromDual Ops Center for MariaDB and MySQL (&lt;code&gt;focmm&lt;/code&gt;) can be downloaded from our &lt;a href="https://support.fromdual.com/admin/public/download.php?product_id=11" target="_blank" title="FromDual download"&gt;download page&lt;/a&gt;. How to install and use &lt;code&gt;focmm&lt;/code&gt; is documented in the &lt;a href="https://www.fromdual.com/ops-center-user-guide" title="Ops Center User Guide"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the unlikely event that you find a bug in the FromDual Ops Center for MariaDB and MySQL please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual bug tracker"&gt;bug tracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for focmm).&lt;/p&gt;
&lt;p&gt;Any feedback, comments and testimonials are also welcome! Please send them to [feedback@fromdual.com](mailto:feedback@fromdual.com?Subject=Feedback for focmm &amp;ldquo;Feedback for focmm&amp;rdquo;).&lt;/p&gt;
&lt;h2 id="installing-ops-center-122"&gt;Installing Ops Center 1.2.2&lt;/h2&gt;
&lt;p&gt;Information on how to install FromDual Ops Center can be found in the &lt;a href="https://www.fromdual.com/ops-center-installing-and-upgrading" title="Installing and Upgrading"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrading-from-09x-to-122"&gt;Upgrading from 0.9.x to 1.2.2&lt;/h2&gt;
&lt;p&gt;The upgrade from 0.9.x to 1.2.2 should be automatic. Please &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;make a backup&lt;/a&gt; of your Ops Center database instance before upgrading! See also &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;Upgrading&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; In some cases the directory &lt;code&gt;focmm/tmp/start_jobs.lock&lt;/code&gt; is missing. In this case jobs will not start. Please check the log file under &lt;code&gt;focmm/log/start_jobs.log&lt;/code&gt; and create the folder accordingly. There should also be a file called &lt;code&gt;pid&lt;/code&gt; in this folder. Create this file if it does not exist.&lt;/p&gt;
&lt;h2 id="downgrading-from-122"&gt;Downgrading from 1.2.2&lt;/h2&gt;
&lt;p&gt;Downgrading from 1.2.2 to 1.2.1 should work.&lt;/p&gt;
&lt;h2 id="changes-in-ops-center-122"&gt;Changes in Ops Center 1.2.2&lt;/h2&gt;
&lt;h3 id="machine"&gt;Machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Machine information is automatically gathered after first successful check now.&lt;/li&gt;
&lt;li&gt;Machine function calls optimized.&lt;/li&gt;
&lt;li&gt;Ssh key check added for machine. …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Ops Center Release Notes</title><link>https://www.fromdual.com/blog/ops-center-release-notes/</link><pubDate>Mon, 29 Apr 2024 16:42:39 +0200</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/ops-center-release-notes/</guid><description>&lt;ul&gt;
&lt;li&gt;Ops Center 1.2.2 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.2-for-mariadb-mysql-and-compatible-databases-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 25 April 2024&lt;/li&gt;
&lt;li&gt;Ops Center 1.2.1 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.1-for-mariadb-mysql-and-compatible-databases-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 7 Februray 2023&lt;/li&gt;
&lt;li&gt;Ops Center 1.2.0 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.0-for-mariadb-mysql-and-compatible-databases-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 17 January 2023&lt;/li&gt;
&lt;li&gt;Ops Center 1.1.0 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.1.0-for-mariadb-mysql-and-compatible-databases-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 7 May 2021&lt;/li&gt;
&lt;li&gt;Ops Center 1.0.0 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.0.0-for-mariadb-mysql-and-compatible-databases-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 7 May 2020&lt;/li&gt;
&lt;li&gt;Ops Center 0.9.3 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-for-mariadb-and-mysql-0.9.3-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 18 February 2020&lt;/li&gt;
&lt;li&gt;Ops Center 0.9.2 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-for-mariadb-and-mysql-0.9.2-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 13 August 2019&lt;/li&gt;
&lt;li&gt;Ops Center 0.9.1 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-for-mariadb-and-mysql-0.9.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 7 May 2019&lt;/li&gt;
&lt;li&gt;Ops Center 0.9.0 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-for-mariadb-and-mysql-0.9-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 16 April 2019&lt;/li&gt;
&lt;li&gt;Ops Center 0.3.0 &lt;a href="https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-for-mariadb-and-mysql-0.3-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 13 January 2016&lt;/li&gt;
&lt;li&gt;Ops Center 0.2.0 Release Notes, Release Date: 29 May 2014&lt;/li&gt;
&lt;li&gt;Ops Center 0.1.0 Release Notes, Release Date: 02 January 2014&lt;/li&gt;
&lt;li&gt;Ops Center 0.0.1 Release Notes, Release Date: 01 January 2014&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>dbstat for MariaDB after one month of productive use</title><link>https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/</link><pubDate>Fri, 26 Apr 2024 14:13:55 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#retrospect"&gt;Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#one-month-later"&gt;One month later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#table-size"&gt;Size of the tables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#processlist"&gt;Process list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#global-variables"&gt;Global variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#locking"&gt;Metadata Lock and InnoDB Transaction Lock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-after-one-month-of-productive-use/#global-status"&gt;Global status&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="review"&gt;Review&lt;/h2&gt;
&lt;p&gt;After we introduced &lt;a href="https://www.fromdual.com/dbstat-for-mariadb-and-mysql"&gt;&lt;code&gt;dbstat&lt;/code&gt; for MariaDB (and MySQL)&lt;/a&gt; a good 5 weeks ago, we naturally also rolled it out on our systems to test the behaviour in daily use (&lt;a href="https://en.wikipedia.org/wiki/Eating_your_own_dog_food" target="_blank" title="Eating your own dog food auf Wikipedia"&gt;eat your own dog food&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This went quite well until we came up with the idea of activating &lt;code&gt;dbstat&lt;/code&gt; on the passive &lt;code&gt;dbstat&lt;/code&gt; node on our MariaDB active/passive master/master replication cluster (a similar situation would also occur with a Galera cluster). We realised that the design of &lt;code&gt;dbstat&lt;/code&gt; still had potential. After this problem was fixed (v0.0.2 and v0.0.3) and the problem of how to activate events on master AND slave was solved (&lt;a href="https://jira.mariadb.org/browse/MDEV-33782" target="_blank"&gt;MDEV-33782: Event is always disabled on slave&lt;/a&gt;), everything seemed fine at first glance. Unfortunately, we did not realise that the data also had to be adjusted. As a result, our replication came to a complete stop over the Easter holidays, which then led to another problem when catching up (&lt;a href="https://jira.mariadb.org/browse/MDEV-33923" target="_blank"&gt;MDEV-33923: MariaDB parallel replication causes Foreign Key errors&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After this minor incident was also resolved, &lt;code&gt;dbstat&lt;/code&gt; has been running flawlessly on our MariaDB master/master replication cluster ever since&amp;hellip; The product &lt;code&gt;dbstat&lt;/code&gt; is open source (GPLv2) and can be &lt;a href="https://github.com/FromDual/dbstat" target="_blank" title="dbstat on GitHub"&gt;downloaded from GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="one-month-later"&gt;One month later&lt;/h2&gt;
&lt;p&gt;Databases should NOT grow over time but only over the number of {customers, products, etc.} once the desired equilibrium (&lt;a href="https://www.merriam-webster.com/dictionary/steady state" target="_blank"&gt;steady state&lt;/a&gt;) is reached. In our &lt;code&gt;dbstat&lt;/code&gt; installation, we have set this equilibrium state to 30 days. So it is now time that the size of &lt;code&gt;dbstat&lt;/code&gt; stabilises and the database stops growing&amp;hellip;&lt;/p&gt;
&lt;p&gt;It would also be interesting to understand what practical use &lt;code&gt;dbstat&lt;/code&gt; has. That is why we have now set to work and are trying to analyse the results of &lt;code&gt;dbstat&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here is an overview of the 11 current running database events:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SELECT db, name, definer, CONCAT(interval_value, ' ', interval_field) AS 'interval'
 , last_executed, ends, status
 FROM mysql.event
 ORDER BY db, name ASC …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>MariaDB's parallel replication to catch up</title><link>https://www.fromdual.com/blog/mariadbs-parallel-replication-to-catch-up/</link><pubDate>Tue, 09 Apr 2024 10:53:32 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/mariadbs-parallel-replication-to-catch-up/</guid><description>&lt;p&gt;Due to an application error, our replication stopped for 5 days (over Easter). After the problem was solved, the replication was supposed to catch up, which turned out to be very slow. All the usual tricks (&lt;code&gt;innodb_flush_log_at_trx_commit&lt;/code&gt;, &lt;code&gt;sync_binlog&lt;/code&gt;, etc.) had already been exhausted. So we tried our hand at parallel replication of the MariaDB server.&lt;/p&gt;
&lt;p&gt;Parallel replication is deactivated by default:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SHOW GLOBAL VARIABLES LIKE '%parallel%';
+-------------------------------+------------+
| Variable_name | Value |
+-------------------------------+------------+
| slave_domain_parallel_threads | 0 |
| slave_parallel_max_queued | 131072 |
| slave_parallel_mode | optimistic |
| slave_parallel_threads | 0 |
| slave_parallel_workers | 0 |
+-------------------------------+------------+
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Parallel replication is activated by setting the server variables &lt;code&gt;slave_parallel_threads&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SET GLOBAL slave_parallel_threads = 8;
ERROR 1198 (HY000): This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, this must be done when replication is stopped:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; STOP SLAVE;
SQL&amp;gt; SET GLOBAL slave_parallel_threads = 8;
SQL&amp;gt; START SLAVE;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replication then caught up a little faster. However, as we were impatient, we tried to make it even faster. With the command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SHOW SLAVE STATUS&amp;lt;br&amp;gt;G
...
Slave_SQL_Running_State: Waiting for room in worker thread event queue
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;we found the following message. You would also see it using the &lt;code&gt;SHOW PROCESSLIST&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SHOW PROCESSLIST;
+--------+-------------+- ... -+-----------+------+-----------------------------------------------+- ... -+
| Id | User | ... | Command | Time | State | ... |
+--------+-------------+- ... -+-----------+------+-----------------------------------------------+- ... -+
... ... …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Building MariaDB Server from the sources</title><link>https://www.fromdual.com/blog/building-mariadb-server-from-the-sources/</link><pubDate>Fri, 05 Apr 2024 08:47:13 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/building-mariadb-server-from-the-sources/</guid><description>&lt;p&gt;Recently I had to test a new MariaDB feature that was developed at our request (&lt;a href="https://jira.mariadb.org/browse/MDEV-33782" target="_blank"&gt;MDEV-33782&lt;/a&gt;). To test this feature I had to build the MariaDB server myself from source, which I have not done for a long time. So a new challenge, especially with &lt;code&gt;CMake&lt;/code&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;I followed the MariaDB documentation &lt;a href="https://mariadb.com/kb/en/get-build-and-test-latest-mariadb-the-lazy-way/" target="_blank"&gt;Get, Build and Test Latest MariaDB the Lazy Way&lt;/a&gt; to build the server.&lt;/p&gt;
&lt;p&gt;On Ubuntu 22.04 it did not work for me, for reasons unknown to me. So I cloned an Ubuntu 23.04 (Lunar Lobster) LXC container and built the MariaDB server in it.&lt;/p&gt;
&lt;p&gt;To make the whole thing work, however, the package sources had to be added to the file &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; in the container first:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb-src http://de.archive.ubuntu.com/ubuntu lunar main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu lunar-updates main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu lunar-security main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu lunar-backports main restricted universe multiverse
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we proceeded according to the instructions:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; apt install build-essential bison
shell&amp;gt; apt build-dep mariadb-server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The corresponding branch was cloned:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; # git clone https://github.com/andremralves/server.git mariadb-MDEV-33782
shell&amp;gt; # git branch --all
shell&amp;gt; git clone --branch MDEV-33782 --single-branch https://github.com/andremralves/server.git mariadb-MDEV-33782
shell&amp;gt; cd mariadb-MDEV-33782
shell&amp;gt; # git checkout 11.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then the server was build. This took about 20 minutes on my old machine. &lt;code&gt;CMake&lt;/code&gt; still ran into an error, which was solved by installing the corresponding package (&lt;a href="https://jira.mariadb.org/browse/MDEV-33815" target="_blank"&gt;MDEV-33815&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; apt install libgnutls28-dev
shell&amp;gt; cmake . -DBUILD_CONFIG=mysql_release &amp;amp;&amp;amp; make -j8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The tests were executed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; cd mysql-test
shell&amp;gt; ./mtr rpl.rpl_create_drop_event
Logging: ./mtr rpl.rpl_create_drop_event
VS config:
vardir: /root/mariadb-MDEV-33782/mysql-test/var
Checking leftover processes...
Removing old var directory...
Creating var …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>MaxScale configuration synchronisation</title><link>https://www.fromdual.com/blog/maxscale-configurations-synchronisation/</link><pubDate>Thu, 04 Apr 2024 09:53:46 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/maxscale-configurations-synchronisation/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#preparations"&gt;Preparations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#activate-configuration-synchronization"&gt;Activate MaxScale configuration synchronisation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#change-parameter"&gt;Change MaxScale parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#add-new-slave"&gt;Add new slave and make MaxScale known&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#remove-old-slave"&gt;Remove old slave and make MaxScale known&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#how-is-configuration-synchronized"&gt;How is the configuration synchronised?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#what-happens-on-conflict"&gt;What happens in the event of a conflict?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#tests"&gt;Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#deactivate-configuration-synchronization"&gt;Deactivating MaxScale configuration synchronisation again&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/maxscale-configurations-synchronisation/#literature"&gt;Literature/sources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A feature that I recently discovered while browsing is the MaxScale configuration synchronisation functionality.&lt;/p&gt;
&lt;p&gt;This is not primarily about a MariaDB replication cluster or a MariaDB Galera cluster, but about a cluster consisting of two or more MaxScale nodes. Or more precisely, the exchange of the configuration between these MaxScale nodes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.fromdual.com/sites/default/files/maxscale_config_sync.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Pon Suresh Pandian has already written a &lt;a href="https://mariadb.com/resources/blog/mariadb-maxscale-6-0-native-clustering/" target="_blank"&gt;blog article&lt;/a&gt; about this feature in 2022, which is even more detailed than this post here.&lt;/p&gt;
&lt;h2 id="preparations"&gt;Preparations&lt;/h2&gt;
&lt;p&gt;An &lt;a href="https://linuxcontainers.org/incus/" target="_blank"&gt;Incus container&lt;/a&gt; environment was prepared, consisting of 3 database containers (deb12-n1 (10.139.158.33), deb12-n2 (10.139.158.178), deb12-n3 (10.139.158.39)) and 2 MaxScale containers (deb12-mxs1 (10.139.158.66), deb12-mxs2 (10.139.158.174)). The database version is a MariaDB 10.11.6 from the Debian repository and MaxScale was &lt;a href="https://mariadb.com/downloads/community/maxscale/" target="_blank"&gt;downloaded&lt;/a&gt; in version 22.08.5 from the MariaDB plc website.&lt;/p&gt;
&lt;p&gt;The database configuration looks similar for all 3 nodes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#
# /etc/mysql/mariadb.conf.d/99-fromdual.cnf
#

[server]

server_id = 1
log_bin = deb12-n1-binlog
binlog_format = row
bind_address = *
proxy_protocol_networks = ::1, 10.139.158.0/24, localhost
gtid_strict_mode = on
log_slave_updates = on
skip_name_resolve = on
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The MaxScale nodes were built as described in the article &lt;a href="https://www.fromdual.com/sharding-with-mariadb-maxscale"&gt;Sharding with MariaDB MaxScale&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;maxscale_admin&lt;/code&gt; user has exactly the same rights as described there, the &lt;code&gt;maxscale_monitor&lt;/code&gt; user has the following rights:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RELOAD, SUPER, REPLICATION SLAVE, READ_ONLY ADMIN
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See also here: &lt;a href="https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-monitor/#required-grants" target="_blank"&gt;Required Grants&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The MaxScale start configuration looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#
# /etc/maxscale.cnf
#

[maxscale]
threads …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Sharding with MariaDB MaxScale</title><link>https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/</link><pubDate>Tue, 19 Mar 2024 17:02:58 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#preparation"&gt;Preparation of the shards (MariaDB database instances)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#creating-test-data"&gt;Create test data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#creating-roles-and-users"&gt;Creating roles and users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#maxscale-monitor-user"&gt;MaxScale Monitor User&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#mascale-admin-user"&gt;MaxScale Admin User&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#create-application-role-and-accounts"&gt;Create application role and accounts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#proxy-protocol"&gt;Proxy protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#maxscale-schema-router-configuration"&gt;MaxScale SchemaRouter configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#starting-and-stopping-maxscale"&gt;Starting and stopping the MaxScale Load Balancer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#application-tests"&gt;Application tests&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#simple-applicationt-test"&gt;Simple application tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#new-command-show-shards"&gt;New command show shards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#general-tests"&gt;More general test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#less-simple-tests"&gt;Less simple tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#more-complex-application-tests"&gt;More complex application tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#cross-shard-tests"&gt;Cross-shard tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#operation-of-a-sharding-system"&gt;Operation of a MaxScale sharding system&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#do-on-all-shards"&gt;Do-on-all-shards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#invalidate-database-map-cache"&gt;Invalidating the database map cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#changing-schema-router-variables-dynamically"&gt;How to change SchemaRouter variables dynamically?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#adding-and-removing-a-tenant"&gt;Adding and removing a tenant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#moving-a-tenant"&gt;Moving a tenant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#adding-or-removing-a-shard"&gt;Adding or removing a shard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#adapting-configuration-files"&gt;Customising the configuration files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#maintenance-work-on-a-shard"&gt;Maintenance work on the shard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#observation-of-a-sharding-system"&gt;Observation / monitoring of a MariaDB MaxScale sharding system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/sharding-with-mariadb-maxscale/#literature"&gt;Literature / Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;This feature should more or less work with MariaDB MaxScale 6.x.y, 22.08.x, 23.02.x, 23.08.x and 24.02.x. We have tested it with the latest MaxScale version 23.08.05, as we encountered problems with an older version (&lt;a href="https://jira.mariadb.org/browse/MXS-5026" target="_blank"&gt;MXS-5026&lt;/a&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; maxscale --version
MaxScale 23.08.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We used MariaDB 10.11 as the database backend (shards).&lt;/p&gt;
&lt;p&gt;Less than approx. 2% of all MariaDB installations known to us are what we technically understand by multi-tenant systems (each customer in its own database (also called a schema)).&lt;/p&gt;
&lt;p&gt;This MariaDB MaxScale feature is therefore used relatively rarely and there is an increased risk of encountering bugs that no-one has come across before!&lt;/p&gt;
&lt;p&gt;This feature is called &lt;a href="https://mariadb.com/kb/en/mariadb-maxscale-2308-schemarouter/" target="_blank"&gt;SchemaRouter&lt;/a&gt; at MariadDB MaxScale and is still declared as beta quality (&lt;a href="https://jira.mariadb.org/browse/MXS-5025" target="_blank"&gt;MXS-5025&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;maxctrl&amp;gt; show module schemarouter
┌─────────────┬────────────────────────────────────────────────┐
│ Module │ schemarouter │
├─────────────┼────────────────────────────────────────────────┤
│ Type │ Router │
├─────────────┼────────────────────────────────────────────────┤
│ Version │ V1.0.0 │ …&lt;/code&gt;&lt;/pre&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>dbstat for MariaDB (and MySQL)</title><link>https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/</link><pubDate>Thu, 14 Mar 2024 15:36:57 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#features"&gt;Functionality of &lt;code&gt;dbstat&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#how-does-dbstat-work"&gt;How does &lt;code&gt;dbstat&lt;/code&gt; work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#installation"&gt;How to install &lt;code&gt;dbstat&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#queries"&gt;Query &lt;code&gt;dbstat&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#table_size"&gt;&lt;code&gt;table_size&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#processlist"&gt;&lt;code&gt;processlist&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#trx_and_lck"&gt;&lt;code&gt;trx_and_lck&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#metadata_lock"&gt;&lt;code&gt;metadata_lock&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#global_variables"&gt;&lt;code&gt;global_variables&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#global_status"&gt;&lt;code&gt;global_status&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#testing"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/dbstat-for-mariadb-and-mysql/#sources"&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An idea that I have been thinking about for a long time and have now, thanks to a customer, finally tackled is &lt;code&gt;dbstat&lt;/code&gt; for MariaDB/MySQL. The idea is based on &lt;code&gt;sar/sysstat&lt;/code&gt; by Sebastien Godard:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sar - Collect, report, or save system activity information.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and &lt;a href="https://docs.oracle.com/cd/A97385_01/server.920/a96533/statspac.htm" target="_blank"&gt;Oracle Statspack&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Statspack is a performance tuning tool &amp;hellip; to quickly gather detailed analysis of the performance of that database instance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="functionality-of-dbstat"&gt;Functionality of &lt;code&gt;dbstat&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Although we have had the performance schema for some time, it does not cover some points that we see as a problem in practice and that are requested by customers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;table_size&lt;/code&gt; module collects data on the growth of tables. This allows statements to be made about the growth of individual tables, databases, future &lt;a href="https://mariadb.com/kb/en/catalogs/" target="_blank"&gt;MariaDB Catalogs&lt;/a&gt; or the entire instance. This is interesting for users who are using multi-tenant systems or are otherwise struggling with uncontrolled growth.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;processlist&lt;/code&gt; module takes a snapshot of the process list at regular intervals and saves it. This information is useful for post-mortem analyses if the user was too slow to save his process list or to understand how a problem has built up.&lt;/li&gt;
&lt;li&gt;The problem is often caused by long-running transactions, row locks or metadata locks. These are recorded and saved by the &lt;code&gt;trx_and_lck&lt;/code&gt; and &lt;code&gt;metadata_lock&lt;/code&gt; modules. This means that we can see problems that we did not even notice before or we can see what led to the problem after the accident (analogous to a tachograph in a vehicle).&lt;/li&gt;
&lt;li&gt;Another question that we sometimes encounter in practice is: When was which database variable changed and what did it look like before? This is covered by the &lt;code&gt;global_variables&lt;/code&gt; module. Unfortunately, it is not possible to find out who changed the variable or why. Operational processes are required for this.&lt;/li&gt;
&lt;li&gt;The last module, &lt;code&gt;global_status&lt;/code&gt;, actually covers what …&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>MyEnv Release Notes</title><link>https://www.fromdual.com/blog/myenv-release-notes/</link><pubDate>Wed, 28 Feb 2024 16:51:26 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/myenv-release-notes/</guid><description>&lt;ul&gt;
&lt;li&gt;MyEnv 3.0.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/fromdual-environment-myenv-3.0.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 23 March 2026&lt;/li&gt;
&lt;li&gt;MyEnv 2.1.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/fromdual-environment-myenv-2.1.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 12 December 2025&lt;/li&gt;
&lt;li&gt;MyEnv 2.1.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/fromdual-environment-myenv-2.1.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 28 February 2024&lt;/li&gt;
&lt;li&gt;MyEnv 2.0.3 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mariadb-mysql-environment-myenv-2.0.3-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 2 July 2021&lt;/li&gt;
&lt;li&gt;MyEnv 2.0.2 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mariadb-mysql-environment-myenv-2.0.2-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 17 January 2019&lt;/li&gt;
&lt;li&gt;MyEnv 2.0.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mariadb-mysql-environment-myenv-2.0.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 3 October 2018&lt;/li&gt;
&lt;li&gt;MyEnv 2.0.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mariadb-mysql-environment-myenv-2.0.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 15 March 2018&lt;/li&gt;
&lt;li&gt;MyEnv 1.3.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.3.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 3 August 2016&lt;/li&gt;
&lt;li&gt;MyEnv 1.3.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.3.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 31 January 2016&lt;/li&gt;
&lt;li&gt;MyEnv 1.2.2 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.2.2-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 12 October 2015&lt;/li&gt;
&lt;li&gt;MyEnv 1.2.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.2.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 27 July 2015&lt;/li&gt;
&lt;li&gt;MyEnv 1.2.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.2.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 18 April 2015&lt;/li&gt;
&lt;li&gt;MyEnv 1.1.4 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.1.4-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 11 February 2015&lt;/li&gt;
&lt;li&gt;MyEnv 1.1.3 Release Notes: Skipped, see v1.1.4, Release Date: 30 January 2015&lt;/li&gt;
&lt;li&gt;MyEnv 1.1.2 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.1.2-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 23 October 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.1.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.1.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 8 September 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.1.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.1.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 23 August 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.0.5 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0.5-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 13 June 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.0.4 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0.4-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 29 April 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.0.3 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0.3-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 25 April 2014&lt;/li&gt;
&lt;li&gt;MyEnv 1.0.2 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0.2-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 11 December 2013&lt;/li&gt;
&lt;li&gt;MyEnv 1.0.1 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0.1-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 5 November 2013&lt;/li&gt;
&lt;li&gt;MyEnv 1.0 &lt;a href="https://www.fromdual.com/blog/myenv-release-notes/mysql-environment-myenv-1.0-has-been-released/"&gt;Release Notes&lt;/a&gt;, Release Date: 4 October 2013&lt;/li&gt;
&lt;li&gt;MyEnv 0.4 Release notes: none, Release Date: 30 March 2011&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.6 Release notes: none, Release Date: 23 January 2011&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.5 Release notes: none, Release Date: 22 January 2011&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.4 Release notes: none, Release Date: 21 November 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.3 Release notes: none, Release Date: 21 November 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.2 Release notes: none, Release Date: 14 November 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.3.1 Release notes: none, Release Date: 14 November 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.3 Release notes: none, Release Date: 13 November 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.2.7 Release notes: none, Release Date: 12 August 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.2.6 Release notes: none, Release Date: 12 August 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.2.5 Release notes: none, Release Date: 12 August 2010&lt;/li&gt;
&lt;li&gt;MyEnv 0.2.4 Release notes: none, Release …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>We build a data warehouse from the General Query Log</title><link>https://www.fromdual.com/blog/we-build-a-data-warehouse-from-the-general-query-log/</link><pubDate>Wed, 31 Jan 2024 16:41:13 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/we-build-a-data-warehouse-from-the-general-query-log/</guid><description>&lt;p&gt;The design of a data warehouse differs from relational design. Data warehouses are often designed according to the concept of the &lt;a href="https://en.wikipedia.org/wiki/Star_schema" target="_blank" title="Star Schema on Wikipedia"&gt;star schema&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When building a data warehouse, you usually put the cart before the horse:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What questions should my data warehouse be able to answer?&lt;/li&gt;
&lt;li&gt;How do I have to design my model so that my questions can be answered easily?&lt;/li&gt;
&lt;li&gt;Where do I get the data to populate the model?&lt;/li&gt;
&lt;li&gt;How do I fill my model with the data?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For training purposes, we have investigated an issue that arises from time to time with our support team: The system suddenly and unexpectedly starts to behave unusually, nobody has done anything and nobody knows why. Example with a customer last week: The system starts to become unstable at 3 pm, is then restarted hard and then stabilises again from 4 pm&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.fromdual.com/sites/default/files/gql_sudden_stop.png" alt="graph"&gt;&lt;/p&gt;
&lt;p&gt;The easiest thing to do in such a case would be to quickly look at the database with the &lt;code&gt;SHOW PROCESSLIST&lt;/code&gt; command and then it often becomes immediately clear where the problem lies. But customers often forget this or they are not fast enough. The General Query Log was already switched on for this customer, so this would be a great case for our General Query Log Data Warehouse!&lt;/p&gt;
&lt;h2 id="what-questions-should-my-data-warehouse-be-able-to-answer"&gt;What questions should my data warehouse be able to answer?&lt;/h2&gt;
&lt;p&gt;The generic question for this problem should be something like: &amp;ldquo;Who or what caused my system to behave abnormally?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In technical terms, the question would be something like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who: Which user or account was on the database with how many connections at the time in question? What was unusual about it?&lt;/li&gt;
&lt;li&gt;What: Which queries were running in which schema on the system at the time in question? Which of these queries were unusual?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-should-my-model-look-like"&gt;What should my model look like?&lt;/h2&gt;
&lt;p&gt;We can already derive some facts and dimensions from the question:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User or account (user + host)&lt;/li&gt;
&lt;li&gt;Time&lt;/li&gt;
&lt;li&gt;Connections&lt;/li&gt;
&lt;li&gt;Schema&lt;/li&gt;
&lt;li&gt;Queries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And this also results in 4 dimensions and the fact table:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.fromdual.com/sites/default/files/gql_model.png" alt="model"&gt;&lt;/p&gt;
&lt;h2 id="data-source"&gt;Data source&lt;/h2&gt;
&lt;p&gt;Where the data comes from is relatively easy to answer in this case: The customer provides his General Query Logs or you can …&lt;/p&gt;</description></item><item><title>FromDual Performance Monitor for MariaDB 2.1.0 has been released</title><link>https://www.fromdual.com/blog/fpmmm-release-notes/fromdual-performance-monitor-for-mariadb-2.1.0-has-been-released/</link><pubDate>Sat, 09 Dec 2023 18:27:02 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/fpmmm-release-notes/fromdual-performance-monitor-for-mariadb-2.1.0-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 2.1.0 of its popular Database Performance Monitor for MariaDB and Galera Cluster &lt;a href="https://www.fromdual.com/fpmmm-installation-guide"&gt;&lt;code&gt;fpmmm&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The FromDual Performance Monitor for MariaDB (&lt;code&gt;fpmmm&lt;/code&gt;) enables DBAs and System Administrators to monitor and understand what is going on inside their MariaDB database instances and on the machines where the databases reside.&lt;/p&gt;
&lt;p&gt;More detailed information you can find in the &lt;a href="https://www.fromdual.com/fpmmm-installation-guide" title="fpmmm Installation Guide"&gt;fpmmm Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="download"&gt;Download&lt;/h2&gt;
&lt;p&gt;The new FromDual Performance Monitor for MariaDB (&lt;code&gt;fpmmm&lt;/code&gt;) can be downloaded from &lt;a href="https://www.fromdual.com/download" title="FromDual download"&gt;here&lt;/a&gt; or you can use our &lt;a href="https://www.fromdual.com/repositories/" title="FromDual repositories"&gt;FromDual repositories&lt;/a&gt;. How to install and use &lt;code&gt;fpmmm&lt;/code&gt; is documented in the &lt;a href="https://www.fromdual.com/fpmmm-installation-guide" title="fpmmm installation guide"&gt;fpmmm Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Performance Monitor for MariaDB please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual Bug-tracker"&gt;Bug-tracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for fpmmm).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them [to us](mailto:feedback@fromdual.com?Subject=Feedback for fpmmm &amp;ldquo;Feedback for fpmmm&amp;rdquo;).&lt;/p&gt;
&lt;h2 id="monitoring-as-a-service-maas"&gt;Monitoring as a Service (MaaS)&lt;/h2&gt;
&lt;p&gt;You do not want to set-up your Database monitoring yourself? No problem: Choose our MariaDB &lt;a href="https://www.fromdual.com/monitoring-as-a-service-maas" title="Monitoring as a Service (MaaS) for MariaDB"&gt;Monitoring as a Service&lt;/a&gt; (Maas) program to safe time and costs!&lt;/p&gt;
&lt;h2 id="installation-of-performance-monitor-210"&gt;Installation of Performance Monitor 2.1.0&lt;/h2&gt;
&lt;p&gt;A complete guide on how to install FromDual Performance Monitor you can find in the &lt;a href="https://www.fromdual.com/fpmmm-installation-guide" title="fpmmm Installation Guide"&gt;fpmmm Installation Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-of-fpmmm-tarball-from-1x-to-210"&gt;Upgrade of fpmmm tarball from 1.x to 2.1.0&lt;/h2&gt;
&lt;p&gt;There are some changes in the configuration file (&lt;code&gt;fpmmm.conf&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The access rights should be change as follows: &lt;code&gt;chmod 600 /etc/fpmmm.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The key &lt;code&gt;Methode&lt;/code&gt; was spelled wrong in the configuration file. It was renamed to &lt;code&gt;Method&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The key &lt;code&gt;PidFile&lt;/code&gt; is ambiguous which could lead to problems and bugs. Thus it was changed to either &lt;code&gt;MyPidFile&lt;/code&gt; for fpmmm and &lt;code&gt;DbPidFile&lt;/code&gt; for the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrade with DEB/RPM packages should happen automatically. For tarballs follow this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;shell&amp;gt; cd /opt
shell&amp;gt; tar xf /download/fpmmm-2.1.0.tar.gz
shell&amp;gt; rm -f fpmmm
shell&amp;gt; ln -s fpmmm-2.1.0 fpmmm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="changes-in-fromdual-performance-monitor-for-mariadb-210"&gt;Changes in …&lt;/h2&gt;</description></item><item><title>InnoDB Deadlock on SELECT? Not possible! Or Is It?</title><link>https://www.fromdual.com/blog/innodb-deadlock-on-select-not-possible-or-is-it/</link><pubDate>Sat, 25 Nov 2023 16:58:41 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/innodb-deadlock-on-select-not-possible-or-is-it/</guid><description>&lt;p&gt;Translated by &lt;a href="https://www.deepl.com/en/translator" target="_blank"&gt;deepl.com&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Two points in advance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;A deadlock is a state in which two different transactions are no longer able to continue working because each transaction holds a lock that the other transaction would need. Because both transactions are now waiting for the other transaction to release their locks, neither transaction will release their respective locks. And that would last forever. To avoid this, the MariaDB instance intervenes and kills the transaction that has done less work. The application then receives a deadlock error message of this type:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A general mantra in the MariaDB ecosystem is that a &lt;code&gt;SELECT&lt;/code&gt; does not cause locks (exception: &lt;code&gt;FOR UPDATE&lt;/code&gt; or &lt;code&gt;LOCK IN SHARE MODE&lt;/code&gt;) and therefore cannot be part of a deadlock.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;A long-standing customer comes to the FromDual remote DBA team with a request to explain a deadlock situation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hello FromDual Team,
I need your expertise on the subject of deadlocks.
When would it suit you?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The situation is as follows: Transaction 1 consists of a simple &lt;code&gt;INSERT&lt;/code&gt;. Transaction 2 consists of a &lt;code&gt;SELECT&lt;/code&gt;. This should NOT actually cause a deadlock!&lt;/p&gt;
&lt;p&gt;We first check the following points&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are all tables affected by these queries properly indexed? Yes, they are. The queries are all running perfectly!&lt;/li&gt;
&lt;li&gt;Is the &lt;code&gt;SELECT&lt;/code&gt; query possibly part of a larger transaction (NOT an auto-commit transaction) and therefore not the actual cause of the deadlock? No, it is not. They are auto-commit transactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What now? What else needs to be said for clarification: The &lt;code&gt;SELECT&lt;/code&gt; is sent with a very high cadence, i.e. approx. every 5 ms!&lt;/p&gt;
&lt;p&gt;It is clear that the &lt;code&gt;INSERT&lt;/code&gt; generates locks. It is also displayed. But why does the &lt;code&gt;SELECT&lt;/code&gt; command generate locks? These are also displayed!&lt;/p&gt;
&lt;p&gt;So we try to break the problem down into individual steps.&lt;/p&gt;
&lt;h2 id="the-approach"&gt;The approach&lt;/h2&gt;
&lt;p&gt;The query looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SET @id = (SELECT id FROM test WHERE id = 3);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If we pack this query into an explicit transaction, we can even see …&lt;/p&gt;</description></item><item><title>Ops Center File Transfer Tool</title><link>https://www.fromdual.com/blog/ops-center-tools-file-transfer/</link><pubDate>Thu, 16 Mar 2023 15:47:34 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/ops-center-tools-file-transfer/</guid><description/></item><item><title>Upgrading MariaDB to the pre-latest minor release</title><link>https://www.fromdual.com/blog/upgrading-mariadb-to-the-pre-latest-minor-release/</link><pubDate>Wed, 08 Feb 2023 13:45:30 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/upgrading-mariadb-to-the-pre-latest-minor-release/</guid><description>&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; MariaDB Community Server is release every 3 months. The exact date is not known but it is typically about 2 to 3 weeks after the &lt;a href="https://www.fromdual.com/security#oracle-critical-patch-update-advisory-for-mysql" target="_blank"&gt;MySQL/Oracle CPU&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We upgrade regularly customer systems, also their MariaDB Galera Cluster systems. Because we made in the past some very bad experience upgrading production MariaDB Galera Clusters short after release date we became a bit more careful. Our new policy is: We wait a few weeks before installing a new release.&lt;/p&gt;
&lt;p&gt;This week we had the situation that on Monday a new MariaDB release came out and on Wednesday we had to do the Cluster upgrade. So only 2 days in between. Too short time for my taste. But we did not want to omit the upgrade because it was already more than 6 months since the last upgrade&amp;hellip;&lt;/p&gt;
&lt;p&gt;So we decided to install the pre-latest MariaDB release. Technically it means: Customer was on 10.6.9, 10.6.12 is out (and already available in the repositories) but we want to upgrade to 10.6.11. Additionally we also wanted to upgrade the O/S (Debian 11). So how to do this quite complex task? In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set all MariaDB related packages to hold.&lt;/li&gt;
&lt;li&gt;Upgrade all other packages including a reboot of the machine.&lt;/li&gt;
&lt;li&gt;Unhold all MariaDB related packages.&lt;/li&gt;
&lt;li&gt;Install specific MariaDB packages which are not the newest one.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="set-mariadb-related-packages-to-hold"&gt;Set MariaDB related packages to hold&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;dpkg -l | grep mariadb
ii libdbd-mariadb-perl 1.21-3 amd64 Perl5 database interface to the MariaDB/MySQL databases
ii libmariadb3:amd64 1:10.6.9+maria~deb11 amd64 MariaDB database client library
ii libmariadb3-compat 1:10.6.9+maria~deb11 amd64 MariaDB database client library MySQL compat package
ii libmariadbclient18 1:10.6.9+maria~deb11 amd64 Virtual package to satisfy external libmariadbclient18 depends
ii mariadb-client-10.6 1:10.6.9+maria~deb11 amd64 MariaDB database client binaries
ii mariadb-client-core-10.6 1:10.6.9+maria~deb11 amd64 MariaDB database core client …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>FromDual Ops Center 1.2.1 for MariaDB, MySQL and compatible databases has been released</title><link>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.1-for-mariadb-mysql-and-compatible-databases-has-been-released/</link><pubDate>Tue, 07 Feb 2023 17:08:38 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.1-for-mariadb-mysql-and-compatible-databases-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 1.2.1 of its popular FromDual Ops Center &lt;a href="https://www.fromdual.com/ops-center-general-information"&gt;focmm&lt;/a&gt;, a Graphical User Interface (GUI) for MariaDB, MySQL and compatible databases.&lt;/p&gt;
&lt;p&gt;The FromDual Ops Center for MariaDB and MySQL (focmm) helps DBA&amp;rsquo;s and System Administrators to better manage their MariaDB and MySQL databases and Galera Cluster farms. Ops Center makes DBA and Admins life easier!&lt;/p&gt;
&lt;p&gt;The main task of Ops Center is to support you in your daily MariaDB and MySQL operation tasks. More information about FromDual Ops Center you can find under &lt;a href="https://www.fromdual.com/ops-center-general-information" title="General Information"&gt;General Information&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="download"&gt;Download&lt;/h2&gt;
&lt;p&gt;The new FromDual Ops Center for MariaDB and MySQL (&lt;code&gt;focmm&lt;/code&gt;) can be downloaded from our &lt;a href="https://support.fromdual.com/admin/public/download.php?product_id=11" target="_blank" title="FromDual download"&gt;download site&lt;/a&gt;. How to install and use &lt;code&gt;focmm&lt;/code&gt; is documented in the &lt;a href="https://www.fromdual.com/ops-center-user-guide" title="Ops Center User Guide"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Ops Center for MariaDB and MySQL please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual bug tracker"&gt;bug tracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for focmm).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them to [feedback@fromdual.com](mailto:feedback@fromdual.com?Subject=Feedback for focmm &amp;ldquo;Feedback for focmm&amp;rdquo;).&lt;/p&gt;
&lt;h2 id="installation-of-ops-center-121"&gt;Installation of Ops Center 1.2.1&lt;/h2&gt;
&lt;p&gt;Information on how to install FromDual Ops Center you can find in the &lt;a href="https://www.fromdual.com/ops-center-installing-and-upgrading" title="Installing and Upgrading"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-09x-to-121"&gt;Upgrade from 0.9.x to 1.2.1&lt;/h2&gt;
&lt;p&gt;Upgrade from 0.9.x to 1.2.1 should happen automatically. Please &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;do a backup&lt;/a&gt; of your Ops Center database instance before you upgrade! Please also check &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;Upgrading&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; In some cases the folder &lt;code&gt;focmm/tmp/start_jobs.lock&lt;/code&gt; is missing. In this case jobs are not started. Please check the log file under &lt;code&gt;focmm/log/start_jobs.log&lt;/code&gt; and create the folder accordingly. Further a file named &lt;code&gt;pid&lt;/code&gt; should be located in this folder. Create also this file if it is not there.&lt;/p&gt;
&lt;h2 id="changes-in-ops-center-121"&gt;Changes in Ops Center 1.2.1&lt;/h2&gt;
&lt;h3 id="machine"&gt;Machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ssh &amp;ldquo;Suspect machine&amp;rdquo; message fix advice command is now done with the right user and file.&lt;/li&gt;
&lt;li&gt;Check error fixed and output made nicer.&lt;/li&gt;
&lt;li&gt;Instance link added in machine overview and code …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>FromDual Ops Center 1.2.0 for MariaDB, MySQL and compatible databases has been released</title><link>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.0-for-mariadb-mysql-and-compatible-databases-has-been-released/</link><pubDate>Thu, 19 Jan 2023 12:01:02 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/ops-center-release-notes/fromdual-ops-center-1.2.0-for-mariadb-mysql-and-compatible-databases-has-been-released/</guid><description>&lt;p&gt;FromDual has the pleasure to announce the release of the new version 1.2.0 of its popular FromDual Ops Center &lt;a href="https://www.fromdual.com/ops-center-general-information"&gt;focmm&lt;/a&gt;, a Graphical User Interface (GUI) for MariaDB, MySQL and compatible databases.&lt;/p&gt;
&lt;p&gt;The FromDual Ops Center for MariaDB and MySQL (focmm) helps DBA&amp;rsquo;s and System Administrators to better manage their MariaDB and MySQL databases and Galera Cluster farms. Ops Center makes DBA and Admins life easier!&lt;/p&gt;
&lt;p&gt;The main task of Ops Center is to support you in your daily MariaDB and MySQL operation tasks. More information about FromDual Ops Center you can find under &lt;a href="https://www.fromdual.com/ops-center-general-information" title="General Information"&gt;General Information&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="download"&gt;Download&lt;/h2&gt;
&lt;p&gt;The new FromDual Ops Center for MariaDB and MySQL (&lt;code&gt;focmm&lt;/code&gt;) can be downloaded from our &lt;a href="https://support.fromdual.com/admin/public/download.php?product_id=11" target="_blank" title="FromDual download"&gt;download site&lt;/a&gt;. How to install and use &lt;code&gt;focmm&lt;/code&gt; is documented in the &lt;a href="https://www.fromdual.com/ops-center-user-guide" title="Ops Center User Guide"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the inconceivable case that you find a bug in the FromDual Ops Center for MariaDB and MySQL please report it to the FromDual &lt;a href="https://support.fromdual.com/bugs/login_page.php" target="_blank" title="FromDual bug tracker"&gt;bug tracker&lt;/a&gt; or just send us an [email](mailto:contact@fromdual.com?Subject=Bug report for focmm).&lt;/p&gt;
&lt;p&gt;Any feedback, statements and testimonials are welcome as well! Please send them to [feedback@fromdual.com](mailto:feedback@fromdual.com?Subject=Feedback for focmm &amp;ldquo;Feedback for focmm&amp;rdquo;).&lt;/p&gt;
&lt;h2 id="installation-of-ops-center-120"&gt;Installation of Ops Center 1.2.0&lt;/h2&gt;
&lt;p&gt;Information on how to install FromDual Ops Center you can find in the &lt;a href="https://www.fromdual.com/ops-center-installing-and-upgrading" title="Installing and Upgrading"&gt;Ops Center User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade-from-09x-to-120"&gt;Upgrade from 0.9.x to 1.2.0&lt;/h2&gt;
&lt;p&gt;Upgrade from 0.9.x to 1.2.0 should happen automatically. Please &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;do a backup&lt;/a&gt; of your Ops Center database instance before you upgrade! Please also check &lt;a href="https://www.fromdual.com/ops-center-upgrading"&gt;Upgrading&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="changes-in-ops-center-120"&gt;Changes in Ops Center 1.2.0&lt;/h2&gt;
&lt;h3 id="machine"&gt;Machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Delete machine error message improved.&lt;/li&gt;
&lt;li&gt;Add machine made more user friendly.&lt;/li&gt;
&lt;li&gt;Delete machine warning message made more verbose.&lt;/li&gt;
&lt;li&gt;Error handling improved and error messages made more verbose in gathering machine information.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="instance"&gt;Instance&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create instance: InnoDB buffer pool size estimation fixed.&lt;/li&gt;
&lt;li&gt;Remove &lt;code&gt;-core- &lt;/code&gt; packages from installation selection.&lt;/li&gt;
&lt;li&gt;Access keys added to show instance.&lt;/li&gt;
&lt;li&gt;Instance and machine names are sorted in selection now.&lt;/li&gt;
&lt;li&gt;Error handling improved in performance views.&lt;/li&gt;
&lt;li&gt;Restart …&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Systemd related stuff for MariaDB and MySQL</title><link>https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/</link><pubDate>Fri, 06 Jan 2023 19:05:06 +0100</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/</guid><description>&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#systemd"&gt;Systemd Notizen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#innodb-numa-interleave-with-mariadb"&gt;InnoDB NUMA interleave with MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#checking-galera-cluster-sst-timeout-with-systemd"&gt;Checking Galera Cluster SST timeout with Systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#kill-mariadb-galera-node-under-systemd"&gt;Kill MariaDB Galera node under Systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#mariadb-memlock-with-systemd"&gt;MariaDB Memory locking (&lt;code&gt;--memlock&lt;/code&gt;) with Systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#who-is-restarting-my-mariadbd"&gt;Who is restarting my &lt;code&gt;mariadbd&lt;/code&gt;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fromdual.com/blog/systemd-related-stuff-for-mariadb-and-mysql/#location-of-unit-files"&gt;Location of Systemd unit files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="systemd-notizen"&gt;Systemd Notizen&lt;/h2&gt;
&lt;p&gt;Systemd paged per default nach &lt;code&gt;less&lt;/code&gt;. Das ist ungewohnt und doof, weil es gegen allgemeines Linux-Verhalten verstösst. Abhilfe schafft:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ systemctl --no-pager status
$ alias systemctl='systemctl --no-pager'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Das selbe können wir auch verwenden, wenn wir bei MariaDB start/stop Problemen im Systemd Journal nachschauen müssen:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ journalctl --no-pager -xe --unit=mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eine weitere Herausforderung könnte die Anpassung des MariaDB Unit Files sein:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ update-alternatives --config editor
$ export SYSTEMD_EDITOR=vi
$ export EDITOR=vi
$ export VISUAL=vi
$ export SELECTED_EDITOR=&amp;quot;/usr/bin/vim.basic&amp;quot;
# C-x C-e
# /etc/systemd/system/mariadb.service.d/override.conf
$ systemctl show mariadb | grep NOFILE
$ systemctl edit mariadb

[Service]

LimitNOFILE=12288

$ systemctl edit --full mariadb
$ systemctl daemon-reload
$ systemctl restart mariadb
$ systemctl cat mariadb
$ systemctl revert mariadb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Leider funktioniert auf meinem Kubuntu 16.04 das setzten der &lt;code&gt;$EDITOR&lt;/code&gt; Variable nicht wie erwartet&amp;hellip; Bei älteren Systemd Versionen ist die Funktion &lt;code&gt;edit&lt;/code&gt; noch nicht implementiert.&lt;/p&gt;
&lt;h2 id="innodb-numa-interleave-with-mariadb"&gt;InnoDB NUMA interleave with MariaDB&lt;/h2&gt;
&lt;p&gt;The MariaDB server system variable &lt;code&gt;innodb_numa_interleave&lt;/code&gt; is currently not supported (any more). See: MariaDB &lt;a href="https://jira.mariadb.org/browse/MDEV-21399" target="_blank" title="Unknown variable &amp;#39;innodb_numa_interleave&amp;#39;"&gt;MDEV-21399&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As an alternative the &lt;code&gt;mysqld_safe&lt;/code&gt; option &lt;code&gt;--numa-interleave&lt;/code&gt; (&lt;a href="https://mariadb.com/kb/en/systemd/#useful-systemd-options" target="_blank" title="MariaDB Systemd Options"&gt;MariaDB Systemd Options&lt;/a&gt;) or the Systemd property &lt;a href="https://www.freedesktop.org/software/systemd/man/systemd.exec.html#NUMAPolicy=" target="_blank" title="Systemd NUMAPolicy"&gt;&lt;code&gt;NUMAPolicy&lt;/code&gt;&lt;/a&gt; can be used instead.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NUMAPolicy=interleave&lt;/code&gt; works from Systemd v243 onwards. You can find your current Systemd version as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ systemctl --version
systemd 245 (245.4-4ubuntu3.6)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The NUMA Policy of the the MariaDB …&lt;/p&gt;</description></item><item><title>Comparing Optimizer Results</title><link>https://www.fromdual.com/blog/comparing-optimizer-results/</link><pubDate>Fri, 18 Nov 2022 10:59:18 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/comparing-optimizer-results/</guid><description>&lt;p&gt;A while ago I read a paper about Optimizer Benchmarks: &lt;a href="https://www.vldb.org/pvldb/vol9/p204-leis.pdf" target="_blank"&gt;How Good Are Query Optimizers, Really?&lt;/a&gt; by Viktor Leis from Fakultät für Informatik of the Technische Universität München.&lt;/p&gt;
&lt;p&gt;Because we have from time to time problems with slow queries of customers especially after upgrading to new database releases it is interesting for me, how different optimizers cope with a query. Sometimes it is not clear to me why the query is slow or how I can make it faster. So the mentioned paper inspired me to compare the same query with the same dataset among different optimizers or optimizer versions. The most recent query from our customer we were testing against MariaDB 10.6, 10.9, 10.10, MySQL 8.0 and PostgreSQL 15.1.&lt;/p&gt;
&lt;h2 id="the-test-data"&gt;The test data&lt;/h2&gt;
&lt;p&gt;The table we were using is our generic &lt;code&gt;test&lt;/code&gt; table which many people already know from our &lt;a href="https://www.fromdual.com/mysql-mariadb-training"&gt;MariaDB and MySQL trainings&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE TABLE `test` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `data` varchar(128) DEFAULT NULL,
 `ts` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
 PRIMARY KEY (`id`)
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="loading-the-data-from-mysql"&gt;Loading the data from MySQL&lt;/h2&gt;
&lt;p&gt;How to dump the data from MySQL to load them into PostgreSQL I have already &lt;a href="https://www.fromdual.com/migration-of-your-data-from-one-database-to-another"&gt;described earlier&lt;/a&gt;. This is about how to create the table and load the data into PostgreSQL:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# sudo su - postgres
# psql
# postgres=# SELECT VERSION();
# postgres=# &amp;lt;br&amp;gt;l
# postgres=# CREATE DATABASE test;
CREATE DATABASE
postgres=# &amp;lt;br&amp;gt;c test
postgres=# CREATE TABLE test (
 id SERIAL NOT NULL PRIMARY KEY,
 data VARCHAR(128) DEFAULT NULL,
 ts TIMESTAMP NOT NULL
);
test=# &amp;lt;br&amp;gt;dt+
 List of relations
 Schema | Name | Type | Owner | Persistence | Access method | Size | Description
--------+----------+-------+----------+-------------+---------------+---------+-------------
 public | test | table | postgres | permanent | heap | 0 bytes |

# psql test &amp;lt; /tmp/test_dump.sql
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="the-query"&gt;The Query&lt;/h2&gt;
&lt;p&gt;The query we had problems with looked something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WITH t AS (
SELECT SUM(id)+0.0 AS c, data AS pn
 FROM …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Migration of your data from one database to another</title><link>https://www.fromdual.com/blog/migration-of-your-data-from-one-database-to-another/</link><pubDate>Thu, 17 Nov 2022 17:01:44 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/migration-of-your-data-from-one-database-to-another/</guid><description>&lt;p&gt;Before you consider migrating your data from MySQL to another database you have to know which objects have to be migrated.&lt;/p&gt;
&lt;p&gt;With this query you will find the objects to consider:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT TABLE_SCHEMA AS `SCHEMA`, IF(TABLE_TYPE = 'BASE TABLE', 'TABLE', TABLE_TYPE) AS OBJECT_TYPE, TABLE_NAME AS `OBJECT_NAME`
 , IFNULL(ENGINE, '') AS ENGINE, IFNULL(TABLE_ROWS, '') AS `ROWS`
 , IFNULL(DATA_LENGTH, '') AS DATA_SIZE, IFNULL(INDEX_LENGTH, '') AS INDEX_SIZE
 FROM information_schema.tables
 WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
UNION
SELECT '', IF(is_role = 'Y', 'ROLE', 'USER'), CONCAT(&amp;quot;'&amp;quot;, user, &amp;quot;'&amp;quot;, '@', &amp;quot;'&amp;quot;, host, &amp;quot;'&amp;quot;) AS OBJECT_TYPE, '', '', '', ''
 FROM mysql.user
UNION
SELECT db, type, name, '', '', '', ''
 FROM mysql.proc
 WHERE db NOT IN ('sys', 'information_schema', 'performance_schema', 'mysql')
UNION
SELECT db, 'EVENT', name, '', '', '', ''
 FROM mysql.event
UNION
SELECT trigger_schema, 'TRIGGER', trigger_name, '', '', '', ''
 FROM information_schema.triggers
UNION
SELECT db, 'EVENT', name, '', '', '', ''
 FROM mysql.event
ORDER BY `SCHEMA` ASC, OBJECT_TYPE ASC, OBJECT_NAME ASC
;

+--------+-------------+---------------------------+--------+---------+-----------+------------+
| SCHEMA | OBJECT_TYPE | OBJECT_NAME | ENGINE | ROWS | DATA_SIZE | INDEX_SIZE |
+--------+-------------+---------------------------+--------+---------+-----------+------------+
| | ROLE | 'test_r'@'' | | | | |
| | USER | 'app'@'%' | | | | |
| | USER | 'app'@'127.0.0.1' | | | | |
| | USER | 'focmm'@'127.0.0.1' | | | | |
| | USER | 'test'@'localhost' | | | | |
| sbtest | TABLE | sbtest1 | InnoDB | 9680 | …&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Graphical User Interfaces (GUI) for MariaDB and MySQL</title><link>https://www.fromdual.com/blog/graphical-user-interfaces-gui-for-mariadb-and-mysql/</link><pubDate>Fri, 04 Nov 2022 10:10:04 +0000</pubDate><author>oli.sennhauser@fromdual.com (Oli Sennhauser)</author><guid>https://www.fromdual.com/blog/graphical-user-interfaces-gui-for-mariadb-and-mysql/</guid><description>&lt;p&gt;If you do not feel at home on the command line, you may prefer to use a graphical user interface (GUI). These also have advantages, for example when displaying data or structures, or they can simplify and therefore speed up work processes.&lt;/p&gt;
&lt;p&gt;There are two main types of graphical user interfaces: On the one hand, the Integrated Development Environments (IDE), and on the other hand, tools that support the administration of the database.&lt;/p&gt;
&lt;p&gt;This list contains all known graphical user interfaces for MariaDB and MySQL:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;O/S&lt;/th&gt;
&lt;th&gt;Distro&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;th style="text-align: center;"&gt;other DBMS&lt;/th&gt;
&lt;th style="text-align: center;"&gt;ER- Diag.&lt;/th&gt;
&lt;th&gt;Client Type&lt;/th&gt;
&lt;th style="text-align: center;"&gt;MySQL Support&lt;/th&gt;
&lt;th style="text-align: center;"&gt;MariaDB Support&lt;/th&gt;
&lt;th&gt;Download&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.devart.com/dbforge/MySQL/studio/" target="_blank"&gt;dbForge Studio&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Fed, RHEL&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev, Admin, Anal.&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.devart.com/dbforge/mysql/studio/download.html" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.mysql.com/products/workbench/" target="_blank"&gt;MySQL Workbench&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, RHEL. Fed, OL&lt;/td&gt;
&lt;td&gt;GPLv2, Prop.&lt;/td&gt;
&lt;td&gt;Dev, Admin, Arch, Anal.&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;(x)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dev.mysql.com/downloads/workbench/" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.phpmyadmin.net" target="_blank"&gt;phpMyAdmin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Mint, Fed, RHEL, CentOS, Rocky, Alma, Arch openSuSE&lt;/td&gt;
&lt;td&gt;OpenSource&lt;/td&gt;
&lt;td&gt;User&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.phpmyadmin.net/downloads/" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.navicat.com/en/" target="_blank"&gt;Navicat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, openSuSE, CentOS, Fedora&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev, Admin&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.navicat.com/en/download/navicat-for-mysql" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.valentina-db.com/en/" target="_blank"&gt;Valentina Studio&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.valentina-db.com/en/download-valentina-studio/current" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dbeaver.io/about/" target="_blank"&gt;DBeaver&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Mint, Arch, RHEL&lt;/td&gt;
&lt;td&gt;Apache, Prop.&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dbeaver.io/download/" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.beekeeperstudio.io/" target="_blank"&gt;BeeKeeper Studio&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Fed, Arch&lt;/td&gt;
&lt;td&gt;GPLv3, Proprietary&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.beekeeperstudio.io/get" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.jetbrains.com/datagrip/" target="_blank"&gt;DataGrip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux, macOS, Windows&lt;/td&gt;
&lt;td&gt;Deb, Ubu, RHEL&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev, Admin, Anal.&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.jetbrains.com/datagrip/download/" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.squirrelsql.org/" target="_blank"&gt;SQuirreL SQL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Fed, Mint, CentOS&lt;/td&gt;
&lt;td&gt;GPLv2+, LGPLv2.1+&lt;/td&gt;
&lt;td&gt;Dev, User&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://snapcraft.io/squirrelsql" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.adminer.org/" target="_blank"&gt;Adminer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Deb, Ubu, Arch&lt;/td&gt;
&lt;td&gt;OpenSource?&lt;/td&gt;
&lt;td&gt;Dev, Admin&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.adminer.org/en/editor/#download" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.quest.com/products/toad-edge/" target="_blank"&gt;Toad Edge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev, Admin&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.oracle.com/database/sqldeveloper/" target="_blank"&gt;Oracle SQL Developer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;(x)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.fromdual.com/fromdual-ops-center" target="_blank"&gt;FromDual Ops Center&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;Deb, Ubu, RHEL&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Admin&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td style="text-align: center;"&gt;(x)&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://support.fromdual.com/admin/public/download.php?operation=select&amp;amp;product_id=11" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.heidisql.com/" target="_blank"&gt;HeidSQL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Windows, Linux+Wine&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;GPLv2&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.heidisql.com/download.php" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.mysqlui.com/" target="_blank"&gt;SQLPro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;(x)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.mysqlui.com/" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://sequelpro.com/" target="_blank"&gt;Sequel Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;OpenSource?&lt;/td&gt;
&lt;td&gt;Dev, Beginners&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td&gt;Fat&lt;/td&gt;
&lt;td style="text-align: center;"&gt;x&lt;/td&gt;
&lt;td style="text-align: center;"&gt;(x)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sequelpro.com/download#auto-start" target="_blank"&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.araelium.com/querious" target="_blank"&gt;Querious&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;macOS …&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description></item></channel></rss>