MySQL数据库升级

原文链接: https://my.oschina.net/u/3942910/blog/1926960

数据库升级包括:表结构或者数据的变更;数据库版本的升级

表升级或者数据变更

  1. 首先确认数据库信息
  2. 检查脚本。对于重大操作,比如删除数据库,需要实现与研发人员确认。
  3. 评估升级对生产的影响以及升级消耗的时间。对于大的更新和删除语句可以考虑分拆多条执行。
  4. 升级之前需要备份数据库。注意,存储过程和触发器的备份不同于普通数据
  5. 检查执行环境:使用status验证
  6. 升级前,可能需要停止写入或者停止一些守护。

数据库版本升级

升级的具体步骤:
1) 主从架构,优先升级从库
2) 关闭mysql实例,并确认已经停止了服务 3) 备份并删除mysql旧版本 4) 安装新版本mysql 5) 运行mysql_upgrade脚本升级

数据库版本升级具体步骤

两种升级方式

  1. 安装好新版本数据库(以mysql8为例)后,利用已经存在的数据文件夹,同时运行mysql_upgrade脚本来升级。
  2. 从一个较老版本数据库(以mysql5.7为例)把数据导出,然后恢复到新版本的数据库中,利用mysqldump工具。

直接升级

  • 下载升级版本mysql安装包

  • 备份配置文件

    • cp /etc/my.cnf /etc/my_bak.cnf
  • 修改global变量innodb_fast_shutdown=0

  • ./bin/mysqladmin -uroot -p -S/data/db/mysql.sock shutdown

  • 把解压好的mysql移动到/usr/local/中

    • mv usr/local/mysql usr/local/mysql_bak //备份原数据库
    • mv mysql8 /usr/local/mysql //将数据库安装包拷贝到目录
    • cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    • cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
  • 编译/etc/my.cnf [mysqld] port=3306 character-set-server=utf8 socket=/var/lib/mysql/mysql.sock #你的sock文件目录 basedir=/usr/local/mysql #新版数据库根目录 datadir=/var/lib/data #旧版数据库文件目录
    配置文件不可与上一版本的数据库配置冲突,否则会报错,而无法启动。建议查看错误日志来修正错误。

  • 配置编译/etc/init.d/mysqld

  • 启动mysql /etc/init.d/msyqld start
    ps -ef|grep mysql
    mysql启动成功,然后再升级字典,否则会在错误日志中看到很多错误。

  • 升级字典 /usr/local/mysql/bin/mysql_upgrade -uroot -p
    —如果升级报错的话,检查自己的my.cnf文件,看其中是否有自己不需要的配置

  • 升级成功

SQL导出升级

  • 获取用户和权限信息. 该操作会备份所有用户的权限.
  1. wget percona.com/get/pt-show-grants;
  2. perl pt-show-grants --user=root --password=root --flush > /root/grants.sql 导出用户信息
  • dump 数据库实例的所有信息(除去mysql, information_schema 和performance_schema数据库).
  1. $ mysql -uroot -proot -BNe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'performance_schema', 'information_schema')" | tr 'n' ' ' > /root/dbs-to-dump.sql
  2. $mysqldump --routines --events --single-transaction --databases $(cat /root/dbs-to-dump.sql) > /root/full-data-dump.sql
  • 停止数据库
  1. service mysql stop

需要了解的参数

Innodb_fast_shutdown

Innodb_fast_shutdown告诉innodb在它关闭的时候该做什么工作。有三个值可以选择:

  1. 0表示在innodb关闭的时候,需要purge all, merge insert buffer,flush dirty pages。这是最慢的一种关闭方式,但是restart的时候也是最快的。后面将介绍purge all,merge insert buffer,flush dirty pages这三者的含义。
  2. 1表示在innodb关闭的时候,它不需要purge all,merge insert buffer,只需要flush dirty page。
  3. 2表示在innodb关闭的时候,它不需要purge all,merge insert buffer,也不进行flush dirty page,只将log buffer里面的日志flush到log files。因此等下进行恢复的时候它是最耗时的。

转载于:https://my.oschina.net/u/3942910/blog/1926960

你可能感兴趣的:(MySQL数据库升级)