Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-29254

Easy upgrade from MySQL 8.0 to MariaDB



    • Epic
    • Status: Open (View Workflow)
    • Major
    • Resolution: Unresolved
    • None
    • Server


      This is a list of things that needs to do if we would like to provide an 'Easy upgrade' from MySQL 8.0 to MariaDB.

      1) Using mysqldump

      • This patch should be done in any case, as it should always work independent
        of future changes in MySQL.
      • Create a script / program to be run before taking down MySQL
      • Start by scanning all MySQL tables and ensure that the tables can be
        moved to MariaDB.
      • The script would invoke mysqldump with the optimal options to create
        fastest possible dump & restore, for example using -T (create a tab
        separated file for each table).
      • If using -T, enhance mysqldump to be combine -T an --all-databases
      • In this case we should store data in 'database/tablename'
      • Optionally add a mysqldump option for compressing datafile after
        it was created (in MariaDB we could also add the option to the server).
      • Add an option to LOAD DATA to support reading compressed files
        (gzip header could be detected automatically)
      • Ensure we can dump system tables in a format usable by MariaDB.

      After running the script, there are two options for the end user:

      • Take down MySQL and install MariaDB.
      • Copy the 'table dump' to another machine with MariaDB installed. This
        could later be put as a slave for the original MySQL version.
      • We should create another script to safely read the dumped tables
        into MariaDB. This could add addition checking/work to ensure that
        all system tables are converted properly.

      2) In place conversion of MySQL 8.0 to MariaDB

      • Take down MySQL (cleanly!) and install MariaDB.
      • Start script/program to handle MariaDB to MySQL upgrade
      • Some part of the logic, like changing system tables to MariaDB, could
        be done by an external script. To be decided later

      Problems to fix:

      • Handling MySQL partition tables (same problem as in MySQL 5.7 -> MariaDB) (fixed)
      • MySQL new extended timestamp
      • Ensure that InnoDB can start with MySQL ib_logfiles (maybe these has to
        be automatically recreated, but should not be a problem if a clean shutdown
        was done).
      • Create .frm files for each table from the MYSQL system tables.
      • Can be done by using the system tables to generate a CREATE TABLE statement
        (such a program already exists) and use MariaDB internals to create an
        .frm file (most code already exists in MariaDB)
      • Loop over all InnoDB tables and convert them to MariaDB format.

      The known compatibility issues with InnoDB in MySQL and MariaDB:

      • Different log formats (should not be a problem in case of clean shutdown)
      • Different InnoDB tablespace / table format (generally)
      • Different InnoDB row format when instant alter table was used to add, drop
        or swap columns. There may also be difference when adding/dropping keys.
      • If it would be 'close to impossible' to convert these, one option would be
        to run a script on the original MySQL server to do a full table rebuild
        with ALTER TABLE for all tables. This would remove all versioned rows
        from the InnoDB tables.

      The above can of course be done on a MySQL slave and after the conversion is
      done it should be used to catch up with all data changes before retiring MySQL.


        Issue Links



              Unassigned Unassigned
              monty Michael Widenius
              0 Vote for this issue
              3 Start watching this issue



                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.