iT邦幫忙

0

如題,在使用網站代管商的主機服務,上傳MYSQL時發生#1071的問題
http://ithelp.ithome.com.tw/upload/images/20170627/20105609nxiv5zIK0E.jpg

http://ithelp.ithome.com.tw/upload/images/20170627/20105609vssuJbTgoR.jpg

http://ithelp.ithome.com.tw/upload/images/20170627/20105609W8GD2qS6yG.jpg

上網查了解決方式https://www.oschina.net/question/87533_10510

想請問各位大大,遇到這個問題該怎麼解決呢?

看更多先前的討論...收起先前的討論...
q00153 iT邦新手 3 級 ‧ 2017-06-28 16:32:45 檢舉
可參閱這篇連結
https://help.aliyun.com/knowledge_detail/41707.html
謝謝,但有新的問題了

PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'vhost114055.semaphore' doesn't exist: SELECT expire, value FROM {semaphore} WHERE name = :name; Array ( [:name] => variable_init ) in lock_may_be_available() (line 167 of /raid/vhost/glb-bio.com/www/includes/lock.inc).
q00153 iT邦新手 3 級 ‧ 2017-06-30 09:23:28 檢舉
依據提示來看,是找不到 vhost114055 資料庫底下的 semaphore 資料表 (或檢視表),
如果確認有該資料表,看看有無損毀並修復看看。

另外 Google 到一些可能性,供您參閱。
http://blog.csdn.net/w6611415/article/details/7413483
http://www.lao8.org/article_1613/mysql_biaobucunzai
問題目前暫時解決了,解決辦法如下
mysql檔強制匯入(使用big-5編碼)
然後接下來發生1045問題,我是修改durpal的資料庫連到主機資料庫的資訊,同步成一樣的就可以了,步驟如下

1.( 需修改網站的setting.php,位置在sites>default )
2.( 1需修改跟phpMyAdmin一樣,config.inc.php )

但是現在有部分的同事說,用手機看會遇到403...
1
bizpro
iT邦大師 1 級 ‧ 2017-07-01 12:52:26
最佳解答

開啟innodb-large-prefix

0
小魚
iT邦高手 1 級 ‧ 2017-06-27 19:16:10

他不是已經跟你說了,將mysql的engine更改為InnoDB就可以了。
應該是longblob的問題,
你到底想要放什麼東西?

看更多先前的回應...收起先前的回應...

sql檔放入後變這樣了= =
http://ithelp.ithome.com.tw/upload/images/20170629/20105609gy7hWF15vV.png

Uncaught exception thrown in shutdown function.
PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'vhost114055.semaphore' doesn't exist: DELETE FROM {semaphore} WHERE (value = :db_condition_placeholder_0) ; Array ( [:db_condition_placeholder_0] => 57332699859549729028bf5.82426611 ) in lock_release_all() (line 269 of /raid/vhost/glb-bio.com/www/includes/lock.inc).

小魚 iT邦高手 1 級 ‧ 2017-06-29 19:32:57 檢舉

你的SQL語法感覺怪怪的,你可以把SQL語法相關的PO出來嗎?
還有,你是用什麼語言寫的?

是用MYSQL,外包商寫的所以我也不知道怎麼PO出來欸,網頁是用PHP

另外現在問題變成這個了
http://ithelp.ithome.com.tw/upload/images/20170630/20105609KJMxb5Wul5.png

小魚 iT邦高手 1 級 ‧ 2017-06-30 12:04:02 檢舉

不知道怎麼PO出來要怎麼幫你解決,你可能要請人去你那邊幫你看了,不過如果無法改源碼也沒辦法,重新寫一個吧。

tzuchin iT邦新手 5 級 ‧ 2017-06-30 14:54:28 檢舉

小魚,你好,
這部分我也不熟,純討論一下,
雖然該篇文章說到,
最後的解決方式是改為 InnoDB,
但其實此版主的 create 確實是使用 ENGINE=InnoDB
不知道您有沒有注意到,
另外就是,
據爬文結果,
InnoDB 也是會出現類似的問題,而且限制的 byte 更小,只有 767 bytes,
至於為什麼該篇文章會改成 InnoDB 就成功我也不解@@
或許是更早以前的版本沒有此限制(!?)
或是我誤解了什麼...

我在另一個討論區給的回覆解法是,以下二擇一
1.把 aid 的長度改成 191
2.把 CHARSET 改成 utf-8


版主,你好,
最後出現的這個 unserialize() 問題,
就跟 mysql 沒關係了,
純粹是 PHP 的問題,
可以爬文一下,或是另發一個主題來詢問,
但標籤記得是 PHP ,也記得引此篇討論可以做參考。
如果只是 unserialize() 問題應該不大,但前提是版主要會改 PHP 。

謝謝您詳盡的回覆!!

小魚 iT邦高手 1 級 ‧ 2017-06-30 19:36:26 檢舉

資料表是Innodb,那資料庫是不是Innodb?MySql應該是有設定檔可以看的,我之前只改過Linux的,Windows的設定檔我倒是不知道在哪裡...

bizpro iT邦大師 1 級 ‧ 2017-07-01 11:50:30 檢舉

InnoDB的index prefix限制是767Bytes, 小於MyISAM的1000Bytes, 但為什麼文章中改為InnoDB會解決問題? 故意留下一個謎團?

文章沒說到的, 我在這裡解謎: 他打開了InnoDB在MySQL 5.7.6之前版本預設關閉的innodb-large-prefix, 這個參數可增大InnoDB index prefix的限制為3072Bytes. 如果您使用MySQL 5.7.6以前的版本, 請打開innodb-large-prefix.

小魚 iT邦高手 1 級 ‧ 2017-07-01 12:18:57 檢舉

原來是這樣,會不會跟版本有關係,
我的版本是5.7.10,
剛剛同時塞了800多個字進去兩個欄位沒出現任何錯誤。

bizpro iT邦大師 1 級 ‧ 2017-07-01 12:48:09 檢舉

是索引Index的限制, 不是欄位field的限制.

小魚 iT邦高手 1 級 ‧ 2017-07-01 12:49:32 檢舉

喔喔,終於了解了
/images/emoticon/emoticon33.gif
話說回來,
索引要那麼長做什麼 @@

bizpro iT邦大師 1 級 ‧ 2017-07-01 12:56:10 檢舉

聯合索引時兩個或以上的欄位加總的索引會很長. 但也應該盡量避免對常用的邏輯做長索引, 最好能用商業邏輯或其他方案解決.

小魚 iT邦高手 1 級 ‧ 2017-07-01 12:59:08 檢舉

所以所謂767Bytes是 單一資料表 全部的索引 大小加起來?

bizpro iT邦大師 1 級 ‧ 2017-07-01 14:50:52 檢舉

這限制是對單一索引INDEX. 一個資料表有一個或以上的索引, 每一個單一索引可能對一個或以上的欄位排序.

小魚 iT邦高手 1 級 ‧ 2017-07-01 15:55:36 檢舉

恩恩,所謂的單一索引是指 所有的PRIMARY、所有的INDEX、所有的UNIQUE,這個意思嗎?
所以意思是所有的INDEX的大小總和,不能超過這個大小,但是PRIMARY + INDEX + UNIQUE的總和可以超過這個大小,是這個意思嗎?

bizpro iT邦大師 1 級 ‧ 2017-07-01 17:02:10 檢舉

單一索引的Prefix限制是這個索引所含的一個或一個以上欄位的Index Prefix相加. 不是跨索引的相加.

Primary必是一個索引, 定某一個欄位為Unique也是一個索引, INDEX是一個特別建立的單一索引. 每一個"單一"索引. 不是所有的"單一"索引相加.

小魚 iT邦高手 1 級 ‧ 2017-07-01 17:34:58 檢舉

所以MySql的那個數值適用於:
1.Primary單一欄位不能超過那個值
2.Unique單一欄位不能超過那個值
3.Index單一索引所有欄位加起來也不能超過那個值
這三個條件只要有一個不成立就會拋出錯誤,是這樣嗎?

bizpro iT邦大師 1 級 ‧ 2017-07-01 18:57:52 檢舉

欄位的Index Prefix長度相加, 不一定是欄位的長度相加:
index prefix是指一個欄位前面的多少字元要用來建立索引, 也就是忽略了這個欄位在prefix之後的字元, 例如, 一個欄位長度可能是255, 但index prefix設為100, 這時是只用前100個字元來索引. 為什麼index prefix要設得比欄位長度來的短? 這是商業邏輯的判斷. 當然, 通常不設定index prefix, 也就是用全欄位來索引.
1.Primary所有欄位的index prefix相加不能超過那個值
2.Unique欄位的index prefix不能超過那個值
3.Index所有欄位的index prefix相加不能超過那個值

小魚 iT邦高手 1 級 ‧ 2017-07-03 19:21:26 檢舉

了解,感恩~

3
海綿寶寶
iT邦超人 1 級 ‧ 2017-06-28 08:49:42

減少 aid 欄位的長度
由原
aid VARCHAR(255) NOT NULL
改成
aid VARCHAR(191) NOT NULL
試試看

如果想知道為什麼的話
再看這篇詳細說明

小魚 iT邦高手 1 級 ‧ 2017-06-28 12:36:07 檢舉

我覺得255真的很少, 為什麼不用網路上別人建議的那種方式呢?

各位老大,我順利上傳sql檔後,問題變成這樣了= =
http://ithelp.ithome.com.tw/upload/images/20170629/20105609DQex1Asjn8.png

bizpro iT邦大師 1 級 ‧ 2017-07-01 12:50:46 檢舉

191是因為utb8mb4最高4位元的因素: 767/4=191. 但如果開啟innodb-large-prefix就沒有問題.

我要發表回答

立即登入回答