在下面的说明中,您需要用正确的值替换[括号内]中的所有内容。备份之前进行测试。
如果您可以登录通过命令行来MySQL作为根,那么你可以做以下的AUTO_INCREMENT重置所有表,首先我们将构建我们的查询,我们要运行:
进行数据库备份:
mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]
登录:
mysql -u root -p
设置group_concat_max_length到一个更高的值,因此我们查询列表不被截断:
SET group_concat_max_len=100000;
使用下列创建我们的查询列表:
SELECT GROUP_CONCAT(CONCAT("ALTER TABLE ", table_name, " AUTO_INCREMENT = 0") SEPARATOR ";") FROM information_schema.tables WHERE table_schema = "[DATABASENAME]";
然后你会收到MySQL的查询,然后一堆短线的长长的一串。查询字符串复制到剪贴板,它看起来类似于:
ALTER table1 AUTO_INCREMENT = 0;ALTER table2 AUTO_INCREMENT = 0;...continued...
更改到数据库中你想运行的命令:
USE [DATABASENAME];
然后粘贴是在弦上你的剪贴板并按回车来运行它。这应该在数据库中的每个表上运行alter。
搞砸了吗?从备份中恢复,确保运行以下之前注销的MySQL(只需输入exit;
这样做)
gzip -d < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]
我不会把你使用这些命令的任何损坏原因的责任,在使用你自己的风险。
这不是工作,以及: 'ALTER TABLE my_db.customer AUTO_INCREMENT =(SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA。WHERE table_name ='customer')' – pars 2010-08-29 17:32:01
由于您提到了M-M复制:是否真的需要触摸AUTO_INCREMENT以使复制工作?我通常只需在my.cnf中设置自动增量增量和自动增量偏移值。 – faxi05 2010-08-29 17:34:58
@ faxi05是的,你是对的。我也有相同的配置工作正常。但是为了在硬件故障后重新同步两个数据库,我不得不从一个数据库转储所有数据并将其导入另一个数据库。在这个过程中有一些错误。令人惊讶的是,没有我做任何事情,他们都走了。 – pars 2010-08-29 20:38:40