Skip to content

Releases: skeema/skeema

v1.13.2

02 Dec 21:00

Choose a tag to compare

  • MariaDB 12.1 support (3354825)
  • Skeema Premium workspace error bug fix: when using a combination of many foreign keys, many views referring to tables with foreign keys, and multi-threaded workspaces, Error executing DDL in workspace: Error 1146 could be triggered randomly due to foreign key locking conflicts. This has been fixed by correcting the order of table retries, relative to view creation in the workspace. (#258, f13350f)
  • SSH tunnel improvement: upon program exit, spurious warnings about failed SSH keep-alives were occasionally logged due to a race condition in shutdown logic. These warnings were harmless, but nonetheless have now been prevented.

An installation guide and full documentation are available on our website skeema.io.

v1.13.1

30 Oct 22:15

Choose a tag to compare

  • MariaDB 12.0 support (a4737d3)
  • MySQL 9.5 support, as well as some deferred improvements from MySQL 9.4 (72a7fc4, e1db2f9)
  • Safety improvement: the current Skeema version is now compared to the directory's generator version, and an error or warning is logged if your Skeema binary's version is insufficient to interact with the directory properly (8c57bae)
  • Performance improvement: connection re-use has been improved for several code paths, reducing the number of new connections launched by Skeema (49b79d1, 729c805)
  • SSH tunnel improvement on MacOS: if ~/.ssh/config enables UseKeychain, and the necessary SSH key is not already loaded into the ssh-agent (e.g. due to a recent machine reboot), Skeema now attempts to load missing keys from the keychain automatically as needed
  • When running skeema version from a Skeema Community binary built from source with Go module support, the output now includes more build information, such as the Git commit SHA and dirty-change status (e5b0d4f)

v1.13.0

21 Aug 21:04

Choose a tag to compare

See the Skeema v1.13 release announcement blog post for a summary of the most important changes in this release.

v1.12.3

27 Feb 22:13

Choose a tag to compare

  • MariaDB 11.7 support (684ffe5)
    • All Skeema commands can now fully handle MariaDB VECTOR columns and indexes, including the optional DISTANCE and M attributes for indexes
    • lint-reserved-word now flags new reserved word VECTOR
  • MySQL 9.2 support (10560a6)
  • Workspace cleanup now uses chunking, instead of concurrency, to efficiently remove empty workspace tables (0617f91)
    • This Skeema change provides an important workaround for a recent MariaDB server bug involving foreign keys. See MDEV-36129, which affects all MariaDB 10.6+ releases from May 2024 onwards: 10.6.18+, 10.11.8+, 11.0.6, 11.1.5+, 11.2.4+, 11.4.2+, and all 11.5-11.7+ GA releases.
  • Performance improvement for slow network links (WAN/VPN/cross-region) when using many/large stored procedures, functions, views, or triggers (3e822d6)
  • Timeout behavior has been improved to ensure that server-side lock wait timeouts always occur prior to any client-side query timeout (373c702)
    • This aids in troubleshooting Skeema performance issues, allowing easier identification of whether the root cause relates to locks (now manifests as a lock wait timeout error) vs a slow query timing out due to a non-responsive database server (which still shows an I/O timeout error).
  • TLS fix: very old MySQL 5.7 point releases (prior to MySQL 5.7.28 / Oct 2019) don't support TLS 1.2, so use of TLS 1.1 is now permitted automatically for these server versions (e46bd0c)

v1.12.2

17 Dec 22:23

Choose a tag to compare

  • TLS fixes for allowing encrypted connections to old/EOL database server versions
    • By default, Go 1.22+ no longer enables TLS cipher suites using RSA key exchange, but these older cipher suites are typically needed to establish a secure connection to MySQL 5.5-5.7, Percona Server 5.5-5.6, or MariaDB 10.1. Skeema now allows use of these cipher suites when communicating with older servers, or when the server flavor has not been introspected yet. (#239, 6d2daf0)
    • By default, Go 1.18+ normally uses a minimum of TLS 1.2, which is not supported by MySQL 5.5-5.6 or Percona Server 5.5-5.6. Skeema now allows use of TLS 1.0 when communicating with these older servers, or when the server flavor has not been introspected yet. (7a4fbcd, 3cfa747)
  • When TLS-related options are specified on the command-line for skeema init or skeema add-environment, these options are now automatically persisted to the .skeema option file, similar to other connectivity-related options. (c4f0af8)
  • Bug fix: when using the ssl-cert and ssl-key Premium options alongside ssl-mode=preferred, an error would be returned if the server was not actually configured to support TLS. This situation now falls back to a plaintext connection, which is the intended behavior of ssl-mode=preferred aligning with the standard mysql command-line client.

v1.12.1

02 Dec 21:45

Choose a tag to compare

  • MySQL 9.0 and 9.1 support (7c94fcb, 47bfc0a, a0a060a)
    • The new VECTOR column type is supported. In skeema diff and skeema push, altering a column type between VECTOR and any other sufficiently-large binary type is permitted as a safe operation since the conversion is non-lossy.
    • MySQL 9 finally processes "inline" foreign key definitions (that is, REFERENCES clause in a column definition). These are supported as-is in Skeema.
  • MariaDB 11.5 and 11.6 support (6165c90, f24ad30)
    • MariaDB 11.5 changes the default collation for Unicode charsets to use uca1400_ai_ci collations, which are fully supported in Skeema.
    • MariaDB 11.5 solves the TIMESTAMP col type's previous Y2K38 limitation, and Skeema's lint-has-time annotation message has been adjusted accordingly.
  • CHECK constraint improvement: When a diff only affects the name of a CHECK constraint without modifying its check expression, skeema diff and skeema push now ignore this cosmetic change by default. This improves compatibility with external OSC tools, which inherently need to rename CHECK constraints as part of their operation. This new behavior can be overridden by enabling the --exact-match option. (f000616)
  • Event handling improvements and fixes (Skeema Premium)
    • When an event diff only included a change to the DEFINER clause, and no other differences, the ALTER EVENT emitted by Skeema was not valid SQL (despite conforming to syntax in the MySQL and MariaDB manuals). To fix this situation, the SQL will now also include an additional no-op clause, such as ENABLE for an event that is already enabled.
    • Several dump normalizations for CREATE EVENT statements were inadvertently omitted the first time an event was dumped by skeema init or skeema pull.
    • If any workspace query failed (e.g. query timeout), and any events were present in the *.sql definitions, a panic would result instead of the intended workspace query failure error message. (#229)
  • SSH tunnel enhancements (Skeema Premium)
  • If any hand-written *.sql files use the optional CREATE OR REPLACE SQL syntax, Skeema now parses and ignores the OR REPLACE clause. Previously, use of this syntax would prevent Skeema from parsing the statement. (6805737)
  • Enhancements for Docker workspaces
    • Significant performance improvements for several common situations (d348249, ca85df7, 7a40155)
    • When using Percona Server 8.x, the Docker image / point release selection logic has been improved (e09350c, fe55d62, af1b3b5)
  • When a redundant non-unique index is flagged by lint-dupe-index, the annotation message is now clearer (since false positives may be possible) and suggests making the index be INVISIBLE / IGNORED before dropping (#238, #237)
  • MariaDB's August 2024 point releases have changed the formatting of compressed columns in SHOW CREATE TABLE, which affected Skeema's diff logic safeguards. This change is now handled and compressed columns are fully supported again. (49aed41)
  • Minor wording changes in log messages and help text, for consistency. (4f8fa44, 5f7598e)

Thank you to all code contributors and issue reporters!

v1.12.0

01 Jul 21:24

Choose a tag to compare

See the Skeema v1.12 release announcement blog post for a summary of the most important changes in this release.

v1.11.2

04 Apr 00:40

Choose a tag to compare

  • MySQL 8.3 is now marked as supported (31239e7)
  • MariaDB 11.3 is now marked as supported (c05a1fa)
    • In MariaDB 11.3+, modifying a column's data type from inet4 to inet6 is no longer considered unsafe
  • Several improvements and edge case fixes for Docker workspaces, especially when using an arm64 system (e.g. Apple Silicon)
    • When copying the sql_mode from the target database server and applying it to the Dockerized instance, if the flavors/versions of the two databases differ, incompatible sql_mode values are now removed automatically (686294e)
    • When using an arm64 client system with a MySQL 5.x requested flavor, utf8mb4 columns now use the old MySQL 5.x collation default in the Dockerized instance, despite it actually running MySQL 8.0 for arm64 compatibility (48d2074)
    • When using an arm64 client system with a MySQL 5.x requested flavor, utf8mb3 columns could cause an uncaught panic due to a logic bug, which is now fixed (58e9338, #226)
    • Percona Server 8.0, 8.1, 8.2 images are now available regardless of CPU architecture; previously 8.0 was only available for amd64, and 8.1+ was unavailable entirely (f7753c1, e50f754, da0e8e1)
    • If the requested flavor value is a release series newer than the current version of Skeema, a non-fatal warning is now logged; previously this caused a fatal error (a45dbf2)
  • Logging improvement: word wrapping is now disabled automatically if STDERR is a narrow terminal window below 80 characters in width (4ab585c)
  • MariaDB bug fix: when using foreign key constraints in MariaDB 10.6+, Skeema's workspace cleanup step could sometimes stall due to database server bug MDEV-32899; this condition is now avoided by using a low innodb_lock_wait_timeout and retries during workspace cleanup (a5ed51d)
  • MariaDB bug fix: in lint-reserved-word, erroneous handling of two MariaDB-specific reserved words has been corrected (0c0b8a8)
  • Premium edition bug fix: when using SSH tunnel functionality to connect to a server that only has an RSA host key, previously the rsa-sha2-512 or rsa-sha2-256 algorithms would not be attempted by Skeema during the handshake. This is now fixed, thanks to a community contribution to our open source knownhosts wrapper package. (skeema/knownhosts#6)

Thank you to all code contributors and issue reporters!

v1.11.1

04 Dec 22:50

Choose a tag to compare

  • MySQL 8.2 is now supported (0346508)
    • The new SET_ANY_DEFINER privilege is now properly handled by the strip-definer=auto Premium option
  • MariaDB 11.2 is now supported (3611359)
    • MariaDB 11.2 extends its built-in online schema change support to include ALTER TABLE ... ALGORITHM=COPY, LOCK=NONE. As always, Skeema users can enforce a minimum algorithm/lock for generated ALTER TABLE statements by using Skeema's alter-algorithm and alter-lock options. However, users should be aware that the database server's built-in OSC can cause replication lag. Enabling MariaDB's binlog_alter_two_phase server variable may help reduce or prevent this lag.
  • Performance improvement for skeema diff and skeema push: the verify option, which is enabled by default, now ignores cosmetic table discrepancies which are excluded from ALTER TABLE generation anyway. This provides a major performance benefit in environments with many auto-increment tables or range-partitioned tables, among other situations. (bcd46d4)
  • Performance improvements for the workspace=docker option (22d4b9b, c029294, 766efc3)
    • Newly-created containerized databases now use a smaller buffer pool, use smaller redo log files, disable performance_schema, disable the adaptive hash index, and disable separate log writer threads. These changes improve performance for the workspace workload, and reduce system resource consumption.
    • On Linux systems, when docker-cleanup=destroy is configured, the ephemeral containerized database will now automatically use a tmpfs mount for its data directory. This greatly improves performance by avoiding disk writes for the workspace workload.
    • These changes do not affect pre-existing containers which were created from prior use of workspace=docker. You can manually remove older containers (for example docker rm -v -f skeema-mysql-8.0) if you wish for Skeema to recreate them with the new tuned settings.
  • Two problematic variants of CREATE TABLE statements are now simply ignored by all Skeema commands entirely; a warning is logged in these situations (62c33e0)
    • CREATE TABLE ... SELECT statements in the filesystem previously caused their entire subdir to be skipped with a fatal error
    • CREATE TABLE ... WITH SYSTEM VERSIONING (MariaDB-only database feature) statements in the filesystem previously would be erroneously removed by skeema pull (#187, #206)
  • Bug fix for MariaDB 10.10+: tables using the new UCA-14.0.0 collations, such as utf8mb4_uca1400_ai_ci, are now introspected properly. Previously, these collations were not handled correctly by Skeema because they are represented differently in information_schema.collations than all other collations. (ee25133)
  • Internal improvement for Skeema developers/contributors: integration test suite output is now substantially less noisy, suppressing all output from subtests which pass (5d3d1b5)

v1.11.0

26 Sep 20:26

Choose a tag to compare

See the Skeema v1.11 release announcement blog post for a summary of the most important changes in this release.

  • Spatial indexes and SRID column attributes are now fully supported for diff operations. (#97, 77ab3de, 5e357db)
  • MySQL 8.1 is now supported. (23520ea, f4e480f)
  • MariaDB 11.1 is now supported. (865aa62)
  • Premium edition improvement for triggers: whenever skeema push needs to perform multiple trigger manipulations in the same schema, the corresponding parent tables are now briefly write-locked, to prevent data inconsistencies from writes which occur in the middle of the push operation.
    • Even though MySQL lacks CREATE OR REPLACE syntax to atomically modify a trigger, this improvement now makes it safe to modify existing triggers, so allow-unsafe is no longer necessary in this situation.
  • The workspace=docker option now shells out to an external Docker CLI binary, instead of bundling a Golang Docker client library inside of Skeema. This change reduces the size of the skeema binary by 25-40%, and avoids spurious false-positive security warnings related to dependencies of the Docker client library. (#186, 2a2d8e3, 233c73e)
  • New option lax-column-order provides a way to ignore differences in column ordering in skeema diff and skeema push. (#178, c6de431)
  • New option lax-comments provides a way to ignore COMMENT clause differences in skeema diff and skeema push. (76a7323)
  • When skeema diff or skeema push detects multiple unsafe changes, all such unsafe changes are now logged, instead of just the first one. Additionally, linting still occurs if unsafe changes are present, allowing the user to see all problematic unsafe statements and linter violations at the same time. (01a93d5)
  • Several additional column modification edge cases are now considered unsafe by skeema diff and skeema push. (905ee14)
    • Changing the collation of a column that appears in a uniqueness constraint
    • Adding, removing, or changing the SRID of a spatial column in MySQL 8+
    • Converting the column type between TIME and TIMESTAMP
  • Several small improvements when modifying existing routines when using skeema diff or skeema push
    • Changes to the parameters or return type of a routine are now considered unsafe, requiring allow-unsafe to proceed even in MariaDB (where atomic CREATE OR REPLACE syntax normally makes other types of routine modifications safe). (a3ecc18)
    • When modifying a routine's characteristics (COMMENT clause, SECURITY characteristic, SQL DATA characteristic) and no other properties of the routine, Skeema now emits ALTER PROCEDURE / ALTER FUNCTION, which is safe and atomic even in MySQL. (6fab6d8)
    • In the output for skeema diff and skeema push, if the last statement for a schema required use of a nonstandard DELIMITER, the output will now also include a DELIMITER ; line before moving on to the next schema. This is beneficial for users who pipe skeema diff STDOUT to another program and then add additional SQL statements afterwards. (605b735)
  • Linter annotation messages now backtick-wrap the name of the problematic table, routine, view, or trigger. (2dd1fb6)
  • Premium edition improvement for Windows build: when Skeema needs to invoke external commands with PowerShell, its -EncodedCommand option is now used in order to prevent problems with tricky nested escaping of quoted parameters.
  • Premium edition Aurora bug fix: the latest release of Aurora for MySQL 5.7 (Aurora v2.12.0, from 2023-07-25) was not properly detected as flavor=aurora. This version of Aurora self-reports its MySQL server version as 5.7.40, whereas all previous Aurora v2 versions reported it as MySQL 5.7.12. Skeema's Aurora detection logic has now been adjusted to allow for dynamic 5.7 versions, similar to how the logic for Aurora v3 (MySQL 8.0.x) already worked.
  • Premium edition bug fix: when using Skeema Premium's ssh tunnel functionality on a server with an IPv6 address, if the SSH configuration specifies StrictHostKeyChecking=no or StrictHostKeyChecking=ask, Skeema could previously write the knownhosts entry incorrectly, in part due to an upstream Golang bug. Workarounds are now in place, thanks to community contributions to our open source knownhosts wrapper package. (skeema/knownhosts#2, skeema/knownhosts#4)

Upgrade notice for users of Skeema's workspace=docker option:

  • Skeema v1.11+ no longer bundles a built-in Docker client. A docker command-line client binary must be available in your $PATH to use workspace=docker. If you use this setting while also running skeema inside of a container, you must ensure that skeema's container has a working docker binary prior to upgrading. See #186 for more information.