أحاول نقل طاولة تحتوي على مليارات الصفوف إلى دليل جديد في MySQL 5.6. أحاول نسخ Table1 إلى Table2 وهناك عن طريق إسقاط Table1 ثم إعادة تسمية Table2 إلى Table1.
CREATE TABLE `table2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`col1` int(11) DEFAULT NULL,
`col2` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_col1_col2` (`col1`,`col2`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 DATA DIRECTORY='/mysql_data/';
أنا أستخدم الإجراء أدناه للقيام بالنسخ.
DROP PROCEDURE IF EXISTS copytables;
CREATE PROCEDURE `copytables`()
begin
DECLARE v_id INT(11) unsigned default 0;
declare maxid int(11) unsigned default 0;
select max(id) into maxid from table1;
while v_id < maxid do
insert into table2(col1,col2)
select fbpost_id,fbuser_id from table1 where id >= v_id and id <v_id+100000 ;
set v_id=v_id+100000;
select v_id;
select max(id) into maxid from table1;
select maxid;
end while;
end;
لكنني الآن أحصل على فجوات في عمود المعرف بعد كل دفعة من 100000 في Table2 (بعد المعرف 199999 المعرف التالي هو 262141). لا يحتوي Table1 على أي فجوات في عمود ID.