更改 MySQL auto_increment_offset
對不起,文字牆,但我不知道什麼是相關的,什麼不是。
我有 MySQL 一個 MySQL 數據庫,它正在從我們的生產環境複製到我們的開發/測試環境,以便他們獲得 Web 應用程序的 DEV 端的實時更新。問題是,如果他們不能改變東西並送出它,那麼 DEV 就不是真正的 DEV。這是單向的,對 DEV 的更改不會複製回 prod,但這會產生一個問題,即如果他們在 DEV 數據庫中創建新條目,它們會留在 DEV 本地,但
AUTO_INCREMENT
如果數字在 PROD 中被重用(它不會看到下一個可用索引號的相同值,因為它對 DEV 中發生的事情視而不見)。我想我可以通過
auto_increment_offset
在 GLOBAL 級別設置來解決這種衝突,以便新數據庫條目的 ID 在 30,000+ 範圍內,而 PROD 保持在 30,000 以下。我在從站上設置變數,在主站上創建表,在主站上用值 1-4 填充它,這些值被複製到從站,但隨後嘗試
INSERT
從站上的數據,讓它在主數據庫的位置離開了。mysql> describe test; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | +-------+------------------+------+-----+---------+----------------+ 1 row in set (0.00 sec) mysql> select * from test; +----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 30000 | +--------------------------+-------+ 2 rows in set (0.00 sec) mysql> insert into test () VALUES (); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 6 | +----+ 5 rows in set (0.00 sec) mysql> delete from test where id=6; Query OK, 1 row affected (0.00 sec)
我在網上搜尋並找不到任何東西。它似乎
auto_increment_offset
可能是為這種情況創建的,但它似乎沒有達到我預期的效果(從站生成的 ID 比主站中的 ID 高很多)。這是在某處保存的表級嗎?任何級別的幫助將不勝感激。
您可以在文件中找到對您問題的解釋:“如果 auto_increment_offset 的值大於 auto_increment_increment 的值,則忽略 auto_increment_offset 的值。”
出於您的目的,保留它們的預設值並簡單地執行就足夠了:
auto_increment_increment
在從站上。auto_increment_offset``ALTER TABLE test AUTO_INCREMENT=30000
這將在您的奴隸上產生像 30001,30002,…,N 這樣的值。
ALTER TABLE some_table AUTO_INCREMENT=10000
這會將 AUTO_INCREMENT 設置為特定值。