Upgrading to MySQL 8.0+: a More Automated Upgrade Experience - - PowerPoint PPT Presentation

upgrading to mysql 8 0 a more automated upgrade experience
SMART_READER_LITE
LIVE PREVIEW

Upgrading to MySQL 8.0+: a More Automated Upgrade Experience - - PowerPoint PPT Presentation

Upgrading to MySQL 8.0+: a More Automated Upgrade Experience Dmitry Lenev, Software Developer Dmitry Lenev, Software Developer Oracle/MySQL, November 2018 Oracle/MySQL, November 2018 Safe Harbor Statement The following is intended to outline


slide-1
SLIDE 1

Upgrading to MySQL 8.0+: a More Automated Upgrade Experience

Dmitry Lenev, Software Developer Oracle/MySQL, November 2018 Dmitry Lenev, Software Developer Oracle/MySQL, November 2018

slide-2
SLIDE 2

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

slide-3
SLIDE 3

Agenda

  • Introduction
  • A straightforward upgrade to MySQL 8.0
  • Upgrade to MySQL 8.0 in detail
  • A better future post MySQL 8.0
slide-4
SLIDE 4

Introduction

Upgrading in general Upgrading in general

slide-5
SLIDE 5

Why upgrade MySQL installation?

  • Security concerns
  • Bug fjxes
  • Performance and Scalability
  • New features
  • Reduce tech debt for installation

━ Multiple version upgrade is complex (5.6 → 5.7 → 8.0) ━ E.g., deprecated functionality in 5.7, removed in 8.0

slide-6
SLIDE 6

Why upgrade MySQL installation?

  • Security concerns
  • Bug fjxes
  • Performance and Scalability
  • New features
  • Reduce tech debt for installation

━ Multiple version upgrade is complex (5.6 → 5.7 → 8.0) ━ E.g., deprecated functionality in 5.7, removed in 8.0

slide-7
SLIDE 7

Why upgrade MySQL installation?

  • Security concerns
  • Bug fjxes
  • Performance and Scalability
  • New features
  • Reduce tech debt for installation

━ Multiple version upgrade is complex (5.6 → 5.7 → 8.0) ━ E.g., deprecated functionality in 5.7, removed in 8.0

slide-8
SLIDE 8

Why upgrade MySQL installation?

  • Security concerns
  • Bug fjxes
  • Performance and Scalability
  • New features
  • Reduce tech debt for installation

━ Multiple version upgrade is complex (5.6 → 5.7 → 8.0) ━ E.g., deprecated functionality in 5.7, removed in 8.0

slide-9
SLIDE 9

Why upgrade MySQL installation?

  • Security concerns
  • Bug fjxes
  • Performance and Scalability
  • New features
  • Reduce tech debt for installation

━ Multiple version upgrade is complex (5.6 → 5.7 → 8.0) ━ E.g., deprecated functionality in 5.7, removed in 8.0

slide-10
SLIDE 10

Why do we postpone upgrades?

  • Do we have required knowledge?
  • Do we have required resources?
  • Do we have time?
  • Cost for doing the actual work necessary to upgrade

━ For DBAs and possibly consultants

  • Can we afgord it?

━ Cost for lost business during the switchover, depending on downtime

slide-11
SLIDE 11

Why do we postpone upgrades?

  • Do we have required knowledge?
  • Do we have required resources?
  • Do we have time?
  • Cost for doing the actual work necessary to upgrade

━ For DBAs and possibly consultants

  • Can we afgord it?

━ Cost for lost business during the switchover, depending on downtime

slide-12
SLIDE 12

Why do we postpone upgrades?

  • Do we have required knowledge?
  • Do we have required resources?
  • Do we have time?
  • Cost for doing the actual work necessary to upgrade

━ For DBAs and possibly consultants

  • Can we afgord it?

━ Cost for lost business during the switchover, depending on downtime

slide-13
SLIDE 13

Why do we postpone upgrades?

  • Do we have required knowledge?
  • Do we have required resources?
  • Do we have time?
  • Cost for doing the actual work necessary to upgrade

━ For DBAs and possibly consultants

  • Can we afgord it?

━ Cost for lost business during the switchover, depending on downtime

slide-14
SLIDE 14

Why do we postpone upgrades?

  • Do we have required knowledge?
  • Do we have required resources?
  • Do we have time?
  • Cost for doing the actual work necessary to upgrade

━ For DBAs and possibly consultants

  • Can we afgord it?

━ Cost for lost business during the switchover, depending on downtime

slide-15
SLIDE 15

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-16
SLIDE 16

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-17
SLIDE 17

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-18
SLIDE 18

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-19
SLIDE 19

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-20
SLIDE 20

Biting the Bullet

  • At some point upgrade needs to happen!
  • DBA input regarding upgrading MySQL:

━ Reducing risk and cost is key ━ T

  • tal duration of upgrade should be short

━ For customer apps, keep old MySQL behavior by default, change behavior later ━ Want to test new version gradually ━ When switching downtime should be minimal

slide-21
SLIDE 21

Upgrade to MySQL 8.0

The straightforward case The straightforward case

slide-22
SLIDE 22

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Read release notes: Conclusion – No problems
  • Run upgrade_checker

me@siv20$ ./mysqlsh root:@localhost:3307 -e "util.checkForServerUpgrade();” The MySQL server at localhost:3307 will now be checked for compatibility issues for upgrade to MySQL 8.0... MySQL version: 5.7.24 - Source distribution 1) Usage of db objects with names conflicting with reserved keywords in 8.0 No issues found 2) Usage of utf8mb3 charset No issues found …… No known compatibility errors or issues for upgrading the target server to MySQL 8 were found.

slide-23
SLIDE 23

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Read release notes: Conclusion – No problems
  • Run upgrade_checker

me@siv20$ ./mysqlsh root:@localhost:3307 -e "util.checkForServerUpgrade();” The MySQL server at localhost:3307 will now be checked for compatibility issues for upgrade to MySQL 8.0... MySQL version: 5.7.24 - Source distribution 1) Usage of db objects with names conflicting with reserved keywords in 8.0 No issues found 2) Usage of utf8mb3 charset No issues found …… No known compatibility errors or issues for upgrading the target server to MySQL 8 were found.

slide-24
SLIDE 24

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Read release notes: Conclusion – No problems
  • Run upgrade_checker

me@siv20$ ./mysqlsh root:@localhost:3307 -e "util.checkForServerUpgrade();” The MySQL server at localhost:3307 will now be checked for compatibility issues for upgrade to MySQL 8.0... MySQL version: 5.7.24 - Source distribution 1) Usage of db objects with names conflicting with reserved keywords in 8.0 No issues found 2) Usage of utf8mb3 charset No issues found …… No known compatibility errors or issues for upgrading the target server to MySQL 8 were found.

slide-25
SLIDE 25

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Backup your data directory
  • Install and start MySQL 8.0

━ In-place upgrade

  • Run mysql_upgrade

me@siv20$ ./mysql_upgrade --socket=/me/mysql/mysql.sock --port=3307 --user=root Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Upgrading system table data. Checking system database. mysql.columns_priv OK mysql.component OK mysql.db OK ... Upgrade process completed successfully.

slide-26
SLIDE 26

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Backup your data directory
  • Install and start MySQL 8.0

━ In-place upgrade

  • Run mysql_upgrade

me@siv20$ ./mysql_upgrade --socket=/me/mysql/mysql.sock --port=3307 --user=root Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Upgrading system table data. Checking system database. mysql.columns_priv OK mysql.component OK mysql.db OK ... Upgrade process completed successfully.

slide-27
SLIDE 27

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Backup your data directory
  • Install and start MySQL 8.0

━ In-place upgrade

  • Run mysql_upgrade

me@siv20$ ./mysql_upgrade --socket=/me/mysql/mysql.sock --port=3307 --user=root Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Upgrading system table data. Checking system database. mysql.columns_priv OK mysql.component OK mysql.db OK ... Upgrade process completed successfully.

slide-28
SLIDE 28

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Backup your data directory
  • Install and start MySQL 8.0

━ In-place upgrade

  • Run mysql_upgrade

me@siv20$ ./mysql_upgrade --socket=/me/mysql/mysql.sock --port=3307 --user=root Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Upgrading system table data. Checking system database. mysql.columns_priv OK mysql.component OK mysql.db OK ... Upgrade process completed successfully.

slide-29
SLIDE 29

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Restart the server and look at messages in the error log

2018-10-06T09:11:28.167169Z 0 [System] [MY-010116] [Server] /me/mysqld (mysqld 8.0.12) starting as process 27147 2018-10-06T09:11:30.261139Z 0 [System] [MY-010931] [Server] /me/mysqld: ready for

  • connections. Version: '8.0.12' socket: ’/me/mysql/mysql.sock' port: 3307 Source

distribution

  • Verify that apps and services are working as expected

━ Simple installation – we assume that can be reactive about app issues.

slide-30
SLIDE 30

MySQL upgrade 5.7 → 8.0, smooth sailing!

  • Restart the server and look at messages in the error log

2018-10-06T09:11:28.167169Z 0 [System] [MY-010116] [Server] /me/mysqld (mysqld 8.0.12) starting as process 27147 2018-10-06T09:11:30.261139Z 0 [System] [MY-010931] [Server] /me/mysqld: ready for

  • connections. Version: '8.0.12' socket: ’/me/mysql/mysql.sock' port: 3307 Source

distribution

  • Verify that apps and services are working as expected

━ Simple installation – we assume that can be reactive about app issues.

slide-31
SLIDE 31

Improvements to upgrade to MySQL 8.0

slide-32
SLIDE 32

Goals for MySQL upgrade experience

  • Upgrade to be faster and with lower risk

━ Eliminate legacy issues with metadata

  • Transition from legacy metadata handling to transactional data dictionary
  • The upgrade process will produce consistent data

dictionary

  • Help DBAs upgrading to MySQL 8.0

━ Better support preparing for upgrade

  • Added upgrade_checker to the MySQL Shell

━ Better support during upgrade

  • Added upgrade checks to MySQL Server
  • Prohibit legacy issues from entering MySQL 8.0 metadata store
slide-33
SLIDE 33

Goals for MySQL upgrade experience

  • Upgrade to be faster and with lower risk

━ Eliminate legacy issues with metadata

  • Transition from legacy metadata handling to transactional data dictionary
  • The upgrade process will produce consistent data

dictionary

  • Help DBAs upgrading to MySQL 8.0

━ Better support preparing for upgrade

  • Added upgrade_checker to the MySQL Shell

━ Better support during upgrade

  • Added upgrade checks to MySQL Server
  • Prohibit legacy issues from entering MySQL 8.0 metadata store
slide-34
SLIDE 34

Goals for MySQL upgrade experience

  • Upgrade to be faster and with lower risk

━ Eliminate legacy issues with metadata

  • Transition from legacy metadata handling to transactional data dictionary
  • The upgrade process will produce consistent data

dictionary

  • Help DBAs upgrading to MySQL 8.0

━ Better support preparing for upgrade

  • Added upgrade_checker to the MySQL Shell

━ Better support during upgrade

  • Added upgrade checks to MySQL Server
  • Prohibit legacy issues from entering MySQL 8.0 metadata store
slide-35
SLIDE 35

Goals for MySQL upgrade experience

  • Upgrade to be faster and with lower risk

━ Eliminate legacy issues with metadata

  • Transition from legacy metadata handling to transactional data dictionary
  • The upgrade process will produce consistent data

dictionary

  • Help DBAs upgrading to MySQL 8.0

━ Better support preparing for upgrade

  • Added upgrade_checker to the MySQL Shell

━ Better support during upgrade

  • Added upgrade checks to MySQL Server
  • Prohibit legacy issues from entering MySQL 8.0 metadata store
slide-36
SLIDE 36

Goals for MySQL upgrade experience

  • Upgrade to be faster and with lower risk

━ Eliminate legacy issues with metadata

  • Transition from legacy metadata handling to transactional data dictionary
  • The upgrade process will produce consistent data

dictionary

  • Help DBAs upgrading to MySQL 8.0

━ Better support preparing for upgrade

  • Added upgrade_checker to the MySQL Shell

━ Better support during upgrade

  • Added upgrade checks to MySQL Server
  • Prohibit legacy issues from entering MySQL 8.0 metadata store
slide-37
SLIDE 37

MySQL Data Dictionary before MySQL 8.0

Data Dictionary Files FRM TRG OPT System T ables (mysql.*) user proc events InnoDB System T ables

MyISAM File system InnoDB

SQL

slide-38
SLIDE 38

Transactional Data Dictionary in MySQL 8.0

Data Dictionary InnoDB

DD T able DD T able

DD T able

SQL

slide-39
SLIDE 39

Upgrade to MySQL 8.0 in detail and how upgrade_checker helps

slide-40
SLIDE 40

MySQL 8.0 features

  • Read release notes

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/ and https:// dev.mysql.com/doc/refman/8.0/en/upgrading.html

  • Read blogs on https://mysqlserverteam.com
  • New features in 8.0, and there is a lot of them

━ Transactional Data Dictionary, and Atomic DDL ━ Geography support ━ Roles ━ Persistent runtime confjguration ━ ++++

slide-41
SLIDE 41

MySQL 8.0 Deprecation/Removals, Samples

  • Features removed

━ Query Cache, Non-native partitioning

  • Options and variables removed

━ Log_errors/Log_warnings replaced by log_error_verbosity ━ Secure_auth system var, --secure_auth client option MYSQL_SECURE_AUTH from mysql options ━ SQL modes removed

  • Account management

━ The PASSWORD() function has been removed, using GRANT to create users

  • Syntaxes afgected

━ EXTENDED and PARTITIONS keywords in EXPLAIN ━ \N as synonim for NULL in SQL

slide-42
SLIDE 42

MySQL 8.0 Deprecation/Removals, Samples

  • Features removed

━ Query Cache, Non-native partitioning

  • Options and variables removed

━ Log_errors/Log_warnings replaced by log_error_verbosity ━ Secure_auth system var, --secure_auth client option MYSQL_SECURE_AUTH from mysql options ━ SQL modes removed

  • Account management

━ The PASSWORD() function has been removed, using GRANT to create users

  • Syntaxes afgected

━ EXTENDED and PARTITIONS keywords in EXPLAIN ━ \N as synonim for NULL in SQL

slide-43
SLIDE 43

MySQL 8.0 Deprecation/Removals, Samples

  • Features removed

━ Query Cache, Non-native partitioning

  • Options and variables removed

━ Log_errors/Log_warnings replaced by log_error_verbosity ━ Secure_auth system var, --secure_auth client option MYSQL_SECURE_AUTH from mysql options ━ SQL modes removed

  • Account management

━ The PASSWORD() function has been removed, using GRANT to create users

  • Syntaxes afgected

━ EXTENDED and PARTITIONS keywords in EXPLAIN ━ \N as synonim for NULL in SQL

slide-44
SLIDE 44

MySQL 8.0 Deprecation/Removals, Samples

  • Features removed

━ Query Cache, Non-native partitioning

  • Options and variables removed

━ Log_errors/Log_warnings replaced by log_error_verbosity ━ Secure_auth system var, --secure_auth client option MYSQL_SECURE_AUTH from mysql options ━ SQL modes removed

  • Account management

━ The PASSWORD() function has been removed, using GRANT to create users

  • Syntaxes afgected

━ EXTENDED and PARTITIONS keywords in EXPLAIN ━ \N as synonim for NULL in SQL

slide-45
SLIDE 45

MySQL 8.0 Deprecation/Removals, Samples

  • Features removed

━ Query Cache, Non-native partitioning

  • Options and variables removed

━ Log_errors/Log_warnings replaced by log_error_verbosity ━ Secure_auth system var, --secure_auth client option MYSQL_SECURE_AUTH from mysql options ━ SQL modes removed

  • Account management

━ The PASSWORD() function has been removed, using GRANT to create users

  • Syntaxes afgected

━ EXTENDED and PARTITIONS keywords in EXPLAIN ━ \N as synonim for NULL in SQL

slide-46
SLIDE 46

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-47
SLIDE 47

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-48
SLIDE 48

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-49
SLIDE 49

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-50
SLIDE 50

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-51
SLIDE 51

MySQL 8.0 Defaults Changes

There are a lot of changes to the defaults in 8.0, see https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ Some important ones:

  • Default characterset and collation to 'utf8mb4' and

'utf8mb4_0900_ai_ci’

  • The default/preferred authentication plugin

‘caching_sha2_password’

  • innodb_undo_tablespaces changed from 0 to 2
  • log_bin has been changed from OFF to ON
  • Upgrade from MySQL 5.7: ALTER INSTANCE ROTATE INNODB

MASTER KEY

slide-52
SLIDE 52

MySQL 8.0 Defaults Changes

  • Especially note character set and collation defaults

changes!

  • Note that for upgrading SCHEMAs from 5.7 to 8.0, each

schema has its own specifjed default charset and collation, so nothing needs to be done to preserve these

  • Rolling upgrade with 5.7 master

━ For new schemas using defaults, you will get master charset and collation on 8.0 slaves too ━ New tables in existing schemas inherit schema defaults, so “no problem”.

slide-53
SLIDE 53

MySQL 8.0 Defaults Changes

  • Especially note character set and collation defaults

changes!

  • Note that for upgrading SCHEMAs from 5.7 to 8.0, each

schema has its own specifjed default charset and collation, so nothing needs to be done to preserve these

  • Rolling upgrade with 5.7 master

━ For new schemas using defaults, you will get master charset and collation on 8.0 slaves too ━ New tables in existing schemas inherit schema defaults, so “no problem”.

slide-54
SLIDE 54

MySQL 8.0 Defaults Changes

  • Especially note character set and collation defaults

changes!

  • Note that for upgrading SCHEMAs from 5.7 to 8.0, each

schema has its own specifjed default charset and collation, so nothing needs to be done to preserve these

  • Rolling upgrade with 5.7 master

━ For new schemas using defaults, you will get master charset and collation on 8.0 slaves too ━ New tables in existing schemas inherit schema defaults, so “no problem”.

slide-55
SLIDE 55

MySQL upgrade_checker

  • New tool in MySQL 5.7 shell
  • upgrade_checker will check your MySQL 5.7 installation

readiness for upgrade

  • Clean up legacy issues

━ Running the tool on 5.7 installation, users can make changes when time permits before upgrade

  • Upgrade checker is in active development and more

checks will be added

━ Part of MySQL update releases

Note that we think it is unlikely that there are installations with all the issues explained in the following slides

slide-56
SLIDE 56

MySQL upgrade_checker

  • New tool in MySQL 5.7 shell
  • upgrade_checker will check your MySQL 5.7 installation

readiness for upgrade

  • Clean up legacy issues

━ Running the tool on 5.7 installation, users can make changes when time permits before upgrade

  • Upgrade checker is in active development and more

checks will be added

━ Part of MySQL update releases

Note that we think it is unlikely that there are installations with all the issues explained in the following slides

slide-57
SLIDE 57

MySQL upgrade_checker

  • New tool in MySQL 5.7 shell
  • upgrade_checker will check your MySQL 5.7 installation

readiness for upgrade

  • Clean up legacy issues

━ Running the tool on 5.7 installation, users can make changes when time permits before upgrade

  • Upgrade checker is in active development and more

checks will be added

━ Part of MySQL update releases

Note that we think it is unlikely that there are installations with all the issues explained in the following slides

slide-58
SLIDE 58

MySQL upgrade_checker

  • New tool in MySQL 5.7 shell
  • upgrade_checker will check your MySQL 5.7 installation

readiness for upgrade

  • Clean up legacy issues

━ Running the tool on 5.7 installation, users can make changes when time permits before upgrade

  • Upgrade checker is in active development and more

checks will be added

━ Part of MySQL update releases

Note that we think it is unlikely that there are installations with all the issues explained in the following slides

slide-59
SLIDE 59

MySQL upgrade_checker

  • New tool in MySQL 5.7 shell
  • upgrade_checker will check your MySQL 5.7 installation

readiness for upgrade

  • Clean up legacy issues

━ Running the tool on 5.7 installation, users can make changes when time permits before upgrade

  • Upgrade checker is in active development and more

checks will be added

━ Part of MySQL update releases

Note that we think it is unlikely that there are installations with all the issues explained in the following slides

slide-60
SLIDE 60

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-61
SLIDE 61

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-62
SLIDE 62

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-63
SLIDE 63

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-64
SLIDE 64

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-65
SLIDE 65

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-66
SLIDE 66

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-67
SLIDE 67

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-68
SLIDE 68

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-69
SLIDE 69

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-70
SLIDE 70

Issues detected by upgrade_checker

  • Usage of old temporal types
  • Confmicting db object names

and reserved keywords

  • Usage of utf8mb3 charset
  • Reserved table names in

mysql schema

  • Foreign key names longer

than 64 chars

  • Usage of obsolete

sql_modes

  • ENUM/SET columns with

elements longer than 255 chars

  • Usage of partitioned tables

in shared tablespaces

  • Usage of removed functions
  • Usage of removed GROUP

BY ASC/DESC

  • Issues reported by “CHECK

TABLE … FOR UPGRADE” command

slide-71
SLIDE 71

Issues detected by upgrade_checker: Example 1

The Transactional Data Dictionary is stored as tables in mysql schema, and should not confmict with user table names.

  • Detect with SQL:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql’ AND LOWER(TABLE_NAME) IN ('catalogs’, ’character_sets’....);

  • ACTION: RENAME tables with confmicting names.
slide-72
SLIDE 72

Issues detected by upgrade_checker: Example 1

The Transactional Data Dictionary is stored as tables in mysql schema, and should not confmict with user table names.

  • Detect with SQL:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql’ AND LOWER(TABLE_NAME) IN ('catalogs’, ’character_sets’....);

  • ACTION: RENAME tables with confmicting names.
slide-73
SLIDE 73

Issues detected by upgrade_checker: Example 1

The Transactional Data Dictionary is stored as tables in mysql schema, and should not confmict with user table names.

  • Detect with SQL:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql’ AND LOWER(TABLE_NAME) IN ('catalogs’, ’character_sets’....);

  • ACTION: RENAME tables with confmicting names.
slide-74
SLIDE 74

Issues detected by upgrade_checker: Example 2

In MySQL 5.7, several spatial functions available under multiple names were deprecated. E.g. PointFromText

  • Detect with SQL

━ Use I_S to check view defjnitions. E.g:

select table_name from information_schema.views where view_definition like "%function%”

━ Do similar check for routines, triggers, events, generated columns

  • ACTION: Use the new functions in 8.0 with prefjx ‘ST_’ or

‘MBR_’.

slide-75
SLIDE 75

Issues detected by upgrade_checker: Example 2

In MySQL 5.7, several spatial functions available under multiple names were deprecated. E.g. PointFromText

  • Detect with SQL

━ Use I_S to check view defjnitions. E.g:

select table_name from information_schema.views where view_definition like "%function%”

━ Do similar check for routines, triggers, events, generated columns

  • ACTION: Use the new functions in 8.0 with prefjx ‘ST_’ or

‘MBR_’.

slide-76
SLIDE 76

Issues detected by upgrade_checker: Example 2

In MySQL 5.7, several spatial functions available under multiple names were deprecated. E.g. PointFromText

  • Detect with SQL

━ Use I_S to check view defjnitions. E.g:

select table_name from information_schema.views where view_definition like "%function%”

━ Do similar check for routines, triggers, events, generated columns

  • ACTION: Use the new functions in 8.0 with prefjx ‘ST_’ or

‘MBR_’.

slide-77
SLIDE 77

Issues detected by upgrade_checker: Example 3

Data types like old style decimals, old style TIME/ DATETIME/ TIMESTAMPS etc that have persisted up until MySQL 5.7 due to binary upgrade are not supported by MySQL 8.0.

  • T

ables using these types can be identifjed by running CHECK TABLE … FOR UPGRADE or mysqlcheck tool with

  • -check-upgrade option in MySQL 5.7
  • ACTION: Fix through REPAIR TABLE and/or dump/reload

for old style varchar/decimal.

slide-78
SLIDE 78

Issues detected by upgrade_checker: Example 3

Data types like old style decimals, old style TIME/ DATETIME/ TIMESTAMPS etc that have persisted up until MySQL 5.7 due to binary upgrade are not supported by MySQL 8.0.

  • T

ables using these types can be identifjed by running CHECK TABLE … FOR UPGRADE or mysqlcheck tool with

  • -check-upgrade option in MySQL 5.7
  • ACTION: Fix through REPAIR TABLE and/or dump/reload

for old style varchar/decimal.

slide-79
SLIDE 79

Issues detected by upgrade_checker: Example 3

Data types like old style decimals, old style TIME/ DATETIME/ TIMESTAMPS etc that have persisted up until MySQL 5.7 due to binary upgrade are not supported by MySQL 8.0.

  • T

ables using these types can be identifjed by running CHECK TABLE … FOR UPGRADE or mysqlcheck tool with

  • -check-upgrade option in MySQL 5.7
  • ACTION: Fix through REPAIR TABLE and/or dump/reload

for old style varchar/decimal.

slide-80
SLIDE 80

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-81
SLIDE 81

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-82
SLIDE 82

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-83
SLIDE 83

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-84
SLIDE 84

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-85
SLIDE 85

Once the upgrade_check runs clean

  • Backup your data directory
  • Install and start new MySQL 8.0 version
  • Run mysql_upgrade
  • Restart the server and inspect the error log
  • Reconnect apps and verify that they work as expected
  • Attempt to upgrade without a clean upgrade_checker

run will abort the upgrade

slide-86
SLIDE 86

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-87
SLIDE 87

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-88
SLIDE 88

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-89
SLIDE 89

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-90
SLIDE 90

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-91
SLIDE 91

Testing applications against new version

Apps might require testing against upgraded server. Some strategies:

  • No testing (works when you can afgord being reactive)
  • Upgrade one of slaves and test against it
  • Mirroring load to test system (proxy and replay tools)
  • Predefjned test scenarios
  • On SQL layer, on app layer
  • ...
  • Benchmarks
slide-92
SLIDE 92

A better future with MySQL 8.0 →

slide-93
SLIDE 93

Upgrade MySQL 8.0 →

  • How can we continue improving the upgrade?

━ We want to reduce time and risk even further

  • Bulk of time spent for in-place upgrade of MySQL:

━ Harvest metadata for analysis ━ Examine all user tables

slide-94
SLIDE 94

Upgrade MySQL 8.0 →

  • How can we continue improving the upgrade?

━ We want to reduce time and risk even further

  • Bulk of time spent for in-place upgrade of MySQL:

━ Harvest metadata for analysis ━ Examine all user tables

slide-95
SLIDE 95

Transactional Data Dictionary in MySQL 8.0

Data Dictionary InnoDB

DD T able DD T able

DD T able

SQL

slide-96
SLIDE 96

Upgrade MySQL 8.0 →

  • MySQL now stores all metadata in InnoDB (Done)

━ Enables fast metadata analysis with SQL-queries

  • Added metadata for versioning (Done)

━ The new mysqld executable knows which version it is upgrading from

  • Improved protection of metadata good for security

reasons (Partly done)

━ Enforced metadata integrity

  • Remove need for mysql_upgrade client (WIP)

━ Move functionality to mysqld ━ Docker container friendly

slide-97
SLIDE 97

Upgrade MySQL 8.0 →

  • MySQL now stores all metadata in InnoDB (Done)

━ Enables fast metadata analysis with SQL-queries

  • Added metadata for versioning (Done)

━ The new mysqld executable knows which version it is upgrading from

  • Improved protection of metadata good for security

reasons (Partly done)

━ Enforced metadata integrity

  • Remove need for mysql_upgrade client (WIP)

━ Move functionality to mysqld ━ Docker container friendly

slide-98
SLIDE 98

Upgrade MySQL 8.0 →

  • MySQL now stores all metadata in InnoDB (Done)

━ Enables fast metadata analysis with SQL-queries

  • Added metadata for versioning (Done)

━ The new mysqld executable knows which version it is upgrading from

  • Improved protection of metadata good for security

reasons (Partly done)

━ Enforced metadata integrity

  • Remove need for mysql_upgrade client (WIP)

━ Move functionality to mysqld ━ Docker container friendly

slide-99
SLIDE 99

Upgrade MySQL 8.0 →

  • MySQL now stores all metadata in InnoDB (Done)

━ Enables fast metadata analysis with SQL-queries

  • Added metadata for versioning (Done)

━ The new mysqld executable knows which version it is upgrading from

  • Improved protection of metadata good for security

reasons (Partly done)

━ Enforced metadata integrity

  • Remove need for mysql_upgrade client (WIP)

━ Move functionality to mysqld ━ Docker container friendly

slide-100
SLIDE 100

Upgrade MySQL 8.0 → the GREAT news

The traditional MySQL upgrade revisited:

  • 1. Stop old MySQL Server
  • 2. Change binaries to new MySQL Server version
  • 3. Adjust confjg, my.cnf of new server version
  • 4. Start new MySQL Server
  • Analyze metadata and automatically upgrade, making upgrade

process fast

  • 5. Run mysql_upgrade to possibly upgrade system and

user tables

  • Potentially time consuming
  • 6. Restart MySQL server
  • Reduces downtime, container/docker friendly.
slide-101
SLIDE 101

Upgrade MySQL 8.0 → the GREAT news

The traditional MySQL upgrade revisited:

  • 1. Stop old MySQL Server
  • 2. Change binaries to new MySQL Server version
  • 3. Adjust confjg, my.cnf of new server version
  • 4. Start new MySQL Server
  • Analyze metadata and automatically upgrade, making upgrade

process fast

  • 5. Run mysql_upgrade to possibly upgrade system and

user tables

  • Potentially time consuming
  • 6. Restart MySQL server
  • Reduces downtime, container/docker friendly.
slide-102
SLIDE 102

Upgrade MySQL 8.0 → the GREAT news

The traditional MySQL upgrade revisited:

  • 1. Stop old MySQL Server
  • 2. Change binaries to new MySQL Server version
  • 3. Adjust confjg, my.cnf of new server version
  • 4. Start new MySQL Server
  • Analyze metadata and automatically upgrade, making upgrade

process fast

  • 5. Run mysql_upgrade to possibly upgrade system and

user tables

  • Potentially time consuming
  • 6. Restart MySQL server
  • Reduces downtime, container/docker friendly.
slide-103
SLIDE 103

Upgrade MySQL 8.0 → the GREAT news

The traditional MySQL upgrade revisited:

  • 1. Stop old MySQL Server
  • 2. Change binaries to new MySQL Server version
  • 3. Adjust confjg, my.cnf of new server version
  • 4. Start new MySQL Server
  • Analyze metadata and automatically upgrade, making upgrade

process fast

  • 5. Run mysql_upgrade to possibly upgrade system and

user tables

  • Potentially time consuming
  • 6. Restart MySQL server
  • Reduces downtime, container/docker friendly.
slide-104
SLIDE 104

Summary: Upgrade MySQL 8.0 →

  • Lowers risk

━ The upgrade_checker identifjes potential issues

  • In active development
  • Faster upgrade process

━ Fast metadata analysis ━ Fast metadata upgrade ━ Removal of mysql_upgrade

  • Simplifjed upgrade process

━ Fewer steps ━ Automatic metadata upgrade

slide-105
SLIDE 105

Summary: Upgrade MySQL 8.0 →

  • Lowers risk

━ The upgrade_checker identifjes potential issues

  • In active development
  • Faster upgrade process

━ Fast metadata analysis ━ Fast metadata upgrade ━ Removal of mysql_upgrade

  • Simplifjed upgrade process

━ Fewer steps ━ Automatic metadata upgrade

slide-106
SLIDE 106

Summary: Upgrade MySQL 8.0 →

  • Lowers risk

━ The upgrade_checker identifjes potential issues

  • In active development
  • Faster upgrade process

━ Fast metadata analysis ━ Fast metadata upgrade ━ Removal of mysql_upgrade

  • Simplifjed upgrade process

━ Fewer steps ━ Automatic metadata upgrade

slide-107
SLIDE 107

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-108
SLIDE 108

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-109
SLIDE 109

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-110
SLIDE 110

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-111
SLIDE 111

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-112
SLIDE 112

Recap: Upgrade to MySQL 8.0

  • Prepare you upgrade (release notes, resources)
  • DO run the upgrade_checker

━ Fix issues until it runs clean

  • TEST your applications on MySQL 8.0
  • DO your backup
  • Upgrade to MySQL 8.0
slide-113
SLIDE 113

Try for yourself!

  • Downloadable 8.0.13
  • http://dev.mysql.com/
  • Enjoy and give us feedback!
  • Thank you!
slide-114
SLIDE 114

MySQL Upgrade Resources

  • https://dev.mysql.com/doc/refman/8.0/en/upgrading-strategies.html
  • https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html
  • https://mysqlserverteam.com/inplace-upgrade-from-mysql-5-7-to-mysql-8-0/
  • https://mysqlserverteam.com/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/
  • https://mysqlserverteam.com/mysql-shell-8-0-4-introducing-upgrade-checker-utility/
  • https://mysqlserverteam.com/upgrading-to-mysql-8-0-with-spatial-data/
  • https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/
  • https://mysqlserverteam.com/upgrading-your-mysql-server-farm/