Mysql

斷開的連接,損壞的模式…… MySQL 生病了嗎?

  • January 31, 2015

很多問題,我想知道這是否都可以追溯到某些根本原因。我正在嘗試載入與產品行銷相關的簡單模式。症狀是:

  • mysql -u root -p dbeq < dbeq.sql由於失去與伺服器的連接,無法轉發所述架構。11kb文件,13張表,每張表最多13列,sql文件是MySQLWorkbench的輸出,所以幾乎可以保證語法沒有錯誤。一開始確實如此SET foreign_key_checks=0,但我已經逐表檢查了文件表;它以正確的順序創建它們,這樣就不會發生不匹配的外鍵依賴關係。
  • 頻繁的**ERROR 2013 (HY000) at line 47: Lost connection to MySQL server during query類型消息,即使CREATE TABLE在 mysql shell 中粘貼語句(最多 50 毫秒查詢)。最大數據包為 16Mb,寫入超時為一分鐘,因此這些不能成為限制。
  • 數據庫每次都會被最後一個表損壞(不能創建表,因為它存在,不能刪除它,因為它不存在)。
  • MySQL Workbench 也不能直接對數據庫進行轉發工程;與 MySQL 伺服器的連接不到一秒鐘。

我的 MySQL 有什麼問題嗎?我將嘗試在家中的另一台機器上創建架構(不幸的是 SQLFiddle 已關閉,因此我無法在那裡測試架構)。

的輸出mysqlcheck -u root -p dbeq(請注意,創建這麼多表需要 3 次)

dbeq.AB_test_questions                             OK
dbeq.AB_test_responses_v0                          OK
dbeq.ABs                                           OK
dbeq.business_units                                OK
dbeq.customers                                     OK
dbeq.normalization_survey_customers
Error    : Table 'dbeq.normalization_survey_customers' doesn't exist
status   : Operation failed
dbeq.normalization_survey_questions                OK
dbeq.product_test_questions                        OK
dbeq.product_test_responses_v0                     OK
dbeq.products                                      OK
dbeq.project_managers                              OK
dbeq.survey_hashtable                              OK
dbeq.surveys                                       OK

的輸出mysqldump -d dbeq

-- MySQL dump 10.13  Distrib 5.5.41, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: dbeq
-- ------------------------------------------------------
-- Server version   5.5.41-0ubuntu0.14.04.1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
mysqldump: Got error: 1146: Table 'dbeq.normalization_survey_customers' doesn't exist when using LOCK TABLES

有人給我拿來一個大勺子,我有一大塊不起眼的餡餅要塞進去。

我沒有接受過正規的數據庫培訓,但作為一名開發人員,我不得不與數據庫進行互動(主要是通過 PHP)。我從來都不是創建模式的人。在調試這個時,我真的很難,閱讀了很多 SE 文章(感謝 Rolando,我已經忘記了我上週閱讀了多少你的文章)和 MySQL 手冊。問題是這些錯誤都太抽象了——失去連接錯誤、表不存在錯誤等。

所以我只是嘗試在從未託管過該數據庫的機器上執行模式。伺服器不會接受它,所以我知道這不可能是我對數據字典所做的所有瘋狂愚蠢的事情。SQLfiddle 也不喜歡它,它與外鍵有關,因為它在表上猶豫不決(伺服器也是如此)。

事實證明,我的大多數 FK 都是唯一命名的,這只是運氣!我不知道你必須這樣做。我讀過的所有教程和課程都沒有一個足夠複雜的例子,以至於它成為一個問題。因此,在快速上完課後,我改變了按鍵,一切正常!

SQL 的簡單語法和對其他抽像數據“表”(電子表格、R/Matlab)的使用經驗使開發人員誤以為 DB 很簡單。在每個開發人員的生活中,至少應該強制執行一次企業規模的架構。你們應該得到認真的尊重。

引用自:https://dba.stackexchange.com/questions/90563