MySQL的升級相對來說還是比較簡單的。
它支持兩種方式的升級:
原地升級(In-place Upgrade)
關閉數據庫,替換舊的二進制文件,重啟數據庫,執行mysql_upgrade
邏輯升級(Logical Upgrade)
用mysqldump導出數據,安裝新的數據庫版本,將數據導入到新的數據庫中,執行mysql_upgrade
但是MySQL版本眾多,不僅有各種大版本,譬如5.1,5.5,5.6,5.7,同一個大版本中也會有各種小版本。
那麼官方支持怎麼的升級路徑呢?
1. 同一個大版本中的小版本升級,譬如5.6.25到5.6.31。
2. 跨版本升級,但只支持跨一個版本升級,譬如5.5到5.6,5.6到5.7。
3. 不支持跨版本的直接升級,譬如直接從5.1到5.6,可以先從5.1升級到5.5,再從5.5升級到5.6。
以上均是指MySQL的GA版本,從非GA版本到GA版本的升級並不支持,譬如5.6.9到5.6.10,因為前者並不是一個GA版本。
關於版本信息,可參考官方說明
http://downloads.mysql.com/archives/community/
下面演示一下原地升級
待升級版本MySQL 5.5.30
目標版本MySQL 5.6.32
設置參數
mysql> set global innodb_fast_shutdown=0; Query OK, 0 rows affected (0.00 sec)
innodb_fast_shutdown參數有三個值
0: 在數據庫關閉的時候,會執行purge操作和change buffer合並,也稱為“show shutdown”
1: 默認值,在數據庫關閉的時候,會跳過purge操作和change buffer合並,也稱為“fast shutdown”
2: 在數據庫關閉的時候,只是flush log,然後執行關閉操作。在恢復的時候可能需要較長時間的crash recovery
徹底關閉數據庫
# ./bin/mysqladmin shutdown -uroot -p123456 --socket /data/mysql.sock
更新MySQL二進制文件
在這裡,我直接使用新的二進制壓縮包
使用新的MySQL啟動
此時datadir指向原來的數據目錄
# ./bin/mysqld_safe --defaults-file=/usr/test/mysql-5.6.32-linux-glibc2.5-x86_64/my.cnf --user=mysql --ledir=/usr/test/mysql-5.6.32-linux-glibc2.5-x86_64/bin &
其中,配置文件中的內容如下
[mysqld] basedir = /usr/test/mysql-5.6.32-linux-glibc2.5-x86_64 datadir = /data port = 3310 socket = /data/mysql.sock
主要是指定了datadir
執行mysql_upgrade
# ./bin/mysql_upgrade -uroot -p123456 --socket=/data/mysql.sock Warning: Using a password on the command line interface can be insecure. Looking for 'mysql' as: ./bin/mysql Looking for 'mysqlcheck' as: ./bin/mysqlcheck Running 'mysqlcheck' with connection arguments: '--socket=/data/mysql.sock' Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--socket=/data/mysql.sock' Warning: Using a password on the command line interface can be insecure. mysql.columns_priv OK mysql.db OK mysql.event OK mysql.func OK mysql.general_log OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.host OK mysql.ndb_binlog_index OK mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.proxies_priv OK mysql.servers OK mysql.slow_log OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK Running 'mysql_fix_privilege_tables'... Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--socket=/data/mysql.sock' Warning: Using a password on the command line interface can be insecure. Running 'mysqlcheck' with connection arguments: '--socket=/data/mysql.sock' Warning: Using a password on the command line interface can be insecure. test.test OK OK
關於mysql_upgrade的作用,官方文檔說明如下:
mysql_upgrade examines all tables in all databases for incompatibilities with the current version of MySQL Server. mysql_upgrade also upgrades the system tables so that you can take advantage of new privileges or capabilities that might have been added. If mysql_upgrade finds that a table has a possible incompatibility, it performs a table check and, if problems are found, attempts a table repair.
主要是升級系統表和修復不兼容的表。
參考
1. http://dev.mysql.com/doc/refman/5.6/en/upgrading.html