前言
備份 WordPress 資料庫的方法有很多,像是之前的文章 WordPress|如何進入 phpMyAdmin 管理畫面,登入 phpMyAdmin 後,可以從控制面板將資料庫 export 出來。但是這個方法需要手動登入 phpMyAdmin 才能操作,也不能設定排程或是備份目的地,稍微缺乏彈性。
WordPress 也有很多 plugin 可以做資料庫的自動備份,但如果要做到比較彈性的功能,像是備份到指定的雲端空間,通常需要額外付費才能啟用。
WordPress 使用的 database 是 MySQL,其實 MySQL 本身就有內建不錯用的工具 mysqldump 可以使用,結合 shell script、cron job 與 gsutil tool,就可以在 VM 上部署一個每日將資料庫備份到 GCP Storage 的小程式。
但是 mysqldump 在登入時需要輸入帳號與密碼,密碼如果用明文的方式寫在程式中,會有安全性的疑慮。這時候就可以使用 MySQL 的工具:mysql_config_editor,建立一個將登入密碼加密過的 login-path,再將 login-path 的名稱提供 mysqldump 就可以了。
設定方式
在 VM 的 command-line 輸入 mysql_config_editor --help
看一下說明:
$ mysql_config_editor --help
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- ----------------------------------------
verbose FALSE
Where command can be any one of the following :
set [command options] Sets user name/password/host name/socket/port
for a given login path (section).
remove [command options] Remove a login path from the login file.
print [command options] Print all the options for a specified
login path.
reset [command options] Deletes the contents of the login file.
help Display this usage/help information.
輸入 mysql_config_editor print --all
可以印出目前所有的 login-path 設定檔:
$ mysql_config_editor print --all
[foo]
host = 127.0.0.1
輸入 mysql_config_editor set --help
看一下有哪些參數可以設定:
$ mysql_config_editor set --help
escription: Write a login path to the login file.
Usage: mysql_config_editor [program options] [set [command options]]
-?, --help Display this help and exit.
-h, --host=name Host name to be entered into the login file.
-G, --login-path=name
Name of the login path to use in the login file. (Default
: client)
-p, --password Prompt for password to be entered into the login file.
-u, --user=name User name to be entered into the login file.
-S, --socket=name Socket path to be entered into login file.
-P, --port=name Port number to be entered into login file.
-w, --warn Warn and ask for confirmation if set command attempts to
overwrite an existing login path (enabled by default).
(Defaults to on; use --skip-warn to disable.)
試試看建立一組名為 bar 的 login-path:
$ mysql_config_editor set --login-path=bar --host=127.0.0.1 --user=admin --port=3306 --password
--login-path
:準備新增的 login-path 的名稱--host
:資料庫的位置,因為資料庫與 WordPress 是同一台 VM,所以輸入 127.0.0.1
即可--user
:登入資料庫的 user name--port
:資料庫開放連線的 port,預設是 3306--password
:登入資料庫的 password,後面不用帶參數,系統會提示操作者輸入密碼;這裡要特別注意,如果密碼中有使用到一些系統在用的特殊符號,需要在密碼前後用雙引號(”)包起來,這樣才會將正確的密碼儲存進去
login-path 成功建立後,不會出現特別的訊息,可以輸入 mysql_config_editor print -all
確認:
$ mysql_config_editor print --all
[foo]
host = 127.0.0.1
[bar]
user = admin
password = *****
host = 127.0.0.1
port = 3306
login-path 建立後,輸入 mysql --login-path
=bar 或 mysqldump --login-path=bar -A > backup.sql
,就可以登入 mysql,或是將資料庫所有的內容,備份為名稱是 backup.sql 的檔案了。
mysql_config_editor 建立的檔案,存放在 ~/.mylogin.cnf
,打開文件會發現是一串被加密過的亂碼。
如果要修改已存在的 login-path,方法與建立 login-path 一樣,都是使用 set 指令,差別在於,修改時系統會偵測到輸入的 login-path 已存在,因此會再與你確認一次,是否真的要修改。
如果想要刪除已存在的 login-path,只要將 set 改成 remove,並且加上 --login-path=
的參數即可:
$ mysql_config_editor remove --login-path=bar
成功刪除後也不會有特別的訊息,一樣可以使用 mysql_config_editor print --all
確認:
$ mysql_config_editor print --all
[foo]
host = 127.0.0.1
藉由 mysql_config_editor 建立的 login-path,撰寫 shell script 登入 mysql 時,只要填入 login-path 的名稱即可,減少了將密碼以明文寫在程式碼中的安全性風險。
發佈留言