Open NeroCube opened 3 years ago
以往安裝 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 中囉
docker exec 855888de07cb //usr/bin/mysqldump -u root --password=root --routines --triggers welhunt > /home/user/test_db_backup.sql
以往安裝 MySQL 在本機時,通常都會順便安裝 MySQL client 端程式,透過 mysqldump 建立備份很簡單。但如果是使用 docker 建立 MySQL,就無法直接在容器外備份,需要改用透過 docker 對內部下指令的方式處理。
請留意路徑開始的「//」一定要用雙斜線,[USER] 與 [PASSWORD] 請自行代入資料庫的使用者名稱與密碼,[CONTAINER] 請自行代入 container name。
另外除了備份 sql 檔案外,我還想要自動將備份的資料匯入到新資料庫中,這時候就要另外處理建立新資料庫,以及匯入的手續;這邊我把它寫成一個 shell script,並把資料庫改成變數傳入的方式,方便直接使用
./backup_db.sh test_db 就會自動備份 test_db 到 test_db_backup 中囉