【问题描述】
插入数据时候报错,mysql错误 1264 Out of range value for column ‘字段’ at row 1
【问题分析】
查看表结构:show create table A \G;发现报错字段是int 类型,自增字段,AUTO_INCREMENT=21474836478
查看官方说明

查看数据记录:select count(*) from A;发现有1亿左右的数据量。因为长期的不断插入和删除,自增字段一直往上增长。
自增字段已达到int最大值,需要改变字段类型为bigint。
【问题处理】
若是生产环境,不能停业务,需要在线处理。但是直接在线修改表结构,会阻塞对这个表的DML操作.
方法一、使用第三方工具pt-online-schema-change
1.percona-toolkit安装依赖包
yum -y install perl-Digest-MD5
yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey
2.安装percona-toolkit
rpm -ivh percona-toolkit-3.0.12-1.el7.x86_64.rpm
3.在线修改字段类型
pt-online-schema-change --user=dbaman --p=xxxx --host=192.168.1.110 --alter=“MODIFY COLUMN ID bigint(20) NOT NULL AUTO_INCREMENT” D=database_a,t=A –execute
方法二、利用Mysql数据库主从架构
在从库直接alter修改了字段类型bigint,然后切换主从。注意查看同步状态,主从同步没有延迟才能切换。
方法三、改表名
1.新增一个同样结构表
create table A_new like A;
2.改名
rename table A to A_old;
rename table A_new to A;
3.旧表改字段类型
ALTER TABLE A_old MODIFY COLUMN ID bigint(20) NOT NULL AUTO_INCREMENT ;
show create table A_old\G
4.改名
rename table A to A_tmp;
rename table A_old to A;
5.补上数据
insert into A(filed1,filed2,……) select filed1,filed2,…… from A_tmp;




