[MDEV-29254] Easy upgrade from MySQL 8.0 to MariaDB Created: 2022-08-05  Updated: 2023-09-29

Status: Open
Project: MariaDB Server
Component/s: Server
Fix Version/s: None

Type: Epic Priority: Major
Reporter: Michael Widenius Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: upgrade

Issue Links:
PartOf
is part of MDEV-28906 MySQL 8.0 desired compatibility Open
Relates
relates to MDEV-23630 mysqldump to logically dump system ta... Closed

 Description   

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.


Generated at Thu Feb 08 10:07:05 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.