Mysql
將數據目錄同步到 tmpfs 後啟動 mysql 服務
嘿!
我正在維護一個由 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 依賴於之前啟動的服務。(我認為您可以將其包含在安裝服務中,但我不確定)