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.
Issues
  • 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
  • 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 WaltWh 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
  • Disable lint rule for a table/column

    Disable lint rule for a table/column

    Hi, thanks for this great project!

    Some other linters like ESLint allow granular lint control. Is there a way to disable a lint rule for a particular table/column? Something like:

    create table `foo` (
      `id` int(11) unsigned NOT NULL
    ) ENGINE=Archive # ignore: InnoDB engine
    
    feature request 
    opened by kunagpal 5
  • Ability to pass options to alter-wrapper script

    Ability to pass options to alter-wrapper script

    I recently tried to make a change to a large database table to add a unique key. Since it was a large table and I have alter-wrapper and alter-wrapper-min-size set appropriately, skeema correctly determined that it should run the alter-wrapper script which was configured to be pt-online-schema-change.

    However, according to pt-online-schema-change's documentation:

    Using pt-online-schema-change to add an unique index on the unique_id field, will cause some rows to be lost due to the use of INSERT IGNORE to copy rows from the source table. For this reason, pt-online-schema-change will fail if it detects that the --alter parameter is trying to add an unique key and it will show an example query to run to detect if there are rows that will produce duplicated indexes.

    It appears the correct way to get around this issue (assuming you have cleared your table of duplicate data according to the unique constraint) is to pass the following option to pt-online-schema-change: --nocheck-unique-key-change

    I don't want to add that option to the alter-wrapper setting as this error message is a helpful reminder to those making such changes (much like the "not safe" warnings from skeema when making certain changes). Would it be possible to introduce a way for skeema to pass such options on to the alter-wrapper when a user executes a skeema command?

    feature request 
    opened by jearle-dealnews 2
  • skeema pull --skip-format: implicit secondary index from FK not added

    skeema pull --skip-format: implicit secondary index from FK not added

    If a script file defines a foreign key but does not define a secondary index (key) for the FK column is pushed MySQL adds a secondary index but a subsequent skeema pull does not add that newly created index back into the script file.

    This, in my perspective, is a bug. It's a new entity that exists and should now be reflected in the script file. A new skeema init will reflect this.

    I'm seeing this behavior using skeema 1.4.2 against Aurora MySQL 5.6

    opened by zylo47 3
  • Support for Pre/Post Deployment Scripts

    Support for Pre/Post Deployment Scripts

    I don't see any way to enable execution of pre/post deployment scripts. These scripts would (could) be used to run changes that are not supported by Skeema or, in my case, DML that wouldn't belong in the main Skeema project.

    An example is if you look at how SQL Server Data Tools works. It's a declarative state based database project but you can define 1 script file as a "predeployment" script and another script file as a "postdeployment" script. This script can use include syntax to call other scripts. I have primarily used this in the past to support DML changes before/after the main DDL process executes. Liquibase is a migration based change tool but works similarly to how the SSDT pre/post deployment script task works. it also logs all changes to a table using an id, author, and filename so no single file executes twice.

    Would it be possible to get a feature like this added? Simply defining an optional pre-deployment script file that gets executed before the skeema push and an optional post-deployment script file that gets executed after the skeema push would be helpful even if there were no other additional logic added. Being able to source files like the mysql command line tool would be enough to allow any configuration needed. (see this SO link for reference on the file sourcing https://stackoverflow.com/questions/1976396/mysql-include-a-script-within-script)

    Execution would look like this

    1. execute pre-deployment script (if exists)
    2. execute skeema push
    3. execute post-deployment script (if exists)

    This would be very useful for any data manipulation that has to occur in say a dev pipeline or also for initialization data to be added to the db.

    feature request 
    opened by zylo47 1
Releases(v1.8.0)
  • 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)

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

    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)

  • v1.1.0(Nov 9, 2018)

  • v1.0.6(Oct 30, 2018)

    Changelog

    51f1564 Docs: Escape brackets in ipv6 format example d4b703d Fix handling of aggressive server wait_timeout 1d7a994 Fixes for help handler 42d3772 Major internal refactor to use subpackages c00b7d1 Merge pull request #44 from skeema/subpackage-refactor 135162a Minor cleanups after reviewing the code in this branch 2ba95f9 Travis: Add applier package to gofmt check 05d2622 init, add-environment: persist more options if specified on CLI 04e997f workspace: Fix integration test setup for mysql 5.5 2718d22 workspace: Refactor locking logic to use sql.Conn instead of sql.Tx

    Source code(tar.gz)
    Source code(zip)
    skeema_1.0.6_linux_amd64.tar.gz(2.06 MB)
    skeema_1.0.6_mac_amd64.tar.gz(2.17 MB)
    skeema_amd64.deb(2.06 MB)
    skeema_amd64.rpm(2.01 MB)
    skeema_checksums_1.0.6.txt(360 bytes)
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 130 Apr 26, 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.5k Jun 21, 2022
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 2.6k Jun 22, 2022
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 3 Jan 7, 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 9k Jun 26, 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 88 Jun 27, 2022
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 8 Dec 15, 2021
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.1k Jul 2, 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

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 159 Jun 14, 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.4k Jun 30, 2022
mysql to mysql 轻量级多线程的库表数据同步

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

null 13 Jun 14, 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 6 Mar 5, 2022
Golang mysql orm, a personal learning project, dedicated to easy use of mysql

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

magacy 1 Dec 30, 2021
A CLI for generating ER diagrams for Ent schema

enter A CLI for generating ER (entity-relationship) diagrams for Ent schema using mermaid.js.

Ariel Mashraki 91 Jun 21, 2022
MySQL replication topology management and HA

orchestrator [Documentation] orchestrator is a MySQL high availability and replication management tool, runs as a service and provides command line ac

null 4.6k Jun 28, 2022
The MySQL Cluster Autopilot Management with GTID and Raft

Xenon Overview Xenon is a MySQL HA and Replication Management tool using Raft protocol. Xenon has many cool features, such as: Fast Failover with no l

RadonDB 609 Jun 19, 2022
A tool for secrets management, encryption as a service, and privileged access management

Vault Please note: We take Vault's security and our users' trust very seriously. If you believe you have found a security issue in Vault, please respo

HashiCorp 24.3k Jun 23, 2022
A tool for secrets management, encryption as a service, and privileged access management

Deploy HCP Vault & AWS Transit Gateways via Terraform https://medium.com/hashicorp-engineering/deploying-hcp-vault-using-the-hcp-terraform-provider-5e

Temur Yunusov 0 Nov 23, 2021
Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd data, and intelligent diagnosis.

Kstone 中文 Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd

TKEStack 544 Jun 27, 2022
Zms - The Bhojpur ZMS is a software-as-a-service product applied in different risk management areas. It is a containment Zone Management System based on Bhojpur.NET Platform.

Bhojpur ZMS - Zone Management System The Bhojpur ZMS is a software-as-a-service product used as a Zone Management System based on Bhojpur.NET Platform

Bhojpur Consulting 0 Jan 2, 2022
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 130 Apr 26, 2022