我有一個數據庫,我試圖遷移到Amazon RDS。我通常按照說明https://engineering.gosquared.com/migrating-mysql-to-amazon-rds。如何導入包含帶默認值TIMESTAMP字段INSERT的MySQL binlog CURRENT_TIMESTAMP
我已經完成了原始服務器的mysqldump,並且已經將數據導入RDS服務器。現在,我準備好導入自mysqldump以來發生的更改。當我將mysqlbinlog的輸出傳遞給mysql時,我得到一個關於NULL值的錯誤。
我的表有一個名爲DateReceived
的TIMESTAMP字段,其默認值爲CURRENT_TIMESTAMP。當我們的應用程序插入記錄時,它會將DateReceived
保留爲NULL,以便數據庫處理當前時間。
當我們嘗試導入mysqlbinlog時,它會扼制那些NULL值插入。
下面是輸出的從mysqlbinlog可以一個片段:
BEGIN
/*!*/;
# at 42615369
#130813 13:41:12 server id 60 end_log_pos 42615397 Intvar
SET INSERT_ID=173164716/*!*/;
# at 42615397
#130813 13:41:12 server id 60 end_log_pos 42618804 Query thread_id=680551 exec_time=0 error_code=0
use mydatabase/*!*/;
SET TIMESTAMP=1376426472/*!*/;
INSERT INTO email_History (`From`, `Subject`, `DateReceived`) VALUES ('[email protected]', 'FW: Message', NULL)
/*!*/;
# at 42618804
#130813 13:41:12 server id 60 end_log_pos 42618831 Xid = 37399491
嘗試導入這個時候我從MySQL得到的錯誤是:
ERROR 1048 (23000) at line 28: Column 'DateReceived' cannot be null
下面是我的表結構:
mysql> describe email_History;
+--------------+------------------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------------------+------+-----+-------------------+----------------+
| From | varchar(512) | YES | MUL | NULL | |
| Subject | varchar(512) | YES | MUL | NULL | |
| DateReceived | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+--------------+------------------------------+------+-----+-------------------+----------------+
3 rows in set (0.00 sec)
如何導入binlog?
我們的舊數據庫服務器正在運行MySQL 5.1。新版本運行5.6。當我在5.1上進行INSERT時,並將DateReceived = NULL設置爲有效。當我在5.6上做同樣的事情時,它會拒絕它。 –
我以爲我正在改變SQL_MODE,但我沒有找到任何改變爲TIMESTAMP字段插入NULL的值的SQL_MODE。 MySQL文檔確實說我應該能夠爲我的TIMESTAMP字段插入NULL值,並且它應該自動插入CURRENT_TIMESTAMP。 http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html ...但做一個INSERT INTO email_History SET DateReceived = NULL會引發錯誤。 –