Schema management CLI for MySQL

Overview

Skeema

build status code coverage downloads latest release

Skeema is a tool for managing MySQL tables and schema changes in a declarative fashion using pure SQL. It provides a CLI tool allowing you to:

  • Export CREATE TABLE statements to the filesystem, for tracking in a repo (git, hg, svn, etc)
  • Diff changes in the schema repo against live DBs to automatically generate DDL
  • Manage multiple environments (e.g. dev, staging, prod) and keep them in sync with ease
  • Configure use of online schema change tools, such as pt-online-schema-change, for performing ALTERs
  • Convert non-online migrations from frameworks like Rails or Django into online schema changes in production

Skeema supports a pull-request-based workflow for schema change submission, review, and execution. This permits your team to manage schema changes in exactly the same way as you manage code changes. Our new companion Cloud Linter for GitHub repos provides automatic linting of schema change commits and pull requests.

Download and install

Download links and installation instructions are available on Skeema's website.

Documentation

Status

The Skeema CLI tool is generally available, having reached the v1 release milestone in July 2018. Prior to that, it was in public beta since October 2016.

The skeema binary is supported on macOS and Linux. No native Windows version is available yet, but the Linux binary works properly under WSL.

Tagged releases are tested against the following databases, all running on Linux:

  • MySQL 5.5, 5.6, 5.7, 8.0
  • Percona Server 5.5, 5.6, 5.7, 8.0
  • MariaDB 10.1, 10.2, 10.3, 10.4, 10.5

Outside of a tagged release, every commit is automatically tested via GitHub Actions CI against MySQL 5.7 and 8.0.

A few uncommon database features -- such as check constraints, spatial indexes, and subpartitioning -- are not supported yet. Skeema is able to create or drop tables using these features, but not alter them. The output of skeema diff and skeema push clearly displays when this is the case. You may still make such alters directly/manually (outside of Skeema), and then update the corresponding CREATE TABLE files via skeema pull. Please see the requirements doc for more information.

Credits

Created and maintained by @evanelias.

Additional contributions by:

Support for stored procedures and functions generously sponsored by Psyonix.

Support for partitioned tables generously sponsored by Etsy.

License

Copyright 2021 Skeema LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Add ignore-*-regex options for table and schema

    Add ignore-*-regex options for table and schema

    This change will allow users to ignore certain tables or schemas while using skeema. The main idea behind this is to ignore tables that were created by pt-online-schema-change or gh-ost. In addition it makes sense to allow entire schemas to be ignored besides the system schemas

    opened by tomkrouper 42
  • AWS Aurora: unable to diff tables with multiple foreign keys

    AWS Aurora: unable to diff tables with multiple foreign keys

    I recently migrated both my dev and prod RDS databases from MySQL to Aurora MySQL

    After the migration, I was able to make schema changes on dev using skeema with no problems, however when I tried running the same changes on prod, I kept getting errors like the following:

    2020-03-27 12:07:25 [WARN]  Skipping table `telemedicine_sessions_cancelled`: unable to generate DDL due to use of unsupported features. Use --debug for more information.
    2020-03-27 12:07:25 [DEBUG] --- Expected CREATE
    2020-03-27 12:07:25 [DEBUG] +++ MySQL-actual SHOW CREATE
    2020-03-27 12:07:25 [DEBUG] @@ -9,2 +9,2 @@
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `_fk-telemedicine-sessios-cancelled-session` FOREIGN KEY (`session_id`) REFERENCES `telemedicine_sessions` (`id`),
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `fk-telemedicine-session-cancelled-clinic` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`)
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `fk-telemedicine-session-cancelled-clinic` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`),
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `_fk-telemedicine-sessios-cancelled-session` FOREIGN KEY (`session_id`) REFERENCES `telemedicine_sessions` (`id`)
    2020-03-27 12:07:25 [WARN]  Skipping table `telemedicine_sessions_rejected`: unable to generate DDL due to use of unsupported features. Use --debug for more information.
    2020-03-27 12:07:25 [DEBUG] --- Expected CREATE
    2020-03-27 12:07:25 [DEBUG] +++ MySQL-actual SHOW CREATE
    2020-03-27 12:07:25 [DEBUG] @@ -8,2 +8,2 @@
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `__fk-telemedicine-session-rejected-clinic` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`),
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `fk-telemedicine-sessios-rejected-session` FOREIGN KEY (`session_id`) REFERENCES `telemedicine_sessions` (`id`)
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `fk-telemedicine-sessios-rejected-session` FOREIGN KEY (`session_id`) REFERENCES `telemedicine_sessions` (`id`),
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `__fk-telemedicine-session-rejected-clinic` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`)
    2020-03-27 12:07:25 [WARN]  Skipping table `telemedicine_sessions`: unable to generate DDL due to use of unsupported features. Use --debug for more information.
    2020-03-27 12:07:25 [DEBUG] --- Expected CREATE
    2020-03-27 12:07:25 [DEBUG] +++ MySQL-actual SHOW CREATE
    2020-03-27 12:07:25 [DEBUG] @@ -39,2 +39,2 @@
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `_fk-telemedicine-session-clinics` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`),
    2020-03-27 12:07:25 [DEBUG] -  CONSTRAINT `telemedicine_sessions_ibfk_1` FOREIGN KEY (`practitioner_id`) REFERENCES `users` (`id`)
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `telemedicine_sessions_ibfk_1` FOREIGN KEY (`practitioner_id`) REFERENCES `users` (`id`),
    2020-03-27 12:07:25 [DEBUG] +  CONSTRAINT `_fk-telemedicine-session-clinics` FOREIGN KEY (`clinic_id`) REFERENCES `clinics` (`id`)
    

    I tried changing the order of the foreign keys in my CREATE TABLE statements to match what it wants, but that doesn't seem to change anything, I still get the same errors.

    The only thing that allowed me to update any of the affected tables was deleting its foreign keys entirely, but it gives me the same errors when I try to add them back in.

    opened by kaitlynbrown 15
  • Adding --ddl-wrapper-comment for diff output

    Adding --ddl-wrapper-comment for diff output

    A new flag is introduced, --ddl-wrapper-comment (bool, default false for backward compatibility), which controls output of skeema diff (or skeema push --dry-run) command.

    When this flag is given, each DDL is wrapped by well formed comments, in the likeness of:

    -- skeema:ddl:begin
    CREATE TABLE `table_0` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(128) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    -- skeema:ddl:end
    

    The purpose of this flag is to assist with parsing of skeema diff output. As a concrete example, we want to be able to run skeema diff and review the statements generated by the tool, on a per-statement basis. When diff contains multiple DDL statements (multiple CREATE, ALTER, DROP) it is a difficult task to parse it. Toekizing by semicolon (;) is unsafe, because a semicolon can appear as, say, a VARCHARs default value, or in a column comment.

    With the above wrapper comments the parsing operation is safe and simple. The wrapper comments text is extremely unlikely to appear as a valid text in a DDL.


    I hope this PR finds you well. It confirms to existing coding standards. As I looked into a unit test, I found it difficult to follow the docker usage in generating & comparing diffs:

    https://github.com/skeema/skeema/blob/94f380a5c46124ee743a221f9b2bb0b67b1c7859/skeema_cmd_test.go#L442-L453

    I also noted the above uses --brief and so does not compare actual DDL statements; and so I'm unsure how to test wrapper statements. I'm happy to work on this with guidance, as needed.

    cc @github/database-infrastructure

    opened by shlomi-noach 14
  • Errors when using on Amazon RDS build of MariaDB 10.3

    Errors when using on Amazon RDS build of MariaDB 10.3

    We had skeema running nicely yesterday on Mariadb10.2 , we then updated to 10.3 and are getting errors on all table statements. We have messed around with user permissions including using the root user that has all grants on the db and the skeema temp db. The error message we are getting is the following.

    2019-04-04 21:48:02 [WARN] Skipping table myTable: unable to generate DDL due to use of unsupported features. Use --debug for more information. 2019-04-04 21:48:02 [DEBUG] --- Expected CREATE 2019-04-04 21:48:02 [DEBUG] +++ MySQL-actual SHOW CREATE

    it's really confusing because there is not SHOW CREATE in our sql files.... Any help would be awesome.

    bug 
    opened by jmillstein 14
  • Errors when DB hosted on MacOS or Windows, if schema/table names have uppercase chars

    Errors when DB hosted on MacOS or Windows, if schema/table names have uppercase chars

    Hi Guys,

    We ran into a problem using skeema push to update a development environment. The environment already has the database setup using skeema, we are trying to deploy an update. when we run push. we got the error complaining the database already exists and ignore all the following changes. I wonder if anyone have seem this issue or got any tips in solving this problem? Many thanks in advance.

    CREATE DATABASE BZ_main CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 2019-03-20 19:02:28 [ERROR] Error running DDL on dataserver:3306 BZ_main: Error 1007: Can't create database 'BZ_main'; database exists 2019-03-20 19:02:28 [WARN] Skipping 25 remaining operations for dataserver:3306 BZ_main due to previous error 2019-03-20 19:02:28 [INFO] dataserver:3306 BZ_main: push complete

    bug 
    opened by biszinc 12
  • Support for SSL client cert auth

    Support for SSL client cert auth

    It would be great to be able to use ssl client certs for skeema. Example entry from a user's .my.cnf file:

    [client]
    ssl_ca=/path/to/ca_cert.pem
    ssl_cert=/path/to/client_cert.pem
    ssl_key=/path/to/private.key
    
    feature request 
    opened by rtbellows 11
  • Comma separated list of schemas does not work

    Comma separated list of schemas does not work

    When defining a list of schemas to pull in the config file, only the first item of the list gets pulled into the current directory. Expected would be the pull of all schemas into their respective directories.

    Steps to reproduce:

    1. Create new databases and tables:
    CREATE USER 'skeema'@'%' IDENTIFIED BY 'skeema';
    GRANT SELECT ON *.* TO 'skeema'@'%';
    GRANT ALL ON _skeema_tmp.* TO  'skeema'@'%';
    CREATE DATABASE test01;
    CREATE DATABASE test02;
    CREATE TABLE test01.testtable01 (id INTEGER NOT NULL PRIMARY KEY, val VARCHAR(255));
    CREATE TABLE test01.testtable02 (id INTEGER NOT NULL PRIMARY KEY, val VARCHAR(255));
    CREATE TABLE test02.testtable03 (id INTEGER NOT NULL PRIMARY KEY, val VARCHAR(255));
    CREATE TABLE test02.testtable04 (id INTEGER NOT NULL PRIMARY KEY, val VARCHAR(255));
    
    1. Create the .skeema file:
    [test]
    host=127.0.0.1
    port=3306
    user=skeema
    password=skeema
    schema=test01,test02
    
    1. Fetch the schema: skeema pull test

    Expected result: A tree like 127.0.0.1/{test01,test02}/testtable??.sql

    Actual result: Only the tables from DB test01 are pulled into the current directory. Likewise, when the order is reversed, the test01 tables are removed and files for the test02 tables are created.

    question not a bug 
    opened by pludi 11
  • Is there any way to differentiate return codes for warnings vs diffs?

    Is there any way to differentiate return codes for warnings vs diffs?

    Skeema appears to use the same return code of 1 for warnings and when differences are detected. We would like to have our pipeline that uses Skeema fail on warnings because we don't want the pipeline to proceed on most warnings.

    Is there any way to split out diffs vs warnings? Is there any planned change to modify the return codes to separate these?

    see exit.go

    question 
    opened by zylo47 9
  • add-environment workflow feedback

    add-environment workflow feedback

    Continuing from https://twitter.com/EvanElias/status/1168732285639831553

    Does this look like a good workflow? https://s.natalian.org/2019-09-03/add-env.mp4

    Does skeema pull pull from all configured environments? I think it's just "production", but I don't have a "production" environment...

    In retrospect, I wish I inited from dev. I would prefer to see the diff between folders, since then it would be clear in my mind what is the source and what is the target.

    question 
    opened by kaihendry 9
  • Foreign key lint detectors

    Foreign key lint detectors

    This PR adds 3 foreign-key related lint detectors:

    1. non-unique-fk-ref InnoDB allows FK references to non-unique keys in the parent table but it is advised against in the mysql reference manual. Personally I came across this as I had issues with code generation tools (from schema to code) that didn't handle our FK references to non-unique keys. A lint warning should be useful.
    2. fk-missing-parent-table InnoDB lets you create a FK which references a non-existent table (with FOREIGN_KEY_CHECKS=0), added a detector for that. It doesn't seem to allow a reference to an existing table but non-existent column though, so not checking that.
    3. duplicate-fk Detects if there are several FK definitions that are identical (except for their names).

    Some notes:

    • All the detectors assume that InnoDB is used but doesn't check the engine explicitly. AFAIK InnoDB is the only engine that checks the FKs, but it could still be interesting to check that they are valid in the linter? e.g. if FKs are used for documentation purposes.
    • The function getCoveringKey(table *tengo.Table, fkColumns []*tengo.Column) *tengo.Index is useful for other code as well and should be moved to the tengo package as a method on tengo.Table.
    • I have only tested this with mysql 5.7.26.
    opened by johlo 9
  • Add option --skip-my-cnf to prevent automatic parsing of ~/.my.cnf

    Add option --skip-my-cnf to prevent automatic parsing of ~/.my.cnf

    To support use of multiple mysql.cnf files, or to force to use none of the regular .my.cnf settings by pointing to an empty one.

    ps. should also prove useful to work around this issue : 2019-03-14 13:06:23 [ERROR] Option host cannot be set via .my.cnf for this command but that's less important.

    feature request help wanted 
    opened by d33psky 9
  • `skeema init` appears hung if large .sql data dump file in working directory

    `skeema init` appears hung if large .sql data dump file in working directory

    Describe the bug I must be missing something because I know I've gotten this tool to work before, however I also know I had the same issue where --debug doesn't print out any logging.

    Environment

    • Skeema version: 1.8.1-community, commit 320c1f4ea6c571db20532b79643e4b7f05b7a98c, released 2022-07-28T18:57:46Z
    • Database vendor, version, OS/platform: MariaDB 10.5.15 on Debian 10
    • Any other environmental notes or special configuration:

    To Reproduce Not sure how this could be reproduced, but here are the following commands I've tried:

    • ./skeema init -h localhost -S /var/run/mysqld/mysqld.sock --schema tc -d database -u root -p --debug production
    • ./skeema init -h localhost -S /var/run/mysqld/mysqld.sock -u root -p --schema tc --debug
    • Both of the above with sudo
    • As well as both of the above from the root account
    • As well as many different iterations with and without --debug

    Each time it asks for the db password (which I know is correct because I can login via mysql), and then does nothing. The cpu usage goes to 100% and there is no output and nothing happens. Am I missing something?

    bug 
    opened by mgray88 8
  • pull, add-environment: if rewriting .skeema file, preserve comments/format

    pull, add-environment: if rewriting .skeema file, preserve comments/format

    When running skeema pull, the file .skeema is always read and re-generated.

    I believe that this is conceptionally wrong, if the .skeema file is considered an "option file". Option files and settings should always be considered read-only by programs, and never touched or modified. The only time where it makes sense for the option file to be modified is by operations that have it as their explicit purpose, for example skeema init or skeema add-environment.

    Practically, this is an issue in the following cases:

    • It is impossible to add comments in order to clarify or explain the choice for certain options. Adding comments to the .skeema file is syntactically valid, but they are removed by every single invocation of skeema pull.
    • If skeema directories and .skeema files are version-controlled (which is one of the main advantages of the skeema tool), then people with different versions of skeema will cause a change in the generator= line of the .skeema file every time they run skeema pull, even if there would be no changes otherwise. This can lead to avoidable merge conflicts.

    Would it be possible to change skeema to do one of the following?

    • a) Simply not touch the file at all and open it read-only except when skeema init or skeema add-environment are used
    • b) Not touch the file if no changes to it are required
    • c) Add an option that prevents any changes to files at all, or an option that prevents changes when an operation does not require them
    feature request 
    opened by akors 2
  • Support for MariaDB's system-versioned tables and bitemporal tables

    Support for MariaDB's system-versioned tables and bitemporal tables

    Describe the bug In MariaDB (and possibly others), system-versioned (and bitemporal) tables have a table_type of SYSTEM VERSIONED instead of BASE TABLE in information_schema.tables. As a result, any system-versioned tables are silently ignored by Skeema and the SQL files deleted during a pull.

    Environment

    • Skeema version: 1.8.0
    • MariaDB 10.3.4+

    To Reproduce

    1. Create a table with system versioning, e.g:
    CREATE TABLE t (
       x INT
    ) WITH SYSTEM VERSIONING;
    
    1. Do skeema pull. The table t will be ignored.

    Expected behavior The schema for table t would be written to t.sql.

    Additional context From my testing, this appears to be a one line fix to line 187 of internal/tengo/introspect.go by replacing

    AND t.table_type = 'BASE TABLE'
    

    with both table types:

    AND t.table_type IN ('BASE TABLE', 'SYSTEM VERSIONED')
    

    See also this PR which implements this: https://github.com/paperasteroid/skeema/pull/1

    feature request 
    opened by tris10au 3
  • RFC: use Docker CLI instead of Docker API

    RFC: use Docker CLI instead of Docker API

    This is a proposal to adjust the mechanics of Skeema's built-in Docker interactions. If you use Skeema's workspace=docker option, this change could affect you. We aren't necessarily going ahead with this change soon, or at all. Community feedback will be greatly appreciated in steering the decision.

    Background

    Skeema has built-in interactions with Docker in two places:

    • The workspace=docker option: when enabled, Skeema performs its temporary scratch-space operations on an ephemeral database instance in an automatically-managed Docker container, instead of using a temporary schema (e.g. _skeema_tmp) on your real DB instance. This option is recommended in high-volume production environments, as well as situations where Skeema is operating over a WAN/VPN with high network latency between skeema and your databases.
    • Skeema's integration testing suites use Docker extensively, to perform automated end-to-end testing against all supported database vendors and versions. In combination (MySQL + Percona Server + MariaDB), each release of Skeema Community Edition is thoroughly tested against 16 different Dockerized database images.

    These interactions currently use Docker's API, by wrapping the third-party package fsouza/go-dockerclient. This means they interact with a local Docker socket, and do not currently require a docker binary to be present.

    Proposed change

    Instead of using the Docker API, Skeema could shell out to the docker CLI, parsing JSON responses where needed (e.g. docker inspect output). This would require a docker binary to be present and in your $PATH if you wish to use workspace=docker, or if you wish to run Skeema's integration testing suite locally.

    Motivations

    Fewer Golang package dependencies, smaller binaries

    Although fsouza/go-dockerclient is a very nice library, it has quite a lot of dependencies. The vast majority of these packages handle container-related functionality that Skeema does not need or use, but it nonetheless bloats Skeema's dependency graph.

    These indirect dependencies frequently have security advisories, which aren't relevant to Skeema (since the affected dependency code paths are not used or accessible in Skeema), but nonetheless cause spurious Dependabot alerts from GitHub.

    We expect the size of the skeema binary could be reduced by over 25% just from the removal of fsouza/go-dockerclient and its dependencies.

    Compatibility with non-Docker container systems (e.g. podman)

    Podman is gaining popularity as a daemon-less, root-less alternative to Docker. For some use-cases, it can serve as a drop-in replacement for the docker binary.

    Although Podman also offers an optional network-accessible API, using it negates some of Podman's benefits. Switching Skeema's Docker interactions to use the docker binary should provide a better path for users who wish to substitute in a podman binary, or any other Docker-compatible binary.

    Future feature integrations

    Improvements in Skeema's shellout logic could be leveraged in the Docker CLI interaction code. For example, Skeema Premium CLI includes extensive SSH integration. Hypothetically, this could be used to enable secure execution of docker commands on a remote host, alongside an automatic SSH tunnel to reach the ephemeral containerized database -- without even needing to expose either the Docker daemon or the containerized database outside of localhost on the remote host.

    Potential drawbacks

    Some users enable workspace=docker while also running skeema itself inside Docker. This configuration is already a bit difficult -- it requires either bind-mounting the Docker socket into Skeema's container, or using a special Docker-in-Docker image. See #89 for more background.

    If the change proposed in this RFC is implemented, such a configuration would become slightly more difficult: in addition to bind-mounting the Docker socket into Skeema's container, you would also need to install the Docker CLI inside Skeema's container, using your base image’s packaging system. (Although bind-mounting works for the Docker socket, bind-mounting the docker binary is not recommended, as this reportedly does not function properly.)

    If you use this type of configuration, we'd love to hear your thoughts on this proposal and get a better sense of whether this would be too disruptive of a change.

    feedback wanted 
    opened by evanelias 0
  • Ability to ignore column order

    Ability to ignore column order

    In legacy production databases with multiple instances, it's not always feasible to wait for a column reorder operation to execute against a large table, particularly if there's a chance of it being interrupted by a constraint violation or the like. A flag to ignore column order when diffing/pushing would be very helpful.

    feature request 
    opened by TurqW 3
  • Can't diff partitioned table if partition name is a MySQL keyword

    Can't diff partitioned table if partition name is a MySQL keyword

    Describe the bug We've recently changed the partitioning key on one of our tables from the primary key to a timestamp.

    Before the change, skeema worked fine, after the change, skeema diff fails with:

    2021-10-23 04:40:34 [WARN]  Skipping table `snapshots`: Skeema does not support generating a diff of this table. Use --debug to see which properties of this table are not supported.
    2021-10-23 04:40:34 [DEBUG] --- Expected CREATE
    2021-10-23 04:40:34 [DEBUG] +++ MySQL-actual SHOW CREATE
    2021-10-23 04:40:34 [DEBUG] @@ -18 +18 @@
    2021-10-23 04:40:34 [DEBUG] -) ENGINE=InnoDB AUTO_INCREMENT=142294075 DEFAULT CHARSET=utf8mb4
    2021-10-23 04:40:34 [DEBUG] +) ENGINE=InnoDB AUTO_INCREMENT=142294076 DEFAULT CHARSET=utf8mb4
    2021-10-23 04:40:34 [DEBUG] @@ -20 +20 @@
    2021-10-23 04:40:34 [DEBUG] -(PARTITION start VALUES LESS THAN (0) ENGINE = InnoDB,
    2021-10-23 04:40:34 [DEBUG] +(PARTITION `start` VALUES LESS THAN (0) ENGINE = InnoDB,
    

    Looks like start is a keyword in mysql, so mysql is quoting it in SHOW CREATE TABLE, and this confuses skeema.

    Old table looked like this:

    CREATE TABLE `snapshots` (
      `snapshot_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(11) NOT NULL,
      `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    [...]
      PRIMARY KEY (`snapshot_id`),
    [...]
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    /*!50100 PARTITION BY RANGE ( snapshot_id)
    (PARTITION p3840143034 VALUES LESS THAN (3840143034) ENGINE = InnoDB,
     PARTITION p3854209492 VALUES LESS THAN (3854209492) ENGINE = InnoDB,
    [...]
     PARTITION p4276203232 VALUES LESS THAN (4276203232) ENGINE = InnoDB,
     PARTITION p4290269690 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
    

    New table looks like this:

    CREATE TABLE `snapshots` (
      `snapshot_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(11) NOT NULL,
      `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    [...]
      PRIMARY KEY (`snapshot_id`,`date`),
    [...]
    ) ENGINE=InnoDB AUTO_INCREMENT=142299500 DEFAULT CHARSET=utf8mb4
    /*!50100 PARTITION BY RANGE (UNIX_TIMESTAMP(date))
    (PARTITION `start` VALUES LESS THAN (0) ENGINE = InnoDB,
     PARTITION from201909 VALUES LESS THAN (1569902400) ENGINE = InnoDB,
    [...]
     PARTITION from202211 VALUES LESS THAN (1669870800) ENGINE = InnoDB,
     PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
    

    Environment

    • Skeema version: 1.5.3-community, commit 390663c6d7d5784e371fcf0683548e7fc0c50522
    • Database vendor, version, OS/platform: Percona Server 5.7.35-3 on CentOS 7

    To Reproduce See above.

    Expected behavior Expected not to get an error when running skeema diff

    bug 
    opened by andrein 2
Releases(v1.9.0)
  • v1.9.0(Dec 1, 2022)

    For a summary of the most important changes in this release, see the Skeema v1.9.0 release announcement blog post.

    • Environment variables may be used as option values in .skeema option files for options user, password, host, schema, port, socket, and temp-schema. This provides a flexible mechanism for dynamic configuration. (16b54e4, #101)
    • Premium CLI now includes the ability to offload the temp-schema workspace to a different database server, via the new temp-schema-environment option. The option value is set to the name of an environment (.skeema file section) which can override some or all connectivity options (host, port, socket, user, password, host-wrapper, SSH options, SSL options, etc) for determining what host to place the temp-schema workspace on. (#94)
    • Improvements to the various ignore-* options (ignore-table, ignore-proc, ignore-func, ignore-view, ignore-trigger)
      • The ignore-proc and ignore-func options, which previously were only available in the Premium edition (since v1.6.0-premium one year ago), are now available in the Community edition as well. (0de3c57)
      • The ignore options now take effect earlier in the processing flow for all commands. Workspaces skip ignored statements entirely now, improving performance and ensuring that execution cannot be affected by SQL errors from ignored statements. (b35f065)
    • Several MariaDB-specific improvements and fixes
      • MariaDB 10.10 is now fully supported, including special conversion logic for the new inet4 column type. (53de093)
      • MariaDB's November 2022 point releases (MariaDB 10.3.37, 10.4.27, 10.5.18, 10.6.11, 10.7.7, 10.8.6, 10.9.4) are now supported by Skeema. These MariaDB releases unexpectedly changed the output logic for collations in SHOW CREATE TABLE, which broke compatibility with a core safety check in Skeema. (f2dcaf8, #193, #194, #195)
      • When modifying existing procs/funcs in MariaDB, atomic CREATE OR REPLACE syntax is now used. This functionality was originally introduced in Skeema v1.6.0-premium one year ago, but is now present in the Community Edition as well. (412a326)
    • When interacting with multiple hosts (running skeema from a parent directory), it is now possible to interactively prompt for different passwords for each host, by configuring the bare password option with no =value in the same .skeema file as the host. (ab4a84c, 5e35143, b004616)
      • Previously, bare password option with no =value was only supported in global option files. This still works, and still prompts for a single "global" password rather than host-specific ones.
      • For an alternative mechanism for passing different passwords to each host, also see the new ENV variable support, mentioned above.
    • When using workspace=docker with MySQL 8, whenever Skeema creates a new ephemeral containerized DB, binary logging will be disabled automatically, despite MySQL 8 normally defaulting to enabling binlogging. This improves workspace performance, and prevents potential issues with non-deterministic CREATE FUNCTION definitions. (2804a44)

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

    Source code(tar.gz)
    Source code(zip)
    skeema_1.9.0_linux_amd64.tar.gz(3.63 MB)
    skeema_1.9.0_linux_arm64.tar.gz(3.32 MB)
    skeema_1.9.0_mac_amd64.tar.gz(3.75 MB)
    skeema_1.9.0_mac_arm64.tar.gz(3.60 MB)
    skeema_amd64.apk(3.74 MB)
    skeema_amd64.deb(3.74 MB)
    skeema_amd64.rpm(3.74 MB)
    skeema_arm64.apk(3.42 MB)
    skeema_arm64.deb(3.42 MB)
    skeema_arm64.rpm(3.43 MB)
    skeema_checksums_1.9.0.txt(886 bytes)
  • v1.8.2(Sep 14, 2022)

    • MariaDB 10.9 is now supported. (9262e29)
    • When using an interactive password prompt (--password or -p with no value), the prompt text is now normally displayed on STDERR instead of STDOUT, so that it is visible even if STDOUT is being redirected to a file. This also helps ensure that STDOUT only contains valid SQL, which can be piped/redirected to other client programs as-is if desired. (c0267f4, #188)
    • MySQL 8 cross-schema foreign key safety improvement: when using the default of workspace=temp-schema, if any foreign keys cross schema boundaries (the referenced "parent" table is in a different database than the "child" table defining the FK constraint), this can cause metadata locking conflicts in MySQL 8, since the database extends metadata locks to both sides of the FK. Skeema now automatically applies a low session-level lock_wait_timeout for its workspace=temp-schema operations in MySQL 8 to limit any performance impact from such metadata locking conflicts. Note that only cross-schema FKs (and not same-schema FKs) are affected by the root issue, and only under MySQL 8 and workspace=temp-schema. See commit message for more details. (762da89)
    • Bug fix: a nil pointer panic could occur if the network connection to the DB was extremely unstable/flaky (initial connections succeeded, but some subsequent connection attempts in the same operation failed in one particular code path). Skeema will now gracefully handle this situation with a normal error message. (d07d106)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.8.2_linux_amd64.tar.gz(3.61 MB)
    skeema_1.8.2_linux_arm64.tar.gz(3.31 MB)
    skeema_1.8.2_mac_amd64.tar.gz(3.74 MB)
    skeema_1.8.2_mac_arm64.tar.gz(3.59 MB)
    skeema_amd64.apk(3.74 MB)
    skeema_amd64.deb(3.74 MB)
    skeema_amd64.rpm(3.74 MB)
    skeema_arm64.apk(3.41 MB)
    skeema_arm64.deb(3.41 MB)
    skeema_arm64.rpm(3.42 MB)
    skeema_checksums_1.8.2.txt(886 bytes)
  • v1.8.1(Jul 28, 2022)

    • Tables with explicit TABLESPACE innodb_system or TABLESPACE innodb_file_per_table clauses are now supported for diff operations. These clauses permit overriding the server's innodb_file_per_table setting on an individual table basis. This syntax is only available in MySQL 5.7+, and is relatively rare. (9ed3f60)
    • MySQL 8 bug fix: under some rare conditions, tables can report different next AUTO_INCREMENT value in information_schema vs SHOW CREATE TABLE, even with information_schema_stats_expiry=0 which Skeema automatically uses for its sessions. When this occurred, tables were unsupported for diff operations. To solve this, Skeema now relies on the SHOW CREATE TABLE value exclusively, and these tables are now properly supported for diffs. (677d8de)
    • Internal concurrency improvements should provide performance benefits in some scenarios, such as running Skeema with high network latency, a large count of procs/funcs, and/or operating on multiple schemas at once. (f9a6bb2)
    • When Skeema is unable to generate diff DDL for a table, the extra information logged by --debug now makes it clearer which side of the diff was problematic. A similar improvement has been made to the output of --verify in the rare case of verification failing. (#52, 677d8de)
    • Whenever skeema pull or skeema add-environment needs to rewrite a .skeema file, some option values are now rewritten differently:
      • String or enum type options that have been set to an empty-string value are now rewritten to use the "skip" prefix instead. For example, lint-pk='' is now rewritten as skip-lint-pk. These configurations have the exact same effect (and in this specific example both are equivalent to lint-pk=ignore), but the empty-string value was less clear. (cf19abd)
      • Premium CLI bug fix: If a .skeema file contained strip-definer with no value (implying =true), previously these commands would incorrectly rewrite this as strip-definer= (empty value implying false). Now fixed.
    • In a sharded environment in which shards are running different server versions (e.g. some shards on MySQL 8.0.28 and others on 8.0.30), differences in the server's metadata representation of the legacy three-byte "utf8" vs "utf8mb3" charset (and corresponding collations) are now ignored by default in skeema diff and skeema push. (894530f)
    • Some unit tests and integration tests required minor improvements to handle MySQL 8.0.30's metadata changes regarding legacy three-byte utf8mb3 collations. Aside from test suite adjustments, Skeema itself was already fully compatible with MySQL 8.0.30. (28d2b0a)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.8.1_linux_amd64.tar.gz(3.54 MB)
    skeema_1.8.1_linux_arm64.tar.gz(3.26 MB)
    skeema_1.8.1_mac_amd64.tar.gz(3.66 MB)
    skeema_1.8.1_mac_arm64.tar.gz(3.52 MB)
    skeema_amd64.apk(3.66 MB)
    skeema_amd64.deb(3.66 MB)
    skeema_amd64.rpm(3.66 MB)
    skeema_arm64.apk(3.36 MB)
    skeema_arm64.deb(3.36 MB)
    skeema_arm64.rpm(3.36 MB)
    skeema_checksums_1.8.1.txt(886 bytes)
  • v1.8.0(Jun 2, 2022)

    For a summary of the most important changes in this release, see our blog post.

    • Premium CLI now includes built-in support for SSH tunnels via the new ssh and ssh-to-db options. (#119)
      • These options cover a wide range of SSH use-cases: bastion security servers / jump boxes, localhost admin database connections, running online schema change scripts from a unified Linux server, and more.
      • Fully supports several OpenSSH configuration options from ~/.ssh/config, interacting with OpenSSH ssh-agent via UNIX socket (Linux and MacOS) or named pipe (Windows), known_hosts management, automatic keep-alives, multi-hop tunnels without need for agent forwarding, and more.
    • MariaDB 10.8 is now fully supported, including descending indexes (DESC index parts), as well as functions with IN / OUT / INOUT param qualifiers (1454f21)
    • Skeema now fully supports database servers running on Windows or MacOS, regardless of object name casing or the database server's lower_case_table_names setting
      • Previously, Skeema had issues with database servers using lower_case_table_names=1 (Windows default) or lower_case_table_names=2 (MacOS default) if any table, view, or database names used uppercase characters. These issues -- which related to the database's special handling of case-insensitive filesystems -- are now fixed, and Skeema's integration testing suite covers these situations. (#65, bdc279e)
      • New linter option lint-name-case can be used to enforce an all-lowercase table/view naming scheme, if desired for portability reasons (8cb30d0)
      • Premium CLI contains view-specific fixes relating to name casing, in addition to the fixes already made in v1.7.1.
    • MySQL 8 bug fix: due to a regression in Skeema v1.7.1, tables with nonstandard default collations (meaning the table's default charset has a different default collation than the table's chosen default collation) would inadvertently cause failures in the diff verify step. This was caused by unusual/inconsistent behavior in MySQL 8's SHOW CREATE TABLE and is now fixed by using a deeper structural comparison in the verify logic. Thank you to Etsy for the report! (#184, 8bde55a)
    • skeema pull now logs several problem conditions -- query failures, file I/O errors, etc -- as an error with exit code 2, instead of a warning with exit code 1. This is more consistent with how other commands handle these conditions. (2d3d7c4)
    • Other minor internal refactors and test suite fixes (0d5d476, d4022fc)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.8.0_linux_amd64.tar.gz(3.54 MB)
    skeema_1.8.0_linux_arm64.tar.gz(3.26 MB)
    skeema_1.8.0_mac_amd64.tar.gz(3.66 MB)
    skeema_1.8.0_mac_arm64.tar.gz(3.52 MB)
    skeema_amd64.apk(3.66 MB)
    skeema_amd64.deb(3.66 MB)
    skeema_amd64.rpm(3.66 MB)
    skeema_arm64.apk(3.36 MB)
    skeema_arm64.deb(3.36 MB)
    skeema_arm64.rpm(3.36 MB)
    skeema_checksums_1.8.0.txt(886 bytes)
  • v1.7.1(Mar 30, 2022)

    • Premium CLI bug fix: When the database server uses lower_case_table_names=1 (e.g. server running on Windows, including Azure Database for MySQL) or lower_case_table_names=2 (server running on MacOS), and CREATE VIEW statements in *.sql files had view names containing uppercase characters, nil pointer panics would occur in most Skeema commands due to case sensitivity mismatches. View name casing is now handled correctly even with lower_case_table_names=1 or 2.
    • Premium CLI bug fix: In MySQL 8, if a CREATE VIEW statement supplied an explicit column list prior to the SELECT, the view was inadvertently unsupported by Skeema. This was caused by MySQL 8’s inclusion of these column list overrides in SHOW CREATE VIEW, unlike previous MySQL versions and all MariaDB versions. This view syntax (which is fairly uncommon) is now fully supported for all database versions.
    • Premium CLI license activation key timeout has been increased, and if a timeout occurs, the error is now clearer.
    • Bug fix: Tables containing generated column expressions using LIKE, or check constraints using LIKE, were inadvertently unsupported due to a logic error in Skeema’s previous prohibition of CREATE TABLE ... LIKE statements. (#181, 6cbff9c)
      • CREATE TABLE ... LIKE is now permitted for use in .sql files, and works properly in skeema diff and skeema push as long as the target table is a normal table in the same schema. The statement is evaluated dynamically, meaning any changes in the target table will be reflected properly in diffs for any tables that point to it.
      • skeema pull, skeema lint, and skeema format may overwrite CREATE TABLE ... LIKE with a normal non-dynamic CREATE TABLE. This functionality may be improved in a future release.
    • An upcoming release of MySQL 8 is expected to replace occurrences of "utf8" with "utf8mb3" in information_schema and SHOW command output. Skeema charset logic has now been improved to be more robust, in order to ensure compatibility with this upcoming change. (a03718c)
    • When manually creating or editing *.sql files, identifiers may now contain non-Latin unicode characters without requiring backticks around the identifier. Skeema’s identifier quoting rules should now match MySQL and MariaDB properly. (3e40b6c)
    • workspace=docker now logs a warning if docker-cleanup=stop or docker-cleanup=destroy fails, for example due to the Docker daemon returning an error upon attempting to stop or remove the container. (5e971e0)

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

    Source code(tar.gz)
    Source code(zip)
    skeema_1.7.1_linux_amd64.tar.gz(3.36 MB)
    skeema_1.7.1_linux_arm64.tar.gz(3.10 MB)
    skeema_1.7.1_mac_amd64.tar.gz(3.48 MB)
    skeema_1.7.1_mac_arm64.tar.gz(3.43 MB)
    skeema_amd64.apk(3.47 MB)
    skeema_amd64.deb(3.47 MB)
    skeema_amd64.rpm(3.48 MB)
    skeema_arm64.apk(3.19 MB)
    skeema_arm64.deb(3.19 MB)
    skeema_arm64.rpm(3.19 MB)
    skeema_checksums_1.7.1.txt(886 bytes)
  • v1.7.0(Jan 24, 2022)

    For a summary of the most important changes in this release, please see our blog post.

    • AWS Aurora v3 (MySQL 8) is now supported
      • The Premium edition of the Skeema CLI offers full support for Aurora, and is extensively tested against all three major versions of Aurora (AWS Aurora for MySQL 5.6, 5.7, and now 8.0).
      • Although the Community edition of the Skeema CLI is not tested against Aurora and does not officially support Aurora, it has no known incompatibilities with Aurora MySQL 8 so far.
    • MariaDB 10.7 is now supported (8e7551c)
      • The new uuid column type has special handling in diff/push operations: uuid columns may safely be converted to/from the binary(16), char(32), varchar(32), char(36), and varchar(36) column types without requiring the allow-unsafe option.
    • Linux arm64 (aarch64) builds are now available for all editions of the Skeema CLI. As with linux/amd64 (x86_64), downloads are available for linux/arm64 in formats tar.gz, rpm, deb, and apk. (#179, 3d47592)
    • Premium CLI now includes self-update functionality
      • When a newer version of the Skeema Premium CLI is available, an INFO log message will indicate this. (To reduce noise, the message only appears once every few days per installation.)
      • New command skeema update updates your installation of Skeema Premium CLI to the latest release for your operating system and CPU architecture. This is intended for use only for installations that do not use a package manager.
    • MySQL 8 edge case fixes: some tables using generated columns, DEFAULT expressions, or functional indexes were previously unsupported for diff operations. The root causes were bugs in MySQL 8's information_schema representations of expressions containing string literals. Skeema now parses expressions from SHOW CREATE TABLE when necessary to work-around the MySQL 8 information_schema problems. (bf38edb, 27b379b)
    • Files containing a UTF8 byte-order marker (BOM) are now processed correctly. This commonly occurs on Windows systems with some text editors. All editions of Skeema now properly handle UTF8 BOMs in .sql files, as well as .skeema option files. (03ef009, 77f12b1)
    • Several problem conditions in .sql files, which previously generated warnings, now emit fatal errors instead. This change is being made to improve safety, to prevent risk of Skeema misinterpreting CREATE statements which contain unfortunately-placed typos. The affected situations include .sql files containing unterminated strings/identifiers/comments; invalid characters outside of strings/identifiers/comments; unsupported statement forms CREATE TABLE ... SELECT or CREATE TABLE ... LIKE; and OS/fs/io errors opening or reading a file. (#143, 22b0b49)
    • Premium CLI views improvement: when using skeema pull --format, skeema format, or skeema lint --format without enabling the update-views option, previously only a DEBUG level log was emitted for each skipped view. A summary INFO debug log is also now emitted with a count of skipped views.
    • The alter-algorithm option now permits a value of "nocopy", for use on MariaDB 10.3+. (0916bb0)
    • In diff/push operations, the MariaDB 10.5+ inet6 column type may now be safely converted to/from char(39) or varchar(39) column types without requiring the allow-unsafe option. (0adaabd)
    • Bug fix: previously, attempting to transition between a single-char DELIMITER to a doubled version of that same delimiter (e.g., DELIMITER ;; when the previous delimiter was the default ;) did not work properly. Skeema commands do not ever automatically use this style of DELIMITER, but some users may insert it manually for multi-line procs/funcs. Skeema's .sql file processor now handles this situation correctly. (0cc8432)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.7.0_linux_amd64.tar.gz(3.36 MB)
    skeema_1.7.0_linux_arm64.tar.gz(3.09 MB)
    skeema_1.7.0_mac_amd64.tar.gz(3.48 MB)
    skeema_1.7.0_mac_arm64.tar.gz(3.42 MB)
    skeema_amd64.apk(3.36 MB)
    skeema_amd64.deb(3.36 MB)
    skeema_amd64.rpm(3.35 MB)
    skeema_arm64.apk(3.09 MB)
    skeema_arm64.deb(3.09 MB)
    skeema_arm64.rpm(3.09 MB)
    skeema_checksums_1.7.0.txt(886 bytes)
  • v1.6.0(Nov 11, 2021)

    For a summary of the most important changes in this release, please see our blog post.

    • New global option ssl-mode provides a way of configuring connection SSL/TLS preferences with identical semantics to the MySQL 5.7+ command-line client (432944e)
      • All editions support values "disabled" (don't use TLS), "preferred" (use TLS if server supports it - default value), "required" (use TLS, throw an error if server doesn't support it)
      • Premium CLI supports additional values "verify_ca" (require TLS and verify the server cert against the supplied CA) and "verify_identity" (require TLS, verify server cert, and perform strict hostname matching)
      • The previous way of configuring TLS modes via connect-options is still permitted, but now deprecated
    • Premium CLI: Several new options provide support for client-side SSL certs. These options have all been designed to mimic the exact behavior of the corresponding options in the standard mysql client. This way, if you already have them configured in ~/.my.cnf, they'll seamlessly work as-is in Skeema. (#130)
      • ssl-ca supplies a certificate authority file, for verifying the server and protecting against MITM attacks
      • ssl-cert and ssl-key specify client-side certs for auth, permitting connection with accounts that have REQUIRE X509 / REQUIRE ISSUER / REQUIRE SUBJECT attributes
      • server-public-key-path improves security and performance of unencrypted connections in recent versions of MySQL
      • ssl-verify-server-cert is equivalent to ssl-mode=verify_identity, provided for option compatibility with MariaDB's version of the command-line client
    • Premium CLI: new global option strip-definer to remove DEFINER clauses from *.sql files, and ignore them in diff comparisons, for all stored procedures, functions, views, and triggers (#146)
      • With default value of "auto", definer stripping is enabled automatically whenever Skeema's user does not have SUPER / SET_USER_ID permissions to override definers
      • Designed to simplify workflows on database-as-a-service platforms (RDS, Cloud SQL, etc) where SUPER privileges are not available; situations where each environment has a different administrative user; and companies where developers each have their own non-root MySQL user
    • Premium CLI: new global regex options ignore-proc and ignore-func permit ignoring stored procedures and functions (respectively) based on name pattern-matching (#171)
    • Premium CLI: new global regex option ignore-view may be used to ignore views based on name pattern-matching
      • Note that ignore-table still matches both tables and views, since they share a namespace; the new ignore-view option just provides an alternative which only matches views and never tables
      • If you wish to ignore all views, use ignore-view=., since this regex matches all view names
    • Premium CLI: In MariaDB 10.1+, when modifying an existing stored procedure or function, MariaDB's CREATE OR REPLACE syntax is now used automatically; since this operation permits modifying a routine in a single statement, it is not considered an unsafe action
    • Mac arm64 (Apple Silicon / M1 chip) native builds are now provided for both editions of Skeema CLI, and workspace=docker is now usable on arm64 systems (aab006f)
    • An APK package for Alpine Linux is now provided for both editions of Skeema CLI; this is especially useful in custom Dockerfiles when building small Alpine-based containers (3c4a5df)
    • If a non-InnoDB table is unsupported for diff operations, the warning message now mentions the table's storage engine as the most likely culprit (aa143db)
    • Foreign key clauses RESTRICT and NO ACTION are now treated completely equivalently by Skeema, and diffs between these two clauses will be suppressed by default (59d62f1)
    • Bug fix: foreign keys with explicit ON {UPDATE|DELETE} RESTRICT clauses were erroneously marked as unsupported-for-diff by Skeema; this especially affected in-place upgrades from pre-8.0 to 8.0 (#170, 3b52e87)
    • Bug fix: when an existing MySQL database was upgraded in-place from pre-8.0 to 8.0, some tables could be erroneously marked as unsupported-for-diff by Skeema in very specific situations involving non-default charsets and collations (150348a, 911c2ca)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.6.0_linux_amd64.tar.gz(3.35 MB)
    skeema_1.6.0_mac_amd64.tar.gz(3.47 MB)
    skeema_1.6.0_mac_arm64.tar.gz(3.41 MB)
    skeema_amd64.apk(3.35 MB)
    skeema_amd64.deb(3.35 MB)
    skeema_amd64.rpm(3.34 MB)
    skeema_checksums_1.6.0.txt(539 bytes)
  • v1.5.3(Sep 1, 2021)

    • Premium CLI bug fix: skeema push now always creates any functions prior to views, to permit creation of views which call newly-created functions in the same push operation (#168)
    • Premium CLI bug fix: skeema push now orders creation of multiple views appropriately, to permit creation of views which query other newly-created views in the same push operation
    • Premium CLI bug fix: if a table is ignored due to ignore-table, any trigger definitions associated with the table are now automatically ignored as well
    • Connection pool management improvements should provide a performance benefit in some scenarios (e636fa6)
    • Releases are now built with Golang 1.17, which slightly reduces binary size and improves performance
    • Minor logging changes (9d64b43)
      • In skeema diff and skeema push, unsafe statement errors are now logged in a way that makes the commented-out unsafe statement easier to read
      • In skeema diff and skeema push, in situations when a table cannot be diff'ed by Skeema, the warning message text has been clarified
      • When STDERR log messages span multiple lines, and STDERR isn't a TTY, each subsequent line will now repeat the log level and timestamp for easier automated parsing

    Don't forget to check out our new Premium edition of the Skeema CLI -- with added support for views, triggers, AWS Aurora, native Windows exe, and more! Along with our SaaS CI offering Skeema Cloud Linter for GitHub, these premium products help fund ongoing development of the Community edition CLI as well.

    Source code(tar.gz)
    Source code(zip)
    skeema_1.5.3_linux_amd64.tar.gz(3.40 MB)
    skeema_1.5.3_mac_amd64.tar.gz(3.52 MB)
    skeema_amd64.deb(3.41 MB)
    skeema_amd64.rpm(3.40 MB)
    skeema_checksums_1.5.3.txt(360 bytes)
  • v1.5.2(Jul 30, 2021)

    • MariaDB 10.6 is now supported (b4c58d0)
      • IGNORED indexes can be introspected and diff'ed (functionally similar to MySQL 8 INVISIBLE indexes)
      • "utf8mb3" is now used in place of "utf8" in this flavor; both forms work for the allow-charset option
    • New linter rule lint-has-enum may be used to flag any ENUM or SET columns in environments where these column types are discouraged or forbidden. (#164, b538432)
    • The lint-pk linter rule now provides more explanatory text when a table has no PK, no non-NULL unique keys, but one or more nullable unique keys, which cannot be used as an implicit PK. (2814062)
    • Premium CLI bug fix: if the one-time skeema pull upgrade step hasn't been run yet, a panic would occur when running skeema push against a database schema that doesn't exist yet, due to some view and trigger safety logic that lacked a nil guard. Now fixed.
    • Check constraints in MariaDB bug fix: if a check clause exceeded 64 characters, MariaDB releases prior to February 2021 would truncate the clause in information_schema. This in turn caused Skeema to see a partial clause, which resulted in the table being considered unsupported for diff operations. A workaround has been implemented in Skeema to parse the clause from SHOW CREATE TABLE automatically when needed. (#165, af5adc3)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.5.2_linux_amd64.tar.gz(3.42 MB)
    skeema_1.5.2_mac_amd64.tar.gz(3.52 MB)
    skeema_amd64.deb(3.43 MB)
    skeema_amd64.rpm(3.42 MB)
    skeema_checksums_1.5.2.txt(360 bytes)
  • v1.5.1(Apr 30, 2021)

    • MySQL 8.0.24: Fix diff support for tables with utf8mb3 default character set. (131f495)
    • When using the lint-charset option, an allow-charset value of "utf8mb3" now properly works as an alias for "utf8". (365b568)
    • workspace=docker now handles situations where a newly-created or restarted container's port mapping wasn't available yet at inspection time, via automatic retries. This fixes a previously-rare condition that was observed more frequently with MySQL 8.0.24 images. (03ef1e8)
    • workspace=temp-schema locking impact has been reduced for systems with many partitioned tables. (964a969)
    • skeema pull and skeema format now handle more edge-cases around adding DELIMITER commands to existing procs/funcs when needed. (9585907)
    • Skeema's statement lexer/parser now permits all unicode whitespace. Some types of whitespace are not permitted by MySQL itself, but this change allows for clearer MySQL-generated error messages in cases of accidental use of nonbreakable space or ideographic space, rather than a vague cannot-parse warning from Skeema. (7659d9b)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.5.1_linux_amd64.tar.gz(3.42 MB)
    skeema_1.5.1_mac_amd64.tar.gz(3.51 MB)
    skeema_amd64.deb(3.42 MB)
    skeema_amd64.rpm(3.41 MB)
    skeema_checksums_1.5.1.txt(360 bytes)
  • v1.5.0(Feb 25, 2021)

    • Tables with check constraints are now supported for diff operations (#86, 9eb10ec)
    • Skeema no longer defaults to forcing a strict sql_mode or innodb_strict_mode (540de97)
      • Skeema's sessions will now use whatever the server global values are set to, minus any rare problematic sql_modes (e.g. ANSI_QUOTES)
      • Users can still optionally override this using connect-options if desired
      • New linter option lint-zero-date has been added to help catch the most common strict-mode violation relevant to schema management
    • Several connection management improvements (00510a8)
      • Skeema now auto-detects when the database has been configured to use a relatively low value for max_user_connections or max_connections, and throttles down concurrency accordingly (#157)
      • The number of network round-trips per new connection has been reduced, improving performance on a WAN or VPN
      • Connection pools are closed more quickly, preventing concurrent sleeping connections during some phases of Skeema's execution
    • Several schema introspection changes and performance improvements
      • SELECTs on information_schema now use SQL_BUFFER_RESULT in order to reduce locking impact (8c64bac)
      • Introspection concurrency has been reworked to improve performance on a WAN or VPN (1978a0d, da8b355)
    • Tables with invisible columns are now supported for diff operations in MySQL 8, in addition to the previous MariaDB support (151bdd3)
    • skeema init and skeema pull now record the current version of Skeema in the new generator option, for use in future backwards-compatibility logic (1db5e93)
    • workspace=temp-schema: during cleanup, execute DROP TABLEs sequentially (no concurrency) if buffer pool is large and version is pre-8.0.23 (b608688)
    • workspace=docker: disable TLS for communication with local Dockerized instance for minor performance increase (0b35439)
    • Bug fix: handle lingering int display widths from pre-8.0.19 releases of MySQL 8 that were later upgraded to 8.0.19+ (#158, d578215)
    • Bug fix: routine bodies with particular comment format caused lexer errors (#159, 28fbe7a)
    • Bug fix: diff support for edge cases of MySQL 8 column default expressions (9e2f21c)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.5.0_linux_amd64.tar.gz(3.55 MB)
    skeema_1.5.0_mac_amd64.tar.gz(3.65 MB)
    skeema_amd64.deb(3.55 MB)
    skeema_amd64.rpm(3.54 MB)
    skeema_checksums_1.5.0.txt(360 bytes)
  • v1.4.7(Jan 5, 2021)

    • Bug fix: The duplicate index linter rule no longer erroneously flags UNIQUE keys that are a prefix subset of a larger UNIQUE key, as these may intentionally exist due to representing a different uniqueness constraint. (#152, 6493b28)
    • Bug fix: Since InnoDB does not permit adding multiple FULLTEXT keys in a single ALTER TABLE statement by default, skeema diff and skeema push will now generate multiple ALTER TABLE statements in this situation. (#150, 4696caa)
    • Logging in skeema diff and skeema push has been clarified and made more consistent in some error/warning conditions. (97e914c)
    • When a .skeema file is rewritten by skeema pull or skeema add-environment, boolean option values are now written in a clearer format. (c41c437)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.7_linux_amd64.tar.gz(3.71 MB)
    skeema_1.4.7_mac_amd64.tar.gz(3.84 MB)
    skeema_amd64.deb(3.72 MB)
    skeema_amd64.rpm(3.71 MB)
    skeema_checksums_1.4.7.txt(360 bytes)
  • v1.4.6(Nov 23, 2020)

    • Bug fix: The skeema lint and skeema format commands no longer panic if no host is defined for the current dir's configuration. (#141, #142, 2b64cea)
    • Help text: several documentation improvements have been added to the --help text, including grouping options by category for better readability, as well as linking to Skeema's new online command reference. (d6662fa, 6393249)
    • Developer internals: The "master" branch, deprecated since Skeema v1.4.4, has now been dropped to avoid confusion. The default branch for this project is "main". Additionally, compiling Skeema from source now requires Golang v1.14+. Skeema tracks Golang's official policy of supporting the two most recent Go releases. (b578d01)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.6_linux_amd64.tar.gz(2.88 MB)
    skeema_1.4.6_mac_amd64.tar.gz(3.00 MB)
    skeema_amd64.deb(2.88 MB)
    skeema_amd64.rpm(2.87 MB)
    skeema_checksums_1.4.6.txt(360 bytes)
  • v1.4.5(Jul 27, 2020)

    • Compression linter: New linter rule lint-compression checks the compression settings of InnoDB tables, ensuring that each table's compression setting is found in companion list option allow-compression. These options can be used to restrict which types/sizes of compression are permitted, or require all tables to be compressed, or require that no tables are compressed. Thank you to Etsy for generously sponsoring the development of this feature! (1ed3163)
    • MariaDB 10.5 is now fully supported in Skeema. This includes proper handling of the new inet6 column type (which can be safely converted to/from binary(16)), and detection of the new BINLOG ADMIN privilege (which affects temp-schema-binlog=auto). (a4cceec)
    • Tables using column compression in MariaDB 10.3+ are now fully supported for diff operations. (b393191)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.5_linux_amd64.tar.gz(3.21 MB)
    skeema_1.4.5_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.22 MB)
    skeema_amd64.rpm(3.21 MB)
    skeema_checksums_1.4.5.txt(360 bytes)
  • v1.4.4(Jun 24, 2020)

    • Bug fix: unexpected fatal errors when using non-root users with certain privilege combinations (5eeb835)
    • Allow (and prefer) use of SSL/TLS for encrypted database connections by default, if server supports them (8c83c18)
    • Improve support/detection of schema names used in *.sql files, such as USE statements or CREATE dbname.tablename statements (921084c, dfb65d9, c6bfb73, 76edc20)
    • skeema pull: minor changes to error handling and logging, to be more like skeema format (618c2ef)
    • Skeema's test suite and release pipeline are now run via GitHub Actions instead of Travis CI. Additionally, this repo's default branch has been renamed main.
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.4_linux_amd64.tar.gz(3.21 MB)
    skeema_1.4.4_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.21 MB)
    skeema_amd64.rpm(3.20 MB)
    skeema_checksums_1.4.4.txt(360 bytes)
  • v1.4.3(May 1, 2020)

    • New partitioning-related options for skeema init, skeema pull, skeema format, and skeema lint (4f90ec4)
    • Diff support for WITH PARSER clause of FULLTEXT index, allowing use of alternative parsers (e8b3ad4)
      • The ngram parser is now supported on Skeema.io CI for MySQL 5.7+ and Percona Server 5.7+, as this parser is preinstalled in these database versions.
    • Improve safety check that prevents inadvertent manipulation of system schemas (0ca6b8f)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.3_linux_amd64.tar.gz(3.21 MB)
    skeema_1.4.3_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.22 MB)
    skeema_amd64.rpm(3.21 MB)
    skeema_checksums_1.4.3.txt(360 bytes)
  • v1.4.2(Feb 14, 2020)

    • Diff support for tables using InnoDB transparent page compression, a feature available in MySQL 5.7+, Percona Server 5.7+, MariaDB 10.2+ (5e3a1e1)
    • Diff support for tables using column compression, a feature available in Percona Server 5.6.33+ (e7ad0a3)
    • Fixes for new edge cases in MySQL 8.0.19 (533d073, c7ee397)

    These improvements have also been deployed to Skeema.io CI, which provides automatic linting on commits and pull requests. If you store your table definitions in a github.com private repo, try Skeema.io CI soon before the free beta period closes!

    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.2_linux_amd64.tar.gz(3.20 MB)
    skeema_1.4.2_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.19 MB)
    skeema_amd64.rpm(3.18 MB)
    skeema_checksums_1.4.2.txt(360 bytes)
  • v1.4.1(Jan 10, 2020)

    This release adds diff support for tables using some relatively new MySQL and MariaDB features:

    • MySQL 8 invisible indexes, including generation of ALTER TABLE ... ALTER INDEX ... {INVISIBLE | VISIBLE} clauses to change index visibility
    • MySQL 8 index expressions
    • MySQL 8 descending index parts
    • MariaDB 10.3+ invisible columns
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.1_linux_amd64.tar.gz(3.19 MB)
    skeema_1.4.1_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.19 MB)
    skeema_amd64.rpm(3.18 MB)
    skeema_checksums_1.4.1.txt(360 bytes)
  • v1.4.0(Nov 22, 2019)

    For a complete description of new functionality, please see the release blog post.

    • Support for diffing/altering partitioned tables. Thank you to Etsy for generously sponsoring the development of this functionality! (#57)
    • Support for diffing/altering tables with generated columns (stored or virtual). (#49)
    • Sharding enhancement: the schema option now permits use of regular expressions to match existing sharded schemas that follow a common naming convention. (d73a82c)
    • New linter check: lint-has-float (d44bea3)
    • New option: temp-schema-threads (b22daf5)
    • New option: temp-schema-binlog (d385890)
    • Improvements to query timeout behavior (35c1797, b123469)
    • Option reuse-temp-schema is now deprecated; two edge case bugs in the option have been fixed. (e98d730)
    • Bug fix: lint and diff logic incorrectly viewed FULLTEXT indexes as equivalent/redundant to a BTREE index covering the same columns. (#110)
    • Bug fix: ignore LF vs CRLF differences in proc/func param lists. (ce8e022)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.4.0_linux_amd64.tar.gz(3.19 MB)
    skeema_1.4.0_mac_amd64.tar.gz(3.34 MB)
    skeema_amd64.deb(3.18 MB)
    skeema_amd64.rpm(3.18 MB)
    skeema_checksums_1.4.0.txt(360 bytes)
  • v1.3.1(Oct 11, 2019)

    This release fixes two bugs, which only affected MySQL 8.0 and Percona Server 8.0:

    • When a majority of tables in a schema contained foreign keys, deadlock errors could occur randomly, fatally interrupting Skeema's operation. (#105)
    • Skeema could panic upon introspecting tables containing a FULLTEXT index if at least one other secondary index was also present. (#106)

    Thank you to all users who submitted issues recently!

    Source code(tar.gz)
    Source code(zip)
    skeema_1.3.1_linux_amd64.tar.gz(3.16 MB)
    skeema_1.3.1_mac_amd64.tar.gz(3.31 MB)
    skeema_amd64.deb(3.15 MB)
    skeema_amd64.rpm(3.10 MB)
    skeema_checksums_1.3.1.txt(360 bytes)
  • v1.3.0(Sep 6, 2019)

    This release includes substantial enhancements to Skeema's linter functionality, permitting users to easily configure what database features to allow or prohibit in their environment. For a more complete description of new functionality, please see the release blog post.

    • 7 additional configurable linter checks have been added. Detect duplicate indexes, identify overly-small auto_increment columns, flag unusual int display widths, limit allowed definers for procs/funcs, restrict usage of several MySQL features, and more.
    • skeema diff and skeema push now automatically lint any new or modified objects.
    • Linter configuration has changed. Each linter check now has its own option, rather than being configured through the combined errors and warnings options.
    • All new linter functionality is also now available in the SaaS Skeema CI system. Add it to your GitHub schema repo and get instant linting and diffing on all pull requests!
    • Now supported: MariaDB 10.4
    • Now supported: FULLTEXT indexes
    • New command: skeema format reformats CREATE statements without otherwise linting
    • Bug fix: empty single-line comments inside the body of a proc/func were previously causing parse errors (#96)
    Source code(tar.gz)
    Source code(zip)
    skeema_1.3.0_linux_amd64.tar.gz(3.16 MB)
    skeema_1.3.0_mac_amd64.tar.gz(3.30 MB)
    skeema_amd64.deb(3.15 MB)
    skeema_amd64.rpm(3.09 MB)
    skeema_checksums_1.3.0.txt(360 bytes)
  • v1.2.6(Aug 19, 2019)

    This release contains bug fixes for several edge cases:

    • MySQL 8.0 and Percona Server 8.0: tables with multiple create options (e.g. ROW_FORMAT, STATS_AUTO_RECALC, etc) were sometimes erroneously marked as unsupported for diff. (#88)
    • Procs/funcs could not be parsed if their param list formatting contained embedded newlines, and Skeema was being run as a non-root user. (#95)
    • workspace=docker was overly cautious around image verification between runs. (f896e48)
    • Sharding options involving shelling out to an external script (host-wrapper, backtick-wrapped schema) could confusingly mis-parse the delimiter used in the script's output if any trailing newline/whitespace was present. (314163d)

    Thank you to all users who submitted issues recently!

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.6_linux_amd64.tar.gz(2.39 MB)
    skeema_1.2.6_mac_amd64.tar.gz(2.51 MB)
    skeema_amd64.deb(2.38 MB)
    skeema_amd64.rpm(2.33 MB)
    skeema_checksums_1.2.6.txt(360 bytes)
  • v1.2.5(Jul 15, 2019)

    This release includes several bug fixes:

    • Procs/funcs with inaccessible bodies are now ignored. This condition occurs when running Skeema as a non-root user with insufficient privs to manipulate these routines. Previously this caused an error. (#81)

    • In MySQL 5.5 and Percona Server 5.5, tables with multiple foreign keys were sometimes erroneously marked as unsupported for diff. This is now fixed. This bug only affected 5.5 and older. (#83)

    • skeema lint no longer panics with a stack trace if the database server is inaccessible. (#80)

    • skeema lint now reformats SQL files prior to performing linting, rather than the other way around. The previous behavior could lead to annotations with the wrong line number.

    • Some distributions of MySQL and MariaDB include extra comments in the server's version_comment variable, which could result in Skeema failing to auto-parse the vendor properly into the flavor variable. This previously affected distributions via Ubuntu, Homebrew, and possibly others. This is now fixed.

    Thank you to @johlo and @thinQ-skeema for code contributions, and to all users who submitted issues recently.

    CI beta

    If you store your schema repo on GitHub, check out the new Skeema.io CI beta! This new system automatically lints and diffs each commit and pull request, providing continuous integration for schema changes directly inside GitHub's UI.

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.5_linux_amd64.tar.gz(2.39 MB)
    skeema_1.2.5_mac_amd64.tar.gz(2.50 MB)
    skeema_amd64.deb(2.38 MB)
    skeema_amd64.rpm(2.32 MB)
    skeema_checksums_1.2.5.txt(360 bytes)
  • v1.2.4(Jun 13, 2019)

    This release includes several bug fixes and internal improvements. Most notably:

    • Users with many schemas per instance will see a major Skeema performance boost from this release, if using MySQL 5.7 or earlier, or any version of MariaDB. (The cause of the previous slowdown was not present in MySQL 8.0, so no change there.) More background in #74.

    • Skeema incorrectly marked some tables as unsupported-for-diff in MySQL 8.0.13+; this has now been fixed. More context in #78.

    • Output of skeema lint now includes more information in a few situations.

    • Users with symlinks in their schema repo may experience some side-effects of recent safety improvements in the codebase. Please open an issue if this negatively affects you.

    Changelog

    673fb36 Improve performance on servers with many schemas 728086a MySQL 8.0.13+: fix support for column default expressions 6794e9a lint: make annotation text more helpful bfdf44e lint: populate line number for mid-statement syntax errors 36aa185 workspace=docker: fix connect-options edge cases

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.4_linux_amd64.tar.gz(2.39 MB)
    skeema_1.2.4_mac_amd64.tar.gz(2.50 MB)
    skeema_amd64.deb(2.38 MB)
    skeema_amd64.rpm(2.32 MB)
    skeema_checksums_1.2.4.txt(360 bytes)
  • v1.2.3(May 15, 2019)

    • Fix support for running Skeema on a MySQL instance in Travis CI
    • Fix text bug in skeema lint annotation for column using a forbidden character set
    • skeema lint now outputs its annotations in a deterministic order
    • Add new option --skip-my-cnf to ignore ~/.my.cnf for auth info
    • New protections against various misconfigurations

    Thank you to @johlo and @blueish for code contributions, and to all users who submitted issues recently.

    Changelog

    ffa83b1 Don't prompt for password if explicitly set to blank string. Fixes #73 d39c701 lint: fix bad-charset message for columns 037cf95 lint: make sure problem messages have deterministic order d55cfbb Add option to ignore .my.cnf file aee4754 Add option --skip-my-cnf to ignore ~/.my.cnf cc00d72 Prevent manual configuration targeting system databases 007fd7b Prevent use of CREATE TABLE...LIKE and CREATE TABLE...SELECT b9aad4c init, pull: Sanitize SQL file names containing special chars

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.3_linux_amd64.tar.gz(2.38 MB)
    skeema_1.2.3_mac_amd64.tar.gz(2.50 MB)
    skeema_amd64.deb(2.37 MB)
    skeema_amd64.rpm(2.32 MB)
    skeema_checksums_1.2.3.txt(360 bytes)
  • v1.2.2(Apr 9, 2019)

    This release includes several bug fixes and robustness improvements. It also fixes support for running Skeema on database servers that use MariaDB 10.3 hosted by Amazon RDS.

    Changelog

    ce85565 Add more parser safeties and edge-case improvements cdd5ef2 More robust handling of db server vendor/version de11c16 init, pull, add-environment: Sort keys in .skeema files consistently

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.2_linux_amd64.tar.gz(2.38 MB)
    skeema_1.2.2_mac_amd64.tar.gz(2.50 MB)
    skeema_amd64.deb(2.37 MB)
    skeema_amd64.rpm(2.31 MB)
    skeema_checksums_1.2.2.txt(360 bytes)
  • v1.2.1(Mar 15, 2019)

    This release includes several bug fixes, most of which involve the new support for stored procedures and functions. If upgrading from a previous release, running skeema pull once is recommended, to re-export any procs/funcs that may have been affected by these bugs.

    Changelog

    bd0e038 Fix parser to handle a few missing edge cases 335953d Improve output for SQL statements that cannot be parsed af9a989 Option file handling: ignore host option in .my.cnf 38f40f8 Routines: treat all line-endings as UNIX-style LF 9497560 Statement parser: one more minor CRLF fix 0715253 Statement parser: support labels in procs/funcs

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.1_linux_amd64.tar.gz(2.37 MB)
    skeema_1.2.1_mac_amd64.tar.gz(2.50 MB)
    skeema_amd64.deb(2.37 MB)
    skeema_amd64.rpm(2.31 MB)
    skeema_checksums_1.2.1.txt(360 bytes)
  • v1.2.0(Mar 11, 2019)

    • Adds support for stored procedures and functions (#60)
    • Adds configurable detection of common problems to skeema lint (#59)
    • Several minor bug fixes

    If upgrading from a previous release, running skeema pull once is recommended. If your database is using stored procedures and/or functions, this will pull in their definitions into your schema repo for tracking.

    Support for stored procedures and functions generously sponsored by Psyonix.

    Changelog

    04193a8 Add support for routines (stored procs and funcs) 6170685 diff/push, pull: Fix dirs w/o *.sql; fix extra subdirs a3fd521 diff/push: New option --compare-metadata for routine metadata b142acf lint: new options for sanity-checking schemas (#59) 9d6f096 pull: Don't leave file with only dangling commands

    Source code(tar.gz)
    Source code(zip)
    skeema_1.2.0_linux_amd64.tar.gz(2.37 MB)
    skeema_1.2.0_mac_amd64.tar.gz(2.49 MB)
    skeema_amd64.deb(2.37 MB)
    skeema_amd64.rpm(2.31 MB)
    skeema_checksums_1.2.0.txt(360 bytes)
  • v1.1.3(Jan 15, 2019)

    Changelog

    bc18794 .skeema files: stop climbing dir hierarchy at repo base or $HOME a12df24 Add Percona Server 8.0, Percona Server 5.5 to supported list 212720e Extend ignore-schema to pull, lint, push/diff; other lint improvement 1548c01 Internal improvement: Allow Workspace package to use third-party providers a8180e9 Unified handling of table DDL and database DDL 0f1e67d diff/push: Fix handling of foreign key NO ACTION clauses 901df30 diff/push: Improve handling of column type change edge cases a8a3d88 push: Thread-safety fix for --concurrent-instances w/ --workspace=docker

    Source code(tar.gz)
    Source code(zip)
    skeema_1.1.3_linux_amd64.tar.gz(2.28 MB)
    skeema_1.1.3_mac_amd64.tar.gz(2.40 MB)
    skeema_amd64.deb(2.27 MB)
    skeema_amd64.rpm(2.22 MB)
    skeema_checksums_1.1.3.txt(360 bytes)
  • v1.1.2(Nov 27, 2018)

Owner
Skeema
Schema management system for MySQL and MariaDB
Skeema
GitHub's Online Schema Migrations for MySQL

gh-ost GitHub's online schema migration for MySQL gh-ost is a triggerless online schema migration solution for MySQL. It is testable and provides paus

Leon 0 Apr 3, 2020
Database schema evolution library for Go

Try browsing the code on Sourcegraph! Darwin Database schema evolution library for Go Example package main import ( "database/sql" "log" "github.

Guiabolso 134 Dec 5, 2022
SQL schema migration tool for Go.

sql-migrate SQL Schema migration tool for Go. Based on gorp and goose. Using modl? Check out modl-migrate. Features Usable as a CLI tool or as a libra

Ruben Vermeersch 2.7k Jan 2, 2023
Dbmate is a database migration tool, to keep your database schema in sync across multiple developers and your production servers.

Dbmate is a database migration tool, to keep your database schema in sync across multiple developers and your production servers. It is a stand

Adrian Macneil 3k Jan 1, 2023
Simple migration tool for MySQL

prrn Simple migration tool for MySQL This is a CLI that helps you create a DB migration file. There is no need to write up and down files from scratch

kamijin_fanta 7 Nov 10, 2021
Opinionated tool for database structure management and migrations

trek Requirements At least version 13 of postgres is needed. Installation go install . Setup Create config.yaml: model_name: <model_name> db_name: <db

Stack11 4 Dec 14, 2022
Database migrations. CLI and Golang library.

migrate Database migrations written in Go. Use as CLI or import as library. Migrate reads migrations from sources and applies them in correct order to

null 10.5k Dec 31, 2022
Database migrations. CLI and Golang library.

Database migrations written in Go. Use as CLI or import as library.

null 27 May 30, 2021
mini tools handling migrasion database from cli

mini tools handling migrasion database from cli

null 1 Dec 13, 2021
A tool to compare if terraform provider migration schema snapshot is equal to schema defined in resource code

migration schema comparer for Terraform When develop Terraform provider sometimes we need do some state migration(not schema migration) via StateUpgra

null 0 Nov 18, 2021
Schema - JSON Schema rules plugin

This plugin allows to configure JSON Schema validations rules ensuring user-submitted records adhere to a pre-defined data schema.

null 2 Feb 16, 2022
Go-mysql-orm - Golang mysql orm,dedicated to easy use of mysql

golang mysql orm 个人学习项目, 一个易于使用的mysql-orm mapping struct to mysql table golang结构

magacy 164 Jan 7, 2023
PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology management, high availability, configuration management, and plugin extensions.

What is PolarDB Cluster Manager PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology manage

null 7 Nov 9, 2022
GitHub's Online Schema Migrations for MySQL

gh-ost GitHub's online schema migration for MySQL gh-ost is a triggerless online schema migration solution for MySQL. It is testable and provides paus

GitHub 10.7k Jan 4, 2023
GitHub's Online Schema Migrations for MySQL

gh-ost GitHub's online schema migration for MySQL gh-ost is a triggerless online schema migration solution for MySQL. It is testable and provides paus

Leon 0 Apr 3, 2020
wrench - Schema management tool for Cloud Spanner -

wrench wrench is a schema management tool for Cloud Spanner. Please feel free to report issues and send pull requests, but note that this application

Cloud Spanner Ecosystem 184 Dec 19, 2022
Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package

Go-MySQL-Driver A MySQL-Driver for Go's database/sql package Features Requirements Installation Usage DSN (Data Source Name) Password Protocol Address

Go SQL Drivers 12.9k Jan 4, 2023
mysql to mysql 轻量级多线程的库表数据同步

goMysqlSync golang mysql to mysql 轻量级多线程库表级数据同步 测试运行 设置当前binlog位置并且开始运行 go run main.go -position mysql-bin.000001 1 1619431429 查询当前binlog位置,参数n为秒数,查询结

null 14 Nov 15, 2022
Quick and dirty test to compare MySQL perf between ARM64 & Rosetta MySQL on M1Pro mac

Quick and dirty test to compare MySQL perf between ARM64 & Rosetta MySQL on M1Pro mac

Chris Atkins 0 Nov 5, 2021
Beerus-DB: a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic operations

Beerus-DB · Beerus-DB is a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic

Beerus 7 Oct 29, 2022