升级的方法一般有两类:
1.利用mysqldump来直接导出sql文件,导入到新库中,这种方法最省事也最保险
缺点:大库的mysqldump费时费力。
2.直接替换掉 mysql 的安装目录和 my.cnf,利用 mysql_upgrade 来完成系统表的升级,这种方法需要备份原有的文件,但属于物理拷贝,速度较快。
缺点:跨版本升级不推荐这么做,比如mysql5.1升级到mysql5.6,mysql5.5升级到mysql5.7等。
本文采用的是第二种方法升级。
 
本文两种方法都用到
旧版本 mysql 5.1.73 环境     端口:3306
(1)数据库安装目录:/usr/local/mysql
(2)数据库数据目录:/data/mysql
(3)my.cnf位置:/etc/my.cnf
(4)慢日志目录:/data/mysql/slow-query.log

主要有四个库:discuz、ljy、zabbix、zrlog(java开发的博客程序)

###################
ps: 本文并不打算把整个升级过程的步骤详细列出(怕被吐槽文章累赘就不好了,网上升级文章还是一大堆的),只列出关键点、报错问题解决,及一些个人新发现 ^__^
 
新版本 mysql 5.7.20    端口:4306
(1)安装目录:  /data/mysql5-7-20/mysql
(2)数据目录: /data/mysql5-7-20/data
(3)my.cnf位置: /data/mysql5-7-20/my.cnf  ——》5.7.20并没有提供sample版本的my.cnf

大部分参数设置跟生产库的参数设置一样(5.7.18——》5.7.20)

1、注意上图中的这个log-error,mysql启动不成功并不写入该日志,所以要额外设置启动mysql不成功的详细日志路径
vim /data/mysql5-7-20/mysql/bin/mysqld_safe
  --log-error=*) err_log=. /data/mysql5-7.20/mysqld.log

否则只能单纯地看到这个表面信息

2、初始化新版本mysql的两个报错

(1)需要把旧版本mysql 配置文件下的慢查询日志注释掉(这个报错信息忘了截图,大家请见谅)
 

cd /data/mysql5-7-20/mysql/bin

./mysqld --user=mysql --datadir=/data/mysql5-7-20/data --basedir=/data/mysql5-7-20/mysql --initialize  (已经不是 ./scripts/mysql_install_db  了)
 
(2)Unable to create temporary file

解决办法:
1、创建 tmp 目录:mkdir -p /data/mysql5-7-20/tmp
2、chown -R mysql.mysql /data/mysql5-7-20/tm
这个解决方法找的有点辛苦呢~~~~全靠
【1】开日志(mysqld_safe 下设置 err_log 路径,更深层次的启动报错信息会写到这里,上面的1)

【2】查stackoverflow
感谢歪果仁的热心解答(度娘尚需努力哦~)

图一

初始化mysql 需要一个tmp空间来存放 mysql 进程的私人命名空间,然后最后初始完成后tmp目录里的东西会自动删除,所以du -sh 是没有东西的

 图二

 到这一步,两个mysql启动是已经没问题的了

3、将旧版本的数据库及相关表导入到新版mysql
mysqldump并不能导 zabbix、zrlog、及 ljy 库,因为5.1并不认识 InnoDB 存储引擎

然后我居然把 ljy 唯一的表删掉就以为万事大吉了(删库跑路?),大忌大忌,罪过罪过 = = (所以 ljy 库就放弃吧)

一气之下写了个脚本去扫描 = =

(1)mysqldump 直接导 discuz 库

mysqldump -uroot -p123456 discuz > /root/db_5.1/discuz.sql
(2)复制  ——》 这种方法还是解决不了问题 = =,后面会说
cp -r /data/mysql/zabbix /data/mysql5-7-20/data/

cp -r /data/mysql/zrlog /data/mysql5-7-20/data/
 
4、升级字典
 cd /data/mysql5-7-20/mysql/bin

./mysql_upgrade -P4306 -S /data/mysql5-7-20/mysql.sock
 
zabbix 和 zrlog 的表查询报不存在

discuz 有

  • tb_demo.frm,存储表定义。
  • tb_demo.MYD,存储数据。
  • tb_demo.MYI,存储索引

 
zrlog、zabbix 只有 frm

用mysqlcheck也不行,估计是由于存储引擎都变了,并不支持,只能放弃 zabbix 和 zrlog 库的导入了

不过大家不用担心,一般生产上的mysql升级都是循环渐进的,不会跨度这么大(例如,从5.6升级到5.7)

最后修改端口为3306,移动启动脚本到 /etc/init.d/mysqld ,还有把配置文件放到 /etc/my.cnf (旧版本先备份)即可

 
 

mysql升级的一些踩坑点的更多相关文章

  1. SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制

    SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制. 升级前 #文件上传配置 ...

  2. Springboot+Mybatis+MySQL实例练习时踩坑记录

    最近刚开始学习后端,直接让上手学习Springboot+Mybatis+MySQL对CRUD的实例,虽然实例不难,但是上面的三个知识我都不懂,就有点为难我了 所以经常遇到一个点卡自己很久的情况,这里列 ...

  3. Ubuntu16.04默认Python3.5升级Python3.6踩坑

    好久没更新博客了,每天还是踩坑中.今天遇到第一个问题“ImportError: No module named 'secrets'”,导包是常见问题.这次的问题导致我又重装了一次环境,不过这是一个新服 ...

  4. 阿里云轻量应用服务器——配置MySQL远程连接(踩坑,LAMP+CentOS)

    说在前面 本文讲解清晰,从0开始 如不能用Navicat等数据库软件远程登陆,请先检查:安全>防火墙中 是否添加了MYSQL的3306端口(ECS服务器请检查 安全组)如未添加,先点右上角“添加 ...

  5. Mysql 8+ 版本完全踩坑记录

    问题是这样 刚霍霍了一台腾讯云服务器需要安装mysql 然后就选择了8+这个版本. 安装步骤网上有的是. 我只写最主要的部分 绝对不出错 外网可访问 .net java都可以调用 其实不指望有人看 就 ...

  6. android开发导包升级到androidx踩坑记录【转载】

    最近一直在做安卓开发,奈何手中的资料比较老,资料上的一些Import经常没有,十分让人头疼. 感谢简书上的[张晴天天天天天]做的整理. 在这里也记录一下备用. 升级Android Studio后,在 ...

  7. MySQL分页查询limit踩坑记

    1 问题背景 线上有一个批处理任务,会批量读取昨日的数据,经过一系列加工后,插入到今日的表中.表结构如下: 1 CREATE TABLE `detail_yyyyMMdd` ( 2 `id` bigi ...

  8. MySQL 5.7版本安装教程-踩坑总结

    下载 MySQL下载地址 选择下载64位(看自己电脑是32位还是64位) 点击下载之后,它会让你登录,没有Oracle账户,跟着它的步骤注册一个就好了. 安装 打开下载好的压缩包解压到你的某一目录下, ...

  9. Spark 1.6升级2.x防踩坑指南

    原创文章,谢绝转载 Spark 2.x自2.0.0发布到目前的2.2.0已经有一年多的时间了,2.x宣称有诸多的性能改进,相信不少使用Spark的同学还停留在1.6.x或者更低的版本上,没有升级到2. ...

随机推荐

  1. 使用synergyc共享键鼠

    通常情况下我们经常同时操作两台或者多台电脑, 这样就会存在多个键盘鼠标来回切换的问题. 那么我们主要的目标就是怎么在多个电脑上共享一套键盘鼠标,而且可以轻松的来回切换呢. 网上有很多的解决方案,这里我 ...

  2. angular.js记录

    http://www.runoob.com/angularjs/angularjs-tutorial.html 第一部分:快速上手1.1 angularJS四大核心特性1.2 自己动手搭建开发,调试, ...

  3. dot 使用笔记

    Graphviz (英文:Graph Visualization Software的缩写)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形 sudo apt-get i ...

  4. Java 常用工具类之 String 类

    String 类的特点: 字符串对象一旦被初始化就不会被改变. //以下代码的区别: String s = "abc"; // 在常量池中创建一个字符串对象, 池中没有就建立, 池 ...

  5. django--博客--forms组件-用户注册

    ---------------------------------------------前端页面简易代码----------------------------------------------- ...

  6. Django - 回顾(2)- 中介模型

    一.中介模型 我们之前学习图书管理系统时,设计了Publish.Book.Author.AuthorDetail这样几张表,其中Book表和Author表是多对多关系,处理类似这样简单的多对多关系时, ...

  7. 剑指offer(第2版)刷题 Python版汇总

    剑指offer面试题内容 第2章 面试需要的基础知识 面试题1:赋值运算符函数 面试题2:实现Singleton模式  解答 面试题3:数组中重复的数字 解答 面试题4:二维数组中的查找 解答 面试题 ...

  8. 如何根据一些参数,自动生成一个简单的maven工程,然后导入Eclipse直接使用?(maven命令)

    1. 使用mvn archetype:generate命令 2. 选择archetype类型:(默认是org.apache.maven.archetypes:maven-archetype-quick ...

  9. java多线程总结(二)

    线程一般有6个状态: 新建状态:NEW 可运行状态:RUNNABLE 休眠状态:TIMED_WAITING 等待状态:WAITING 阻塞状态:BLOCKED 终止状态“TERMINATED 当我们使 ...

  10. Poj 2074 Line of Sight

    地址:http://poj.org/problem?id=2074 题目: Line of Sight Time Limit: 1000MS   Memory Limit: 30000K Total ...