14,953
edits
| (45 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
排除 MySQL 技術疑難問題 | 排除 MySQL 技術疑難問題 | ||
{{LanguageSwitcher | content = [[Troubleshooting of MySQL errors | | {{LanguageSwitcher | content = [[Troubleshooting of MySQL errors | English]], [[排除 MySQL 技術疑難問題|漢字]]}} | ||
本文探討了使用 MySQL 時遇到的各種常見問題,並根據其性質和影響將它們分為七個不同的類別。這些類別有助於識別潛在的問題並促進高效的故障排除。這些問題分類如下: | 本文探討了使用 MySQL 時遇到的各種常見問題,並根據其性質和影響將它們分為七個不同的類別。這些類別有助於識別潛在的問題並促進高效的故障排除。這些問題分類如下: | ||
| Line 59: | Line 59: | ||
* 檢查 mysql 數據文件夾所在的磁碟空間是否足夠。例如,在 {{Linux}} 上輸入 {{kbd | key=df -h}} | * 檢查 mysql 數據文件夾所在的磁碟空間是否足夠。例如,在 {{Linux}} 上輸入 {{kbd | key=df -h}} | ||
* 更多資訊請見 [http://stackoverflow.com/questions/18719748/error-1006-hy000-cant-create-database-errno-13-mysql-5-6-12 ERROR 1006 (HY000) 無法創建資料庫 (errno: 13) MySQL 5.6.12 - Stack Overflow]。 | * 更多資訊請見 [http://stackoverflow.com/questions/18719748/error-1006-hy000-cant-create-database-errno-13-mysql-5-6-12 ERROR 1006 (HY000) 無法創建資料庫 (errno: 13) MySQL 5.6.12 - Stack Overflow]。 | ||
=== ERROR 1010: Error dropping database (can't rmdir) === | |||
Message: <pre>Error dropping database (can't rmdir '.\<db_name>\', errno: 17)</pre> | |||
解決方式 | |||
* 手動刪除資料庫目錄中殘留的非 MySQL 檔案(例如 .sql 檔案),再重新執行 DROP DATABASE;或直接手動刪除整個資料夾。 | |||
根本原因 | |||
* MySQL 的 DROP DATABASE 只會移除它所管理的檔案。資料目錄中若存在其他外來檔案(例如 .sql 備份檔),將導致 rmdir 無法移除資料夾,進而觸發 errno 17(ENOTEMPTY)。 | |||
=== ERROR 1017 - Can't find file: '.\DATABASE\TABLE.frm' (errno: 22 - Invalid argument) === | === ERROR 1017 - Can't find file: '.\DATABASE\TABLE.frm' (errno: 22 - Invalid argument) === | ||
| Line 185: | Line 194: | ||
</pre> | </pre> | ||
=== | == 訪問和認證錯誤 == | ||
=== [Warning] Using a password on the command line interface can be insecure === | |||
問題描述: | |||
使用 bash 命令匯出或匯入 MySQL 資料庫時,可能會遇到以下警告:[警告] 在命令行介面上使用密碼可能不安全。 | |||
<pre> | |||
mysql: [Warning] Using a password on the command line interface can be insecure. | |||
or | |||
mysqldump: [Warning] Using a password on the command line interface can be insecure. | |||
</pre> | |||
這通常發生在使用如下命令時: | |||
<pre> | <pre> | ||
mysqldump -u USERNAME -p -h 127.0.0.1 --default-character-set=utf8 DATABASE > DATABASE.sql | |||
</pre> | </pre> | ||
解決方案:要解決此警告並提高安全性,請按照以下步驟操作: | |||
# 使用 [https://dev.mysql.com/doc/refman/8.4/en/mysql-config-editor.html mysql_config_editor] 設定登入路徑 (login path):{{kbd | key=<nowiki>mysql_config_editor set --login-path=local --host=localhost --user=root --password</nowiki>}} | |||
# 匯出或匯入 MySQL 資料庫時使用登入路徑 (1) 匯出時:{{kbd | key=<nowiki>mysqldump --login-path=local --default-character-set=utf8 資料庫名稱 > 資料庫名稱.sql</nowiki>}} (2) 匯入時:{{kbd | key=<nowiki>pv 資料庫名稱.sql.gz | gunzip | mysql --login-path=local --default_character_set utf8 --force 資料庫名稱</nowiki>}} | |||
# 查看所有已設定的登入路徑 {{kbd | key=<nowiki>mysql_config_editor print --all</nowiki>}} | |||
透過使用登入路徑,可以避免在命令行中暴露密碼,解決安全警告。 | |||
=== 錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME' === | === 錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME' === | ||
訊息:{{kbd | key=<nowiki>錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME'</nowiki>}} | 訊息:{{kbd | key=<nowiki>錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME'</nowiki>}} | ||
| Line 257: | Line 282: | ||
* 您可能需要刪除現有的帳戶設定並重新配置。 | * 您可能需要刪除現有的帳戶設定並重新配置。 | ||
== SQL | === 錯誤!: SQLSTATE[28000]: 無效的授權規格:1045 拒絕訪問 === | ||
訊息:錯誤!: {{kbd | key=<nowiki>SQLSTATE[28000]: 無效的授權規格:1045 拒絕使用者 'user'@'localhost' 存取(使用密碼:YES)</nowiki>}} | |||
解決方案: | |||
* 如果您執行了查詢 {{kbd | key=INTO OUTFILE}},您需要授予文件權限,例如:{{kbd | key=GRANT FILE ON *.* TO 'user'@'localhost';}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file MySQL :: MySQL 5.7 參考手冊 :: 6.2.1 提供的權限]</ref><ref>[https://stackoverflow.com/questions/6091427/mysql-into-outfile-access-denied-but-my-user-has-all-access-and-the-fold MYSQL into outfile "拒絕訪問" - 但我的使用者有 "全部" 訪問權限.. 且文件夾是 CHMOD 777 - Stack Overflow]</ref>。 | |||
相關問題:"錯誤!: SQLSTATE[HY000]: 一般錯誤:1290 MySQL 伺服器正在使用 --secure-file-priv 選項運行,所以它不能執行這個聲明"<ref>[https://stackoverflow.com/questions/32737478/how-should-i-tackle-secure-file-priv-in-mysql 資料庫 - 如何處理 MySQL 中的 --secure-file-priv? - Stack Overflow]</ref> | |||
== SQL 查詢語法錯誤 == | |||
=== 捕獲異常:SQLSTATE[HY093]:無效的參數編號:參數未定義 === | === 捕獲異常:SQLSTATE[HY093]:無效的參數編號:參數未定義 === | ||
解決方案 | 解決方案 | ||
* 問號的數量與查詢值的數量不一致 <ref>[https://stackoverflow.com/questions/10966251/sqlstatehy093-invalid-parameter-number-parameter-was-not-defined php Invalid parameter number: parameter was not defined - Stack Overflow]</ref> | * 問號的數量與查詢值的數量不一致 <ref>[https://stackoverflow.com/questions/10966251/sqlstatehy093-invalid-parameter-number-parameter-was-not-defined php Invalid parameter number: parameter was not defined - Stack Overflow]</ref> | ||
| Line 286: | Line 319: | ||
$ file plain_text.sql | $ file plain_text.sql | ||
plain_text.sql:UTF-8 Unicode 文本,帶有非常長的行 | plain_text.sql:UTF-8 Unicode 文本,帶有非常長的行 | ||
</pre> | |||
=== 錯誤 1055: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column === | |||
訊息 | |||
<pre> | |||
查詢發生錯誤 (1055): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.posts.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by | |||
</pre> | |||
遇到錯誤的查詢 | |||
<pre> | |||
-- 建立範例資料表 | |||
CREATE TABLE posts ( | |||
id INT, | |||
post_id VARCHAR(10), | |||
author VARCHAR(50), | |||
content TEXT, | |||
likes INT, | |||
post_time DATETIME | |||
); | |||
-- 插入範例資料 | |||
INSERT INTO posts VALUES | |||
(1, 'A123', 'Alice', '第一篇文章', 10, '2024-01-01'), | |||
(2, 'A123', 'Bob', '推推', 5, '2024-01-02'), | |||
(3, 'A123', 'Bob', '讚讚', 3, '2024-01-03'); | |||
-- 這會報錯 | |||
SELECT | |||
id, -- 問題: 沒有在 GROUP BY 中 | |||
post_id, | |||
author, | |||
GROUP_CONCAT(content SEPARATOR "\n") AS content, -- 問題: 沒有在 GROUP BY 中 | |||
likes -- 問題: 沒有在 GROUP BY 中 | |||
FROM posts | |||
GROUP BY post_id, author; | |||
</pre> | |||
解決方案:修正後的查詢 (1) SELECT 中的每個欄位要麼放在 GROUP BY 中、或 (2) 使用彙總函數 (如 MAX, MIN, SUM, COUNT, GROUP_CONCAT) | |||
<pre> | |||
-- 方法一:取消 `sql_mode=only_full_group_by`: | |||
有兩種方法可以取消 `sql_mode=only_full_group_by`: | |||
1. 暫時性修改 (僅對當前會話有效) | |||
```sql | |||
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); | |||
``` | |||
2. 永久性修改 (修改 MySQL 設定檔) | |||
- 找到 MySQL 設定檔 (通常是 `my.cnf` 或 `my.ini`) | |||
- 在 `[mysqld]` 區段加入或修改: | |||
```ini | |||
[mysqld] | |||
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | |||
``` | |||
注意事項: | |||
1. 修改設定檔後需要重啟 MySQL 服務才會生效 | |||
2. 不建議取消這個設定,因為: | |||
- 可能導致查詢結果不可預測 | |||
- 違反 SQL 標準 | |||
- 可能在未來版本中產生相容性問題 | |||
建議的做法是修正 SQL 查詢而不是更改 SQL mode。 | |||
-- 方法二: 把所有欄位加入 GROUP BY | |||
SELECT | |||
id, | |||
post_id, | |||
author, | |||
content, | |||
likes | |||
FROM posts | |||
GROUP BY post_id, author, id, content, likes; | |||
-- 方法三: 對非 GROUP BY 的欄位使用彙總函數 | |||
SELECT | |||
MAX(id) as id, | |||
post_id, | |||
author, | |||
GROUP_CONCAT(content) as contents, | |||
SUM(likes) as total_likes | |||
FROM posts | |||
GROUP BY post_id, author; | |||
</pre> | </pre> | ||
| Line 322: | Line 438: | ||
** 字元集 (字元集、字元集): {{kbd | key=utf8mb4}} | ** 字元集 (字元集、字元集): {{kbd | key=utf8mb4}} | ||
** 排序規則 (定序、字元序): {{kbd | key=utf8mb4_unicode_ci}} | ** 排序規則 (定序、字元序): {{kbd | key=utf8mb4_unicode_ci}} | ||
=== 錯誤!: SQLSTATE[42000]: 語法錯誤或存取違規 === | |||
訊息:{{kbd | key=<nowiki>錯誤!: SQLSTATE[42000]: 語法錯誤或存取違規:1064 您在 SQL 語法中有錯誤;請檢查手冊,了解您的 MySQL 伺服器版本對應的正確語法以用於 ...</nowiki>}} | |||
解決方案: | |||
* [[SQL syntax debug | SQL 語法除錯]] | |||
* [https://www.eversql.com/sql-syntax-check-validator/ SQL 語法檢查在線上,SQL 驗證器,即時 SQL 編譯器在線上 - EverSQL] {{exclaim}} 不支持 [https://www.php.net/manual/en/pdo.prepare.php PHP: PDO::prepare],其中查詢語法包含問號。 | |||
== 連接和網路錯誤 == | |||
=== MySQL 伺服器已斷開 (has gone away) === | |||
步驟 | |||
* 在 MySQL 設定檔啟用 {{kbd | key = log_error}} 選項,例如 {{kbd | key = <nowiki>log_error="file_name_of_error_log"</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/8.0/en/error-log.html MySQL :: MySQL 8.0 Reference Manual :: 5.4.2 The Error Log]</ref>。 | |||
* 範例錯誤日誌位於 {{kbd | key = <nowiki>file_name_of_error_log</nowiki>}} 如下: | |||
<pre> | |||
2019-05-23T08:52:19.989876Z 99980 [Note] 中斷連接 99980 到資料庫:'DB_NAME' 用戶:'DB_USER' 主機:'localhost' (收到的封包大於 'max_allowed_packet' 位元組) | |||
</pre> | |||
* 如果 MySQL 用戶具有 {{kbd | key = <nowiki>SUPER</nowiki>}} 權限<ref>[https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html MySQL :: MySQL 8.0 Reference Manual :: 6.2.2 Privileges Provided by MySQL]</ref>,則增加 {{kbd | key = <nowiki>max_allowed_packet</nowiki>}} 的值<ref>[https://stackoverflow.com/questions/5688403/how-to-check-and-set-max-allowed-packet-mysql-variable php - how to check and set max_allowed_packet mysql variable - Stack Overflow]</ref>。 | |||
=== 錯誤:SQLSTATE[HY000] [2002] 沒有這樣的文件或目錄 === | |||
錯誤訊息:SQLSTATE[HY000] [2002] 沒有這樣的文件或目錄 | |||
解決方案: | |||
* 將資料庫主機從 {{kbd | key=localhost}} 修改為 {{kbd | key=127.0.0.1}} | |||
=== 錯誤 2002: 無法連接: SQLSTATE[HY000] [2002] === | |||
Windows Cygwin 終端機狀況: | |||
<pre> | |||
$ mysql -u root -p | |||
輸入密碼: | |||
錯誤 2002 (HY000): 無法通過 '/var/run/mysql.sock' 連接到本地 MySQL 伺服器 (2) | |||
$ mysql -h localhost -u root -p | |||
輸入密碼: | |||
錯誤 2002 (HY000): 無法通過 '/var/run/mysql.sock' 連接到本地 MySQL 伺服器 (2) | |||
</pre> | |||
解決方案: | |||
* 將 {{kbd | key=<nowiki>-h localhost</nowiki>}} 更改為 {{kbd | key=<nowiki>-h 127.0.0.1</nowiki>}} | |||
<pre> | |||
$ mysql -h 127.0.0.1 -u root -p | |||
</pre> | |||
* 如果仍然不行,重啟伺服器並重新啟動 MySQL 服務。 | |||
=== 錯誤 2002: SQLSTATE[HY000] [2002] 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 === | |||
訊息:(1) [2002] 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 (2) "SQLSTATE[HY000] [2002] 一次只能用一個通訊端位址 (通訊協定/網路位址/連接埠)。" 用中文表示 | |||
解決方案:[https://stackoverflow.com/questions/10317974/mysql-php-error2002-only-one-usage-of-each-socket-address-protocol-network-a MySQL/PHP 錯誤:(2002) 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 - Stack Overflow] | |||
=== 錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 === | |||
'''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器''' | |||
解決方案: | |||
* 檢查 IP 是否有效 | |||
'''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 (111 "連接被拒絕")''' | |||
解決方案: | |||
* 檢查 MySQL 服務是否在運行<ref>[https://www.cyberciti.biz/faq/how-to-find-out-if-mysql-is-running-on-linux/ 如何找出 MySQL 是否在 Linux 上運行]</ref>。如果沒有,啟動 MySQL 服務。 | |||
* 檢查防火牆規則 | |||
'''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 (116 "連接超時")''' | |||
解決方案: | |||
* 檢查 MySQL 的配置 | |||
** 註釋掉 [https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_bind-address bind-address] = 127.0.0.1 或設置為 * | |||
** 註釋掉 [https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-networking skip-networking] | |||
* 檢查 MySQL 資料庫用戶的權限。 | |||
* 在 (1) 個人電腦 (2) MySQL 服務所在的伺服器 (3) ISP/VM 供應商處檢查防火牆規則。更多資訊請參考 [https://devops.profitbricks.com/tutorials/install-mysql-on-centos-7/#firewall-rules 在 CentOS 7 上安裝 MySQL | ProfitBricks DevOps Central] | |||
** 檢查您的 IP 地址是否包含在允許的 IP 地址列表中的防火牆規則。 | |||
** 透過使用 [https://whatismyipaddress.com/ 我的 IP 地址是什麼?] 服務檢查您的 IP 地址是否有更改。 | |||
* (可選) 監控防火牆活動。更多資訊請參考 [https://www.howtogeek.com/220204/how-to-track-firewall-activity-with-the-windows-firewall-log/ 如何使用 Windows 防火牆日誌追蹤防火牆活動] 在 {{Win}} | |||
參考資料: | |||
* [https://support.rackspace.com/how-to/mysql-connect-to-your-database-remotely/ 遠程連接到 MySQL 資料庫] | |||
* [http://wiki.navicat.com/wiki/index.php/Error_2003 錯誤 2003 - Navicat Wiki] | |||
* [http://faq.webyog.com/content/23/15/en/error-no-2003-can_t-connect.html SQLyog MySQL 管理員常見問答 - 錯誤號 2003: 無法連接...] | |||
=== 錯誤 2013: 在查詢過程中與 MySQL 伺服器失去連接 === | |||
訊息:錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接 | |||
情況:在執行包含超過 1,000,000 行的下列查詢後,我遇到了 '錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接' 的錯誤訊息。 | |||
<pre> | |||
INSERT IGNORE INTO `target`.`table` SELECT * FROM `source`.`table`; | |||
</pre> | |||
解決方案: | |||
* 在 [https://www.mysql.com/products/workbench/ MySQL Workbench] 上增加 (1) '''資料庫連接保持活躍間隔(秒)''' 和 (2) '''資料庫連接讀取超時(秒)''' 的設定 <ref>[http://stackoverflow.com/questions/16877574/how-can-i-execute-sql-queries-that-take-longer-99-999-seconds-on-mysql-workbench 如何在 MySQL Workbench 上執行超過 99,999 秒的 SQL 查詢 - Stack Overflow]</ref><ref>[http://stackoverflow.com/questions/10563619/error-code-2013-lost-connection-to-mysql-server-during-query 錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接 - Stack Overflow]</ref>。修改設定後請重新啟動 MySQL Workbench。例如,預設的 '''資料庫連接讀取超時(秒)''' 設定為 30 秒,你可以增加到 6000 秒(100 分鐘)。 | |||
* 減少行數以縮短執行時間 (1) 使用 {{kbd | key=LIMIT}} 子句 (2) 或分割查詢大小,例如 {{kbd | key=<nowiki>MOD(column, 2) = 0</nowiki>}} 和 {{kbd | key=<nowiki>MOD(column, 2) > 0</nowiki>}},如果欄位是數字的話。 | |||
<pre> | |||
INSERT IGNORE INTO `target`.`table` SELECT * FROM `source`.`table` LIMIT 0, 10000; | |||
</pre> | |||
=== 從 MySQL 資料轉移至 MSSQL === | |||
情況: 需要將 MySQL 資料庫中的資料同步或遷移至 Microsoft SQL Server。 | |||
解決方案: | |||
* (手動方式) 匯出 MySQL 資料為 MSSQL 相容格式: {{kbd | key=<nowiki>mysqldump --compatible=mssql [database_name]</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html#option_mysqldump_compatible MySQL :: MySQL 8.4 Reference Manual :: 6.5.4 mysqldump — A Database Backup Program]</ref> | |||
* (自動方式) 使用 [https://learn.microsoft.com/en-us/sql/ssma/sql-server-migration-assistant?view=sql-server-ver17 Microsoft SQL Server Migration Assistant]、''$'' [https://www.webyog.com/product/sqlyog SQLyog] 工具 (適用於 {{Win}})。設定特定查詢來控制要從 MySQL 轉移至 Microsoft SQL Server 的資料。 | |||
常見挑戰: | |||
* 大型資料集的連線逾時問題: 參考 2013 錯誤的故障排除方法,例如延長逾時參數或實施批次處理。 | |||
* 資料類型不相容: 在遷移前驗證兩系統間的類型對應,以防止資料損壞或遺失。 | |||
== 資源和環境錯誤 == | == 資源和環境錯誤 == | ||
| Line 346: | Line 567: | ||
</pre> | </pre> | ||
= | === 錯誤代碼: 13 拒絕存取 === | ||
== 錯誤代碼: 13 拒絕存取 == | |||
當我嘗試啟動服務,執行 {{kbd | key=<nowiki>mysqld.exe --datadir=..\data --console</nowiki>}} 後出現此訊息。(MySQL版本:5.5.5-10.0.12-MariaDB 在 {{Win}}) | 當我嘗試啟動服務,執行 {{kbd | key=<nowiki>mysqld.exe --datadir=..\data --console</nowiki>}} 後出現此訊息。(MySQL版本:5.5.5-10.0.12-MariaDB 在 {{Win}}) | ||
<pre> | <pre> | ||
| Line 395: | Line 599: | ||
== 錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'xxx\Temp\xxx.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) == | === 錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'xxx\Temp\xxx.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) === | ||
錯誤訊息範例:錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'C:\Windows\SERVIC~2\NETWOR~1\AppData\Local\Temp\MY2713.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) | 錯誤訊息範例:錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'C:\Windows\SERVIC~2\NETWOR~1\AppData\Local\Temp\MY2713.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) | ||
| Line 415: | Line 619: | ||
* 查詢語法 {{kbd | key=<nowiki>SHOW VARIABLES LIKE 'tmpdir';</nowiki>}} 來驗證 mysql 配置文件的修改。 | * 查詢語法 {{kbd | key=<nowiki>SHOW VARIABLES LIKE 'tmpdir';</nowiki>}} 來驗證 mysql 配置文件的修改。 | ||
=== mysqldump: 寫入時遇到 errno 32 錯誤 === | |||
== mysqldump: 寫入時遇到 errno 32 錯誤 == | |||
錯誤情況 | 錯誤情況 | ||
<pre> | <pre> | ||
| Line 439: | Line 641: | ||
* [https://mysqldump.guru/mysqldump-got-errno-32-on-write.html mysqldump: 寫入時遇到 errno 32 錯誤 | mysqldump.guru] | * [https://mysqldump.guru/mysqldump-got-errno-32-on-write.html mysqldump: 寫入時遇到 errno 32 錯誤 | mysqldump.guru] | ||
== 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務 == | === 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務 === | ||
解決方案:<ref>[https://stackoverflow.com/questions/5836623/getting-lock-wait-timeout-exceeded-try-restarting-transaction-even-though-im mysql - 獲得 "鎖定等待超時,嘗試重新啟動事務" 即使我沒有使用事務 - Stack Overflow]</ref> | 解決方案:<ref>[https://stackoverflow.com/questions/5836623/getting-lock-wait-timeout-exceeded-try-restarting-transaction-even-though-im mysql - 獲得 "鎖定等待超時,嘗試重新啟動事務" 即使我沒有使用事務 - Stack Overflow]</ref> | ||
# {{kbd | key=<nowiki>SHOW OPEN TABLES WHERE in_use > 0;</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html MySQL :: MySQL 5.7 參考手冊 :: 13.7.5.24 SHOW OPEN TABLES 語法]</ref> | # {{kbd | key=<nowiki>SHOW OPEN TABLES WHERE in_use > 0;</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html MySQL :: MySQL 5.7 參考手冊 :: 13.7.5.24 SHOW OPEN TABLES 語法]</ref> | ||
| Line 448: | Line 650: | ||
* [https://errerrors.blogspot.com/2022/10/how-to-fix-lock-wait-timeout-exceeded-try-restarting-transaction-on-mysql.html 解決 MySQL 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務] | * [https://errerrors.blogspot.com/2022/10/how-to-fix-lock-wait-timeout-exceeded-try-restarting-transaction-on-mysql.html 解決 MySQL 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務] | ||
== 錯誤 1206: 鎖的總數量超過鎖表的大小 == | === 錯誤 1206: 鎖的總數量超過鎖表的大小 === | ||
訊息:錯誤代碼:1206。鎖的總數量超過鎖表的大小 | 訊息:錯誤代碼:1206。鎖的總數量超過鎖表的大小 | ||
| Line 462: | Line 664: | ||
* [https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html MySQL :: MySQL 5.7 參考手冊 :: 14.6.3.2 配置 InnoDB 緩衝池大小] | * [https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html MySQL :: MySQL 5.7 參考手冊 :: 14.6.3.2 配置 InnoDB 緩衝池大小] | ||
== | === PHP 嚴重錯誤:在使用 adminer 導入 SQL.GZ 文件時,允許的記憶體大小耗盡 === | ||
解決方案:使用基本的 mysqldump 命令來生成備份文件。然後使用 mysql 命令導入備份。 | |||
=== 資料庫所在硬碟空間不足的狀況 === | |||
== | |||
[http://errerrors.blogspot.com/2016/07/mysql.html Err: 解決 MySQL 資料庫所在硬碟空間不足的狀況] | |||
== | == 其他工具特定錯誤 == | ||
=== Navicat 錯誤:[Exp] OLE 錯誤 800A03EC === | |||
== Navicat 錯誤:[Exp] OLE 錯誤 800A03EC == | |||
錯誤訊息: | 錯誤訊息: | ||
<pre> | <pre> | ||
| Line 558: | Line 689: | ||
* 限制 MySQL 查詢的行數 | * 限制 MySQL 查詢的行數 | ||
== Navicat 錯誤: 導入數據筆數不一致 == | === Navicat error: Field doesn't have a default value === | ||
錯誤: | |||
<pre> | |||
[ERR] 1364 - Field 'source' doesn't have a default value | |||
</pre> | |||
解決方案: | |||
* 從 Excel 匯入到資料庫時,source 欄位是空值或者沒有指定,需要指定 source 欄位值。或者修改欄位定義,允許欄位值可以 NULL。 | |||
=== Navicat 錯誤: 導入數據筆數不一致 === | |||
錯誤: | 錯誤: | ||
| Line 566: | Line 706: | ||
* [https://errerrors.blogspot.com/2023/11/blog-post.html 解決 NaviCat 匯入 Excel 檔案到資料庫,出現資料總筆數不一致的問題] (written in Mandarin) | * [https://errerrors.blogspot.com/2023/11/blog-post.html 解決 NaviCat 匯入 Excel 檔案到資料庫,出現資料總筆數不一致的問題] (written in Mandarin) | ||
= | === 如何解決 “zsh: operation not permitted: xxx.sql” === | ||
== 如何解決 “zsh: operation not permitted: xxx.sql” == | |||
錯誤情況 | 錯誤情況 | ||
<pre> | <pre> | ||
| Line 590: | Line 723: | ||
* 尋找終端機應用程式或 iTerm2 或你正在使用的任何終端機,勾選允許完整磁碟存取的方框。 | * 尋找終端機應用程式或 iTerm2 或你正在使用的任何終端機,勾選允許完整磁碟存取的方框。 | ||
* 重啟你的終端機。 | * 重啟你的終端機。 | ||
== 延伸閱讀 == | |||
* 如果找不到想要的問題答案,可以前往stackoverflow 尋找 [https://stackoverflow.com/questions/tagged/mysql Unanswered 'mysql' Questions - Stack Overflow] | |||
== References == | == References == | ||
<references/> | <references/> | ||
{{Template: | {{Template: Data factory flow in Mandarin}} | ||
[[Category:MySQL]] | [[Category: MySQL]] | ||
[[Category:Database]] | [[Category: Database]] | ||
[[Category:Data Science]] | [[Category: Data Science]] | ||
[[Category: Revised with LLMs]] | |||