当将多个服务器配置为复制主服务器时,使用auto_increment时应采取特殊步骤以防止键值冲突,否则插入行时多个主服务器会试图使用相同的auto_increment值。
服务器变量auto_increment_increment和auto_increment_offset可以帮助协调多主服务器复制和AUTO_INCREMENT列。每个变量有一个默认的(并且是最小的)值1,最大值为65,535。
将这些变量设置为非冲突的值,当在同一个表主插入新行时,多主服务器配置主的服务器将不会与AUTO_INCREMENT值冲突。
这两个变量这样影响AUTO_INCREMENT列:
· auto_increment_increment控制列值增加的间隔。例如:
· mysql> SHOW VARIABLES LIKE 'auto_inc%'; · +--------------------------+-------+ · | Variable_name | Value | · +--------------------------+-------+ · | auto_increment_increment | 1 | · | auto_increment_offset | 1 | · +--------------------------+-------+ · 2 rows in set (0.00 sec) · · mysql> CREATE TABLE autoinc1 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY); · Query OK, 0 rows affected (0.04 sec) · · mysql> SET @auto_increment_increment=10; · Query OK, 0 rows affected (0.00 sec) · · mysql> SHOW VARIABLES LIKE 'auto_inc%'; · +--------------------------+-------+ · | Variable_name | Value | · +--------------------------+-------+ · | auto_increment_increment | 10 | · | auto_increment_offset | 1 | · +--------------------------+-------+ · 2 rows in set (0.01 sec) · · mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL); · Query OK, 4 rows affected (0.00 sec) · Records: 4 Duplicates: 0 Warnings: 0 · · mysql> SELECT col FROM autoinc1; · +-----+ · | col | · +-----+ · | 1 | · | 11 | · | 21 | · | 31 | · +-----+ · 4 rows in set (0.00 sec)
(这里注明如何使用SHOW VARIABLES以获得这些变量的当前值)。
· auto_increment_offset确定AUTO_INCREMENT列值的起点。影响到在复制设置主可以有多少主服务器(例如将该值设置为10表示设置可以支持10个服务器)。
考虑下面的命令,假定在前面所示示例中的相同的会话中执行这些命令:
mysql> SET @auto_increment_offset=5; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 10 | | auto_increment_offset | 5 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql> CREATE TABLE autoinc2 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.06 sec) mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT col FROM autoinc2; +-----+ | col | +-----+ | 5 | | 15 | | 25 | | 35 | +-----+ 4 rows in set (0.02 sec)
详细信息参见5.3.3节,“服务器系统变量”。
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。