国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql恢復數據數據出現Variable sql_mode cant 解決方法

2024-07-24 12:38:32
字體:
來源:轉載
供稿:網友

用mysqldump導出的數據文件,再用source導進去的時候常常有一些報錯 ariable sql_mode cant be set to the value of NULL,百度了好幾回,終于找到是mysql導出的注釋語句問題,導出的文件常常如下:

  1. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;   
  2. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;   
  3. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;   
  4. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;   
  5. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;   
  6. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;   
  7. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 

解決方法:刪除注釋語句后再執行批量SQL語句操作.

利用二進制日志恢復報錯?Variable 'sql_mode' can't be set to the value of '1344274432'.

  1. Server version          5.0.18-log 
  2. Protocol version        10 
  3. Connection              localhost via TCP/IP 

操作系統:windowsXp,mysql為InnoDB存儲引擎,數據庫為utf.

win.ini中配置,代碼如下:

  1. [mysql] 
  2. default-character-set=utf8 
  3.  
  4. [mysqld] 
  5. basedir="c:/MySQL5/" 
  6. datadir="c:/MySQL5/Data/" 
  7.  
  8. log-bin="d:/log/log"  
  9. binlog-do-db=test 
  10. innodb_data_home_dir = 
  11. innodb_data_file_path=e:/MySQL Datafiles/ibdata1:10M;e:/MySQL Datafiles/ibdata2:1M:autoextend 
  12.  
  13. innodb_log_group_home_dir="d:/log/binlog/" 
  14. default-character-set=utf8 
  15. default-storage-engine=INNODB 
  16.  
  17. sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
  18.  
  19. ............... 

恢復冷備份后,執行日志恢復報錯:

C:\mysqlbinlog d:/log/log.000002|mysql -uroot -pa

ERROR 1231 (42000) at line 10: Variable 'sql_mode' can't be set to the value of

'1344274432'

顯示日志如下:

  1. C:\mysqlbinlog d:/log/log.000002 
  2.  
  3. /*!40019 SET @@session.max_insert_delayed_threads=0*/; 
  4. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
  5. at 4 
  6. #070423  1:10:40 server id 1  end_log_pos 98    Start: binlog v 4, server v 5.0. 
  7. 18-log created 070423  1:10:40 
  8. at 98 
  9. #070423  1:10:46 server id 1  end_log_pos 93    Query   thread_id=9     exec_tim 
  10. e=0     error_code=0 
  11. use iservice; 
  12. SET TIMESTAMP=1177261846; 
  13. SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq 
  14. ue_checks=1; 
  15. SET @@session.sql_mode=1344274432; 
  16. SET @@session.character_set_client=33,@@session.collation_connection=33,@@sessio 
  17. n.collation_server=33; 
  18. insert into test values(3); 
  19. at 191 
  20. #070423  1:10:46 server id 1  end_log_pos 218   Xid = 27 
  21. COMMIT;  --Vevb.com 
  22. at 218 
  23. #070423  1:11:02 server id 1  end_log_pos 237   Stop 
  24. End of log file 
  25. ROLLBACK /* added by mysqlbinlog */; 
  26. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 

解決方法

mysqlbinlog:用于處理二進制日志文件的實用工具

服務器生成的二進制日志文件寫成二進制格式,要想檢查這些文本格式的文件,應使用mysqlbinlog實用工具.

應這樣調用mysqlbinlog:shell> mysqlbinlog [options] log-files...

例如,要想顯示二進制日志binlog.000003的內容,使用下面的命令:

shell> mysqlbinlog binlog.0000003

輸出包括在binlog.000003中包含的所有語句,以及其它信息例如每個語句花費的時間、客戶發出的線程ID、發出線程時的時間戳等等。

通常情況,可以使用mysqlbinlog直接讀取二進制日志文件并將它們用于本地MySQL服務器。也可以使用--read-from-remote-server選項從遠程服務器讀取二進制日志。

當讀取遠程二進制日志時,可以通過連接參數選項來指示如何連接服務器,但它們經常被忽略掉,除非你還指定了--read-from-remote-server選項。這些選項是--host、--password、--port、--protocol、--socket和--user。

還可以使用mysqlbinlog來讀取在復制過程中從服務器所寫的中繼日志文件。中繼日志格式與二進制日志文件相同。

mysqlbinlog支持下面的選項:

·---help,-?

顯示幫助消息并退出。

·---database=db_name,-d db_name

只列出該數據庫的條目(只用本地日志)。

·--force-read,-f

使用該選項,如果mysqlbinlog讀它不能識別的二進制日志事件,它會打印警告,忽略該事件并繼續,沒有該選項,如果mysqlbinlog讀到此類事件則停止.

·--hexdump,-H

在注釋中顯示日志的十六進制轉儲,該輸出可以幫助復制過程中的調試,在MySQL 5.1.2中添加了該選項.

·--host=host_name,-h host_name

獲取給定主機上的MySQL服務器的二進制日志。

·--local-load=path,-l pat

為指定目錄中的LOAD DATA INFILE預處理本地臨時文件。

·--offset=N,-o N

跳過前N個條目。

·--password[=password],-p[password]

當連接服務器時使用的密碼。如果使用短選項形式(-p),選項和 密碼之間不能有空格。如果在命令行中--password或-p選項后面沒有 密碼值,則提示輸入一個密碼。

·--port=port_num,-P port_num

用于連接遠程服務器的TCP/IP端口號。

·--position=N,-j N

不贊成使用,應使用--start-position.

·--protocol={TCP | SOCKET | PIPE | -position

使用的連接協議.

·--read-from-remote-server,-R

從MySQL服務器讀二進制日志,如果未給出該選項,任何連接參數選項將被忽略,這些選項是--host、--password、--port、--protocol、--socket和--user.

·--result-file=name, -r name

將輸出指向給定的文件.

·--short-form,-s

只顯示日志中包含的語句,不顯示其它信息.

·--socket=path,-S path

用于連接的套接字文件.

·--start-datetime=datetime

從二進制日志中第1個日期時間等于或晚于datetime參量的事件開始讀取。datetime值相對于運行mysqlbinlog的機器上的本地時區。該值格式應符合DATETIME或TIMESTAMP數據類型,例如:

shell> mysqlbinlog --start-datetime="2004-12-25 11:25:56" binlog.000003

該選項可以幫助點對點恢復。

·--stop-datetime=datetime

從二進制日志中第1個日期時間等于或晚于datetime參量的事件起停止讀。關于datetime值的描述參見--start-datetime選項。該選項可以幫助及時恢復。

·--start-position=N

從二進制日志中第1個位置等于N參量時的事件開始讀。

·--stop-position=N

從二進制日志中第1個位置等于和大于N參量時的事件起停止讀。

·--to-last-logs,-t

在MySQL服務器中請求的二進制日志的結尾處不停止,而是繼續打印直到最后一個二進制日志的結尾,如果將輸出發送給同一臺MySQL服務器,會導致無限循環,該選項要求--read-from-remote-server.

·--disable-logs-bin,-D

禁用二進制日志。如果使用--to-last-logs選項將輸出發送給同一臺MySQL服務器,可以避免無限循環。該選項在崩潰恢復時也很有用,可以避免復制已經記錄的語句。注釋:該選項要求有SUPER權限。

·--user=user_name,-u user_name

連接遠程服務器時使用的MySQL用戶名。

·--version,-V

顯示版本信息并退出.

還可以使用--var_name=value選項設置下面的變量:

·open_files_limit

指定要保留的打開的文件描述符的數量。

可以將mysqlbinlog的輸出傳到mysql客戶端以執行包含在二進制日志中的語句。如果你有一個舊的備份,該選項在崩潰恢復時也很有用:

shell> mysqlbinlog hostname-bin.000001 | mysql

或:shell> mysqlbinlog hostname-bin.[0-9]* | mysql

如果你需要先修改含語句的日志,還可以將mysqlbinlog的輸出重新指向一個文本文件,(例如,想刪除由于某種原因而不想執行的語句),編輯好文件后,將它輸入到mysql程序并執行它包含的語句.

mysqlbinlog有一個--position選項,只打印那些在二進制日志中的偏移量大于或等于某個給定位置的語句(給出的位置必須匹配一個事件的開始)。它還有在看見給定日期和時間的事件后停止或啟動的選項。這樣可以使用--stop-datetime選項進行點對點恢復(例如,能夠說“將數據庫前滾動到今天10:30 AM的位置”)。

如果MySQL服務器上有多個要執行的二進制日志,安全的方法是在一個連接中處理它們,下面是一個說明什么是不安全的例子:

shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!!

shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!

使用與服務器的不同連接來處理二進制日志時,如果第1個日志文件包含一個CREATE TEMPORARY TABLE語句,第2個日志包含一個使用該臨時表的語句,則會造成問題。當第1個mysql進程結束時,服務器撤銷臨時表。當第2個mysql進程想使用該表時,服務器報告 “不知道該表”.

要想避免此類問題,使用一個連接來執行想要處理的所有二進制日志中的內容。下面提供了一種方法:

shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql

另一個方法是:

  1. shell> mysqlbinlog hostname-bin.000001 >  /tmp/statements.sql 
  2. shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql 
  3. shell> mysql -e "source /tmp/statements.sql"  --Vevb.com 

mysqlbinlog產生的輸出可以不需要原數據文件即可重新生成一個LOAD DATA INFILE操作。mysqlbinlog將數據復制到一個臨時文件并寫一個引用該文件的LOAD DATA LOCAL INFILE語句。由系統確定寫入這些文件的目錄的默認位置。要想顯式指定一個目錄,使用--local-load選項。

因為mysqlbinlog可以將LOAD DATA INFILE語句轉換為LOAD DATA LOCAL INFILE語句(也就是說,它添加了LOCAL),用于處理語句的客戶端和服務器必須配置為允許LOCAL操作。參見5.6.4節,“LOAD DATA LOCAL安全問題”。

警告:為LOAD DATA LOCAL語句創建的臨時文件不會自動刪除,因為在實際執行完那些語句前需要它們,不再需要語句日志后應自己刪除臨時文件,文件位于臨時文件目錄中,文件名類似original_file_name-#-#。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和顺县| 黄山市| 肥城市| 巢湖市| 宜都市| 焉耆| 鄱阳县| 八宿县| 突泉县| 灌南县| 繁峙县| 宣城市| 商丘市| 宁化县| 涞水县| 平塘县| 德庆县| 特克斯县| 牙克石市| 女性| 高密市| 腾冲县| 黔西| 卢湾区| 柳江县| 马尔康县| 嘉峪关市| 永德县| 水富县| 沾化县| 剑河县| 三门峡市| 寿宁县| 博野县| 太湖县| 蕉岭县| 鲁山县| 拜城县| 潞西市| 噶尔县| 武陟县|