mysql升级

来源:互联网 发布:娃娃编程scratchjr安卓 编辑:程序博客网 时间:2024/05/20 23:36

mysql的升级支持2中方式:
1in-planace的升级,这种方式就是关闭老版本的实例,使用新的mysql替换老的,用新的mysql去使用之前的数据文件启动,然后运行mysql_upgrade.
2逻辑升级,使用mysqldump将数据导出,导入到新的版本中,然后在运行mysql_upgrade.

升级之前的准备:
1备份当前数据库,包含mysql库
2阅读新版本的release notes
3查看changes affecting upgrades to mysql5.6

使用in-place方式升级
1mysql -u root -p –execute=”SET GLOBAL innodb_fast_shutdown=0”
2关闭老的mysql实例
mysqladmin -u root -p shutdown
3替换mysql二进制文件
4使用之前的数据目录启动mysql
mysqld_safe –user=mysql –datadir=/path/to/existing-datadir
5运行mysql_upgrade
mysql_upgrade -u root -p
6关闭重启mysql,检查配置,日志
升级复制模式
需要先升级slave,在slave升级后,停止master,升级master到slave的版本,启动master,一些升级需要你删掉并重建数据库对象,为了安全进行这些操作,具体操作步骤按下面的方式:
1停止所有的slave,升级,使用–skip-slave-start重启,修复表或重建对象。
2在master上禁止二进制日志设置sql_log_bin=0
3修复表
4在主库上重新启用二进制日志
5重启从库,使用–skip-slave-start选项。
升级到5.7的change
https://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html

遇到的问题:
在升级的过程中,先升级了从库,使用5.7的命令启动5.6的数据文件,但是在error中报错
[ERROR] unknown variable ‘innodb_additional_mem_pool_size=16M’
这个参数是保存数据字典的信息及其他内部数据结构的空间,在5.7.4版本中移除了,移除的原因参考:
http://mysql.taobao.org/monthly/2016/04/01/

早期操作系统的内存分配器性能和可伸缩性较差,并且当时没有适合多核心CPU的内存分配器。所以,InnoDB 实现了一套自己的内存分配系统,做为内存系统的参数之一,引入了innodb_additional_mem_pool_size。

随着多核心CPU的广泛应用和操作系统的成熟,操作系统能够提供性能更高、可伸缩性更好的内存分配器,包括 Hoard、libumem、mtmalloc、ptmalloc、tbbmalloc 和 TCMalloc 等。InnoDB 实现的内存分配器相比操作系统的内存分配器并没有明显优势,所以在之后的版本,会移除 innodb_additional_mem_pool_size 和 innodb_use_sys_malloc 两个参数,统一使用操作系统的内存分配器。

thread_concurrency这个参数是针对solaris8及早期版本的,在5.7.2版本也移除了。