Mysql

將數據目錄同步到 tmpfs 後啟動 mysql 服務

  • June 30, 2014

嘿!

我正在維護一個由 8 個 Pandaboard 組成的網路。其中一個充當伺服器來託管基於 php 的瀏覽器遊戲,其他的則是執行該遊戲的客戶端。

伺服器從 SD 卡執行 Debian Wheezy,速度很慢。為了提高客戶端的遊戲性能,我將 mysql 數據目錄和 tmp 目錄移至 tmpfs 並相應地更改了 my.cnf。數據不需要同步回 SD,因為它不會更改,只會將臨時遊戲統計數據寫入 db。

現在這是通過添加到 rc.local 來完成的:

# mount tmpfs
sudo mount -t tmpfs tmpfs /var/tmpfs
# put a fresh copyy of mysql data there
sudo rsync -a /var/lib/mysql/ /var/tmpfs/mysql/
# restart mysql service
sudo service mysql restart

這個解決方案是有效的,但我想它不是最優雅的,因為 mysql 以修改後的 my.cnf 開頭,不會在 tmpfs 中找到數據並且在第一次啟動時會產生錯誤。我通過將客戶的初始遊戲頁面請求延遲 3 秒來解決這個問題。

將所有數據同步到 tmpfs 後如何啟動 mysql?添加一個腳本,它會掛載和 rsync 到所有 /etc/rc*.d 有 Sxxmysql 的地方?rc*.d 目錄是否僅用於服務?

任何幫助表示讚賞。

您可以自己使用服務腳本(好)或將其包含在 mysql 腳本中(臨時工作區,醜陋,更新後無法工作。)

/etc/init.d/mysql 之類的東西應該​​存在。

然後您將搜尋start並在 mysql 實際啟動之前添加您的腳本部分。

(雖然可能與較新的版本有所不同)

在我的一位主機上,它看起來像這樣:

# 
# main()
#
>
case "${1:-''}" in
'start')
   sanity_checks;
   # Start daemon 
   log_daemon_msg "Starting MySQL database server" "mysqld"
   if mysqld_status check_alive nowarn; then
      log_progress_msg "already running"
      log_end_msg 0
   else
      setup_chroot
       # Could be removed during boot
       test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld

       # mount tmpfs
       sudo mount -t tmpfs tmpfs /var/tmpfs
       # put a fresh copyy of mysql data there
       sudo rsync -a /var/lib/mysql/ /var/tmpfs/mysql/

       # Start MySQL!   
       /usr/bin/mysqld_safe > /dev/null 2>&1 &

您可能需要考慮添加一些健全性檢查等。

請注意,正如您所說,實際使用引導過程依賴關係的解決方案會更優雅:

所以你可以讓你掛載一個“服務”並將其包含在引導過程中,並使 mysql 依賴於之前啟動的服務。(我認為您可以將其包含在安裝服務中,但我不確定)

引用自:https://serverfault.com/questions/608972