MySQL SQL_SAFE_UPDATE 模式

剛發佈一個新模塊,就有客戶投訴說不能使用。安排了一個網上面對面檢查,發現對方在使用模塊時,一旦要進行資料庫的更新或刪除資料動作,就會被卡著。

錯誤訊息為 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.

查了下谷歌大神的説法,錯誤訊息中其實也已經給了很明顯的對策,就是這個服務器啓動了資料安全機制,一旦需要進行 Update 或 Delete 動作,必須在 WHERE 的語句中有使用 KEY 欄目。例如主索引欄目,常用名為 id。

解決方式也很簡單,如果只要繞過這個情況,在所有 Update 和 Delete 語句中,加入 id != “” 或 id <> “” 即可。

當然,如果服務器允許關閉此安全模式,也可以運行 SET SQL_SAFE_UPDATES=0; (系統當然是越安全越好,所以還是別用的好。。。)

【工作手記】Directadmin PHP Selector 相關 + custombuild 502 問題解決方式

Directadmin PHP Selector 相關

PHP版本更替,舊版本最好從可選項目中除去。但DA的設計只是標識當前使用的PHP_Selector序號(1~4),沒使用名稱,所以一旦修改可支援版本和序號,很可能會直接造成某個舊版本的網頁停止運作。解決方式:

  1. 確認PHP_Selector的排列,1~4分別是哪個版本。記錄下要替換的版本。
    例如 PHP_Selector1 是 php74-pfm 版本,PHP_Selector2 則是 php80-pfm 版本。
  2. 用CLI查找哪個網站使用著哪個PHP_Selector序號。
    查找指令:
    grep -P 'php[\d]' /usr/local/directadmin/data/users/*/domains/*.conf

    返回例子:
    /usr/local/directadmin/data/users/nap/domains/abc.com.conf:php1_select=1
    /usr/local/directadmin/data/users/nap/domains/abc.com.conf:php2_select=0
    /usr/local/directadmin/data/users/tzv/domains/dom.org.conf:php1_select=2
    /usr/local/directadmin/data/users/tzv/domains/dom.org.conf:php2_select=0

  3. 調整 php1_select 的指向數字就行了。
    這裏第一行標識這個 abc.com 網站使用 PHP_Selector1 的設置版本,這例子就是 php74-pfm了。另一個 dom.org 則是用著 php80-pfm。

custombuild 502 問題

作 ./build update 時,跳出 curl 502 錯誤。

花了超過一小時查找,最後獲得的原因是 DirectAdmin 預設更新網址 files-ca.directadmin.com的 SSL 證書竟然過期了。。。(無言 + 狂翻白眼)

解決方式:

  1. 找出 custombuild 的設置檔。我這的位置是
    /usr/local/directadmin/custombuild/options.conf
  2. 找到 files-ca.directadmin.com 的設置位置,用符號 # remark 掉。
    # downloadserver=files-ca.directadmin.com
  3. 把原來的設置行複製,替換掉 files.directadmin.com 。
    downloadserver=files.directadmin.com
  4. 重做一次 ./build update 即可。

【工作記錄】Linux Command Line 界面的顔色設置

工作緣由,必須常常需要在Linux CLI中操作,有的系統色系沒設置好,操作時只有一色就顯得很難辨識到底所看到的是文件夾還是文件。。。

通過設置界面顔色,可以更好的分辨個別的項目,而且還可以客制化想要的界面。

相關的設置文件

~/.bashrc~/.bash_aliases

設置代碼例子 (不斷行)

export PS1="\[\e[31m\]\u\[\e[m\]@\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\W\[\e[m\]\\$ "
設置后的效果(root用戶)

設置完成后,需要執行指令 source ~/.bashrc ,讓新設置生效。


網上其實有不錯的工具可以用於創建代碼,然後直接抄寫進入設置文件即可。下面介紹的這個網頁,挺實用的。唯一的缺陷就只是所能使用的顔色有限,其餘的將近完美了。其實它也是被開源的網頁,有興趣的可以調整成自己要的形式,顔色方面也可以自己增設。

網址: https://ezprompt.net/

GitHub: https://github.com/jmatth/ezprompt

重設MySQL root密碼

好久沒碰過更換root密碼的這爛事了,今天重溫了一遍。。。

一般上,伺服器一旦運行了,最好的情況是永遠無需碰它的設置。但有時候真的無可避免。這回,在使用了往常用的修復手法后,卻被系統直接KO,被系統提醒我 “請仔細詳讀用戶手冊中,Security這欄目。。。”

找了來看,一頭霧水。最後去問神了,結果還是一直被KO。直到最後在Stack Overflow的這篇文章内,才找到真正的答案。。。

是的,系統升級了,往常用的mysqld_safe已經不存在了。現在更方便的衹需設置好伺服器的運作環境常量,重啓即可。長話短說,流程轉載在下方:

1. Stop mysql:

> systemctl stop mysqld

2. Set the mySQL environment option

> systemctl set-environment MYSQLD_OPTS=”–skip-grant-tables”

3. Start mysql usig the options you just set

> systemctl start mysqld

4. Login as root

> mysql -u root

5. Update the root user password with these mysql commands:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD(‘MyNewPassword’) -> WHERE User = ‘root’ AND Host = ‘localhost’;

mysql> FLUSH PRIVILEGES;

mysql> quit

(for 5.7.6 and later, you should use mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘MyNewPass’;)

6. Stop mysql

> systemctl stop mysqld

7. Unset the mySQL envitroment option so it starts normally next time

> systemctl unset-environment MYSQLD_OPTS

8. Start mysql normally:

> systemctl start mysqld

9. Try to login using your new password:

> mysql -u root -p

全新Android架構 — Project Treble

剛收到OnePlus 5T的OTA更新通知,發現這次的更新列表内多了一個新名詞:Project Treble。好奇之下跑去求神,才知道原來Android 8原來在推展時,就已經把這個Project Treble納入版本中。

老安卓用戶都曉得,我們的電話在選擇時,衹能夠綁死在當前品牌所客制的系統上。要更換別家的客制系統根本是困難x3!以目前手機的運行能力,衹要是三年以内的機器,其實要升級到更高的系統、更好的界面是沒有問題的。可惜決定權力在當前品牌的手中,如果它不想投入資源來繼續開發升級的版本,那麽用戶就衹能換機器或者繼續忍受。。。不想投入資源的原因,最大的就是這個升級工作基本上就等於全部配備,包括電話本身的驅動程式,都需要全面檢閲。確認了修改完畢后,還需要整個重新打包。費時不少。

新的這個Project Treble,其實就是把現有的這種系統和驅動混合的情況分開。增加了一個中間層,讓開發商在升級系統的當兒,可以減少甚至無需更改現有的驅動程式!而且在發放OTA時,衹需要把系統升級的那塊丟出去,節省了驅動重新下載的工作。這無形中減少了OTA發佈的容量之餘,也節省了發佈渠道所需的資源。這就和微軟視窗系統一樣,衹要框架一樣,它可以運行在不同的硬體之上。

或者用一個情景來解説:
使用小米電話的朋友,可以安裝華爲的系統。。。
棒不?

當然不可能說你裝了某個客制系統,就可以享用其特殊功能。這還得看你的硬體是否可以配搭得上啊!是的,Volkswagen 和MyVi 都是小車,外貌尺寸看下去差不多。但就算你安裝了前者的系統在MyVi身上,也不可能獲得前者的穩定性。跑個170kmh,可能就變阿飃了。。。

這新的框架其實在升級到Oreo的主機上“並不一定會有”。但衹要出廠的時候就是内裝Oreo或更新版本的機子,就一定會支援。要怎樣玩轉這個新的框架?有空試試后我再告訴你啊~~~

這一篇文章解説得不錯,可以試試閲讀:https://www.androidauthority.com/project-treble-818225/