为什么要升级到MySQL8.0基于安全考虑基于性能和稳定性考虑:mgr复制,writeset的并行复制等功能,性能提升新功能:Hashjoin、windowFunction、DDLinstant、json在原有环境支持的版本太多,统一8.0版本基本达到稳定期,可以大量投入生产环境。升级前需要了解数据库字典升级schema、mysql、information_schema、performance_schema、sys例如:passwordtestmysql_native_password→caching_sha2_password2.关键字是否兼容https://dev.mysql.com/doc/refman/8.0/zh/keywords.htmlquery中添加的关键字3.SQL是否兼容Groupby处理?触发器、存储过程5.6可以运行selectid,count(*)fromgroupbyname;5.7、8.0允许sql_mode控制4、是否可以直接升级数据文件存储格式Perconal和mysql存储引擎一直是完全兼容的5、现有应用的兼容性是否满足自定义函数、一些非标准的SQL语句等。6、密码策略WhatIsNewinMySQL8.0作为DBA,需要对8.0的一些功能有一个基本的了解。参考:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.htmlAddedinAddedfeaturesFeaturesDeprecatedDeprecatedfeaturesFeaturesRemovedRemovedfeature升级准备了解8.0的特性,升级需要验证,准备测试提前Repository升级,申请验证数据库升级,出现未知问题my.cnf配置信息调整不兼容的操作方法,影响复制的顺利过滤,比如先升级一个从库,尽量减少所有从库的宕机时间,同生产数据恢复到环境,运行模拟升级、评估时间如何进行数据校验:行数、表数等考虑回滚计划数据库备份升级前检查Mysql8.0还是提供了很多方便,不像之前的5.6升级到5.7,现在您可以通过mysqlshell确认它。https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html下面2种方式#mysqlshroot:123456@192.168.244.130:3410-e'util.checkForServerUpgrade({"targetVersion":"8.0.19","configPath":"/etc/my3410.cnf"})';MySQLJS>util.checkForServerUpgrade('root@192.168.244.130:3410',{"password":"123456","targetVersion":"8.0.11","configPath":"/etc/my3410.cnf"})根据提示修改shell虽然做的不错,但是还是有一些缺陷。例如以下内容不会有提示:1.basedir,2.sql_mode,3.半同步配置,4.密码策略:default_authentication_plugin=mysql_native_password官网开始升级,下载对应的tar包https:///downloads.mysql.com/archives/community/下面是单机升级。在高可用架构下,需要先升级从库,然后逐步升级主库。执行mysql_upgrade命令,提示如下:#/mysql8.0.19/bin/mysql_upgrade-uroot-p123456在MySQL8中,mysql_upgrade客户端现已弃用。升级客户端执行的操作现在由服务器完成。要升级,请使用旧数据目录启动新的MySQL二进制文件。自动修复用户表。升级后无需重启。因此,需要在测试环境中模拟并准备相应的SQL语句。正确的操作如下:1)登录服务器正常关机:innodb_fast_shutdown默认为1,通常认为是安全关机。关闭innodb参数确认mysql>showvariableslike'innodb_fast_shutdown';+-------------------+--------+|Variable_name|值|+--------------------+--------+|innodb_fast_shutdown|1|+--------------------+--------+1rowinset(0.00sec)确保所有数据刷入硬盘,改成0mysql>setglobalinnodb_fast_shutdown=0;QueryOK,0rowsaffected(0.01sec)mysql>shutdown;QueryOK,0rowsaffected(0.00sec)*用于备份。2)直接用mysql8.0.19客户端启动mysql服务[root@ss30bin]#/opt/mysql8.0.19/bin/mysqld_safe--defaults-file=/etc/my3400.cnf--user=mysql&[1]15400[root@ss30bin]#2020-04-25T13:07:16.591560Zmysqld_safeLoggingto'/opt/data3400/logs/error.log'.2020-04-25T13:07:16.636879Zmysqld_safeStartingmysqlddaemonwithdatabasesfrom/opt/data3#mysql#打开另一个查看窗口错误日志[root@ss30~]#tail-f/opt/data3400/logs/mysql_error.log登录服务器确认[root@ss30~]#mysql-uroot-p-S/opt/data3400/mysql/mysql.sockEnterpassword:欢迎使用MySQL监视器。命令发送;或\g。您的MySQL连接是10服务器版本:8.0.19MySQLCommunityServer-GPLC版权所有(c)2000、2020、Oracle和/或其附属公司。保留所有权利。Oracle是OracleCorporation和/或其附属公司的注册商标。其他名称可能是其各自所有者的商标。c'清除当前输入的语句.mysql>selectversion();+------------+|version()|+------------+|8.0.19|+----------+1rowinset(0.01sec)没有myisam引擎mysql>SELECTtable_schema,table_name,engineFROMinformation_schema.tableswhereengine!='InnoDB';剩下的就是验证和业务确认应用是否正常,总结从升级准备到结束的全过程,包括很多细致的工作。比如版本确认、功能确认、测试、准备、备份、验证、高可用切换等等,前期准备要花很多精力,这样才能一步到位。升级完毕,接下来就是踏上8.0的使用之旅了。
