1、概述mysql
Linux MySQL 5.7二进制 小版本升级,升级前须要备份数据和mysql主配置文件my.cnf 对数据字典的升级数据字典有:mysql、information_schema、performance_schema、sys schema。 MySQL升级的两种方式: in-place upgrade: 适合小版本的升级。 即 关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade. 特色:不改变数据文件,升级速度快;但,不能够跨操做系统,不能够跨大版本(5.5—>5.7). logical upgrade: 适合不一样操做系统的MySQL升级,大版本之间的升级。 即:使用mysqldump 或 mydumper 导入导出数据,实现版本的升级。 特色:能够跨操做系统,跨大版本;但,升级速度慢,容易出现乱码等问题。
2、小版本升级
in-place upgrade方式linux
in-place upgrade包括关闭旧的MySQL服务器,用新的MySQL服务器替换旧的MySQL二进制文件或软件包,在现有数据目录上从新启动MySQL,以及运行mysql_upgrade。 2.1 XA事务InnoDB 若是您使用XA事务InnoDB,请XA RECOVER在升级以前运行以检查未提交的XA事务。若是返回结果,则经过发出XA COMMIT或 XA ROLLBACK声明来提交或回滚XA事务。 2.2 配置MySQL以经过设置innodb_fast_shutdown为 执行慢速关闭 0。 mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" 在关闭过程当中,InnoDB执行彻底清除并在关闭以前更改缓冲区合并,这可确保在发布版本之间存在文件格式差别时彻底准备好数据文件。 2.3 关闭旧的MySQL服务器 mysqladmin -u root -p shutdown 2.4 安装新的MySQL二进制包 下载,解压新的MySQL二进制分发包; 受权:chown -R mysql.mysql /usr/loacl/mysql_new 把MySQL的软链接指向新的mysql服务 unlink /usr/loacl/mysql ln -s /usr/loacl/mysql_new /usr/loacl/mysql 2.5 使用现有数据目录启动新MySQL 5.7服务器 mysqld_safe --user=mysql --datadir=/path/to/existing-datadir 2.6 运行mysql_upgrade mysqlcheck --no-defaults --check-upgrade --databases --auto-repair /usr/loacl/mysql_new/bin/mysql_upgrade -u root -p mysql_upgrade检查全部数据库中的全部表是否与当前版本的MySQL不兼容。mysql_upgrade还会升级mysql系统数据库,以便您能够利用新的权限或功能。 注意 mysql_upgrade不会升级帮助表的内容。 2.7 关闭并从新启动MySQL服务器以确保对系统表所作的任何更改都生效 mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
logical upgradesql
逻辑升级涉及使用备份或导出实用程序(如mysqldump)从旧MySQL实例导出SQL ,安装新的MySQL服务器以及将SQL应用于新的MySQL实例。 简单说明逻辑升级就是导出数据,而后升级,最后再导入数据;安全性高,主要针对数据量不大的数据库;经常使用的工具:mysqldump和Xtrabackup。 3.1 从之前的MySQL安装中导出现有数据: mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql 注意 若是数据库包含存储的程序, 请使用--routines和 mysqldump的--events选项 (如上所示)。该 选项包括转储中的全部数据库,包括保存系统表的 数据库。 --all-databasesmysql 重要 若是您有包含生成列的表,请使用MySQL 5.7.9或更高版本提供的mysqldump实用程序来建立转储文件。早期版本中提供的 mysqldump实用程序对生成的列定义使用了错误的语法(Bug#20769542)。您可使用该 INFORMATION_SCHEMA.COLUMNS 表来标识具备生成列的表。 3.2 关闭旧的MySQL服务器 mysqladmin -u root -p shutdown 3.3 安装MySQL 5.7 参考: mysql 5.7.21 二进制安装 3.4 初始化新数据目录 mysqld --initialize --datadir=/path/to/5.7-datadir 复制'root'@'localhost' 显示在屏幕上的临时密码或写入错误日志以供往后使用。 3.5 使用新数据目录启动MySQL 5.7服务器: mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir 3.6 重置root密码: shell> mysql -u root -p Enter password: **** <- enter temporary root password mysql> ALTER USER USER() IDENTIFIED BY 'your new password'; 3.7 将先前建立的转储文件加载到新的MySQL服务器中 mysql -u root -p --force < data-for-upgrade.sql 注意 gtid_mode=ON若是转储文件包含系统表, 则不建议在服务器()上启用GTID时加载转储文件。 mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,而且在启用GTID时不容许这种组合。另请注意,将启用了GTID的服务器中的转储文件加载到启用了GTID的另外一台服务器中会致使生成不一样的事务标识符。 3.8 运行mysql_upgrade mysql_upgrade -u root -p mysql_upgrade检查全部数据库中的全部表是否与当前版本的MySQL不兼容。mysql_upgrade还会升级mysql系统数据库,以便您能够利用新的权限或功能。 注意 mysql_upgrade不会升级帮助表的内容。 3.9 关闭并从新启动MySQL服务器以确保对系统表所作的任何更改都生效。 mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir
3、大版本升级
概述shell
升级前的准备: 提早作好备份。 了解新版本变动的信息(哪些再也不兼容,再也不支持哪些功能) 在官方网站的general information—>what is new in mysql 5.7 升级的注意事项: 确认新版本是否有重大变动 注意 SQL mode 的变化 好比:在MySQL5.7中发生了SQL mode的变化,对再也不支持的SQL mode,部分SQL会跑不通,此时能够清空SQL mode,跑完以后在设置SQL mode。 升级成功后,确认业务SQL是否能够跑通 程序层是否都正常 有时原使用的程序语言部份内容不被支持新版本数据库。好比,在5.1时用的是PHP4.0,但升级到5.6,PHP的某些函数不被支持。 在升级完成以后,必定要在测试时使用和线上版本相同的程序,测试是否存在问题。 存储引擎的变化 好比:在将来的5.8版本,再也不支持myisam 引擎。 注意字符集的乱码问题
in-place upgrade数据库
环境: 5.6.15 —>5.7.26 升级前的准备: 备份+留意新版本的变动内容 升级操做: 一、对5.7的软件包,下载,解压 #tar -xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql5.7 二、关闭当前MySQL(5.6) #mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" #mysqladmin -u root -p shutdown 三、替换二进制文件(5.7 替换 5.6) #cd /usr/local #mv mysql mysql5.6 #mv mysql5.7 mysql 四、使用现有的数据目录启动MySQL #mysqld_safe --user=mysql -p --skip-grant-tables --datadir=/data/mysql/data 五、检查全部表是否与当前版本兼容,并更新系统库 #mysql_upgrade -uroot -p 注:mysql_upgrade的做用是检查全部库的全部表是否与当前的新版本兼容,并更新系统库。 六、重启,确保对系统表所作的变动得以生效 #mysqld --defaults-file=/etc/my.cnf & #mysql -uroot -p 至此,升级完成。
跨大版本升级centos
一 数据备份 (1)查看当前版本: [root@centos ~]# mysql -V (2)备份数据: [root@centos ~]# mysqldump -u root -h 127.0.0.1 -P 3306 -p --all-databases > databases.sql (3)备份my.cnf配置文件: [root@centos ~]# cp /etc/my.cnf /home/ #在关闭MySQL的进程后开始升级 [root@localhost ~]# cd /usr/local/ [root@localhost local]# rm -rf mysql [root@localhost local]# tar -jxvf /usr/local/src/mysql-5.7.26-linux-glibc2.5-x86_64.tar.bz2 -C ./ [root@localhost local]# mv mysql-5.7.26-linux-glibc2.5-x86_64 mysql [root@localhost local]# cat /etc/ld.so.conf.d/mysql.conf#检查lib路径是不是对的/usr/local/mysql/lib [root@localhost local]# ldconfig -v#从新加载最新的包到系统中,注意若是是依赖于MySQL的一些软件可能须要从新编译 [root@localhost local]# /etc/init.d/mysqld start#尝试启动,注意在MySQL 5.7中部分变量参数有取消,最好是在另一台已安装的MySQL 5.7的服务器上查询my.cnf中的变量是否有存在,如不存在说明在新版本中已取消该参数须要删除直到启动为止 [root@localhost local]# /usr/local/mysql/bin/mysql_upgrade -u root -p#使用mysql_upgrade更新升级 在支持mysql_upgrade中会对旧版本的数据进行检查修改,确认升级成功后会进行升级,在升级完成后在databasedir下会生成mysql_upgrade_info记录最新的MySQL版本,启动MySQL,升级完毕
4、数据库升级建议及注意事项安全
升级部分并没有太多区别和不一样,更多须要注意版本升级后的不兼容,特性或函数的引用,以及SQL_mode的变动,须要业务进行配合测试,导致升级后数据与原数据无异样,才算升级成功,望知悉,并有测试环境进行配合测试。