mysql5.7.28数据降级兼容mysql5.6.46

1.在另外一台主机上安装MySQL5.6.46

见不同版本多实例MySQL5.6.46部署过程

/data/app/mysql56

2.处理5.7.28高版本数据

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;
+-------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

由于 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 '';

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;

在 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.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;

在 5.7 之后 plungin列,字符长度需要调整会原来状态

alter table mysql.user modify plugin char(64) collate utf8_bin default 'mysql_native_password';

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

drop database sys;

3. 逻辑备份5.7.28数据

[root@db01 ~]# mysqldump -A >/tmp/full.sql

4. 初始化一套5.6.46的空环境

[root@db01 ~]# vim /etc/profile
export PATH=/data/app/mysql56/bin:$PATH

[root@db01 ~]# source /etc/profile
[root@db01 ~]# mysql -V
mysql  Ver 14.14 Distrib 5.6.46, for linux-glibc2.12 (x86_64) using  EditLine wrapper

[root@db01 ~]# mv /etc/my.cnf /etc/my.cnf.bak
mv: overwrite ‘/etc/my.cnf.bak’? y

[root@db01 data]# rm -rf /data/3316/data/*

[root@db01 data]# /data/app/mysql56/scripts/mysql_install_db  --user=mysql --basedir=/data/app/mysql56 --datadir=/data/3316/data
[root@db01 data]# systemctl start mysqld3316

5. 恢复备份数据到5.6.46中

[root@db01 data]# mysql -S /tmp/mysql3316.sock 
mysql> source /tmp/full.sql

6.查看数据信息是否完整

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值