zoukankan      html  css  js  c++  java
  • MySQL 数据库跨版本降级

    降级:操作前将数据库先备份

    一、降级注意事项

    1、inplace降级只支持同一个发布版G中的A版本

    2、5.7降级到5.6只能使用logical模式

    3、不支持跨多版本降级

    二、8.0版本之前降级

    (一)、5.7.28降级到5.7.10(inplace)

    1. 安装 5.7.10 (低) 二进制版本

    2. 针对5728版本(高)进行处理工作

    set sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
    set global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
    select @@sql_mode;                              
    ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

    3. 优雅的关闭5.7.28

    数据库内执行:

    set global innodb_fast_shutdown=0 ;

    4. 删除redo日志文件(ib_logfile* )

    rm -rf /data/3306/data/ib_logfile*

    5. 替换配置文件、环境变量 (替换成低版本)

    [mysqld]
    user=mysql
    basedir=/data/app/mysql5710
    #basedir=/data/app/mysql56
    datadir=/data/3306/data
    socket=/tmp/mysql.sock
    [mysql]
    socket=/tmp/mysql.sock

    vim /etc/profile

    export PATH=/data/app/mysql5710/bin:$PATH
    source /etc/profile
    mysql -V

    6. 修改启动脚本,启动数据库

    vim /etc/systemd/system/mysqld3308.service

    ExecStart=/data/app/mysql5710/bin/mysqld --defaults-file=/data/3308/my.cnf
    
    systemctl daemon-reload
    systemctl start mysqld3308.service

    7. 检查降级后系统表状态

    mysql_upgrade --force 

    (二)、5.7.28降级到5.6.46(logical)

    第一步:降级前准备

    安装低版本软件

    初始化低版本示例

    启动登录低版本数据库

    第二步:系统表处理

    1、调整sql_mode,设置为向下兼容

    set sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
    set global sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
    select @@sql_mode;

    2.由于 5.7.13版本开始,用户的增长了定义长度。

    降级时,需要将长度调整为低版本兼容的长度(77字符)

    ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

    3.5.7.8版本之后,在授权表中user列的长度需要从16调整为32字符。

    所以降级到5.7.8更低的版本,需要调整位16长度

    ALTER TABLE mysql.tables_priv MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.columns_priv MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.user MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.db MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.procs_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;

    4.在 5.7.6版本以后,user 表中 password字段 已经取消,被替换为了 authentication_string 列。 如果降级,需要替换回来

    ALTER TABLE mysql.user ADD Password char(41) character set latin1
      collate latin1_bin NOT NULL default '' AFTER user;
    UPDATE mysql.user SET password = authentication_string WHERE
      LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
    UPDATE mysql.user SET authentication_string = '' WHERE
      LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';

    5.在5.7.5 版本之后,会将一些系统表的存储引擎从MyISAM替换为InnoDB。

    要降级的话,需要替换回来

    ALTER TABLE mysql.help_category ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_keyword ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_relation ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_topic ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_leap_second ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_name ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_transition  ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_transition_type ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.plugin ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.servers ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

    6.在 5.7 之后 plungin列,

    字符长度需要调整会原来状态

    ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin
    DEFAULT 'mysql_native_password';

    7.5.7.7 版本之后有了sys库,降级之前要删除掉

    DROP DATABASE sys;

    第三步:逻辑备份5.7.28数据

    mysqldump -A >/tmp/full.sql

    第四步:初始化一套5.6.46的空环境

    vim /etc/profile

    export PATH=/data/app/mysql56/bin:$PATH
    
    source /etc/profile
    mv /etc/my.cnf /etc/my.cnf.bak
    rm -rf /data/3316/data/*
    /data/app/mysql56/scripts/mysql_install_db  --user=mysql --basedir=/data/app/mysql56 --datadir=/data/3316/data
    systemctl start mysqld3316

    恢复备份数据到5.6.46中

    mysql -S /tmp/mysql3316.sock 
    mysql> source /tmp/full.sql
  • 相关阅读:
    shell字符串截取
    QT,QT SDK, QT Creator 区别
    linux -- 扩容 /home 空间( xfs文件系统分区扩容指定挂载点)
    条件变量与互斥量
    越努力越幸运--2018年7月22日周记
    越努力越幸运--动态数组vector
    越努力越幸运--3-日常bug修复
    越努力越幸运--2-LD_PRELOAD, fork ,僵尸进程
    越努力越幸运--1
    makefile--回顾基础篇
  • 原文地址:https://www.cnblogs.com/VicLiu/p/15508463.html
Copyright © 2011-2022 走看看