以往安裝 MySQL 在本機時,通常都會順便安裝 MySQL client 端程式,透過 mysqldump 建立備份很簡單。但如果是使用 docker 建立 MySQL,就無法直接在容器外備份,需要改用透過 docker 對內部下指令的方式處理。

# backup test_db 到 test_db_backup.sql
docker exec [CONTAINER] //usr/bin/mysqldump -u [USER] --password=[PASSWORD] --routines --triggers test_db > /home/user/test_db_backup.sql

請留意路徑開始的「//」一定要用雙斜線,[USER] 與 [PASSWORD] 請自行代入資料庫的使用者名稱與密碼,[CONTAINER] 請自行代入 container name

另外除了備份 sql 檔案外,我還想要自動將備份的資料匯入到新資料庫中,這時候就要另外處理建立新資料庫,以及匯入的手續;這邊我把它寫成一個 shell script,並把資料庫改成變數傳入的方式,方便直接使用

#!/bin/sh

# backup db 資料到 db_backup.sql
docker exec [CONTAINER] //usr/bin/mysqldump -u [USER] --password=[PASSWORD] --routines --triggers $1 > /home/user/$1_backup.sql

# init 刪除原 db_backup 資料庫,重新建立一個空的 db_backup 資料庫
echo "DROP DATABASE IF EXISTS $1_backup; CREATE DATABASE $1_backup CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" > /home/user/$1_init.sql | cat /home/user/$1_init.sql | docker exec -i [CONTAINER] //usr/bin/mysql -u [USER] --password=[PASSWORD]

# restore 匯入備份的資料到 db_backup 資料庫
cat /home/user/$1_backup.sql | docker exec -i [CONTAINER] //usr/bin/mysql -u [USER] --password=[PASSWORD] $1_backup

另存成 backup_db.sh,修改可執行權限後,只要執行

./backup_db.sh test_db

就會自動備份 test_db 到 test_db_backup 中囉

arrow
arrow
    全站熱搜

    danielhuang030 發表在 痞客邦 留言(0) 人氣()