MySQL使用dump備份以及恢復備份


MySQL使用dump備份以及恢復備份

項目中需要對mysql數據進行備份以及恢復。這里記錄一個docker部署的mysql數據庫用dump全量備份的案例。

注意,用dump備份時,所有服務是停止的,避免備份時寫入操作引起的數據問題。mysql鏡像時latest版本,Server version: 8.0.27 MySQL Community Server - GPL

所有數據庫備份

docker exec -it mysql mysqldump -uroot -p123 -A > all.sql

-uroot指使用root用戶;

-p123指數據庫密碼是123;

-A備份所有數據庫,導出的sql包含了創建數據庫的語句,詳情見附錄1;

all.sql備份的文件名,此處文件備份到當前目錄。

執行結束后當前目錄會有all.sql文件,可以使用cat all.sql查看里面的內容。

恢復備份

恢復備份命令如下:

docker exec -i mysql mysql -uroot -p123 < all.sql

注意1:這個命令不要-t,否則會報the input device is not a TTY

注意2:高版本(據說2.5.0版本以后)會報mysql: [Warning] Using a password on the command line interface can be insecure.。不能在命令行寫密碼。

詳情查看官方文檔6.1.2.1 End-User Guidelines for Password Security

方法1:使用config_editor

使用下面命令設置登錄賬號密碼。

#設置登錄配置
mysql_config_editor set --login-path=login --user=root --password
#查看
mysql_config_editor print --all
---
[login]
user = "root"
password = *****
---
#登錄
mysql --login-path=login

此方法在容器內部是可以正常登錄的,但在容器外部會報錯。

docker exec -it mysql mysql mysql --login-path=login
#mysql: [ERROR] unknown variable 'login-path=login'.

方法2:-p 不輸入密碼

該方法是使用交互式提供密碼。-p或者--password后不要輸入密碼,回車后命令行會出現交互輸入方式。

mysql -uroot -p

此方法如果是用腳本程序執行的話,避免不了要輸入密碼。

方法3:my.cnf配置賬號密碼

/etc目錄下有個my.conf文件,在該文件里配置賬號密碼。

此方法測試有效。

詳情查看官方文檔6.1.2.1 End-User Guidelines for Password Security

鏡像沒有安裝vim,我這里是把配置文件拷貝出來,改好再拷貝回去。

# 從容器里拷貝回來
docker cp mysql:/etc/mysql/my.conf ./
# 編輯
vi my.conf
---
[client]
host = localhost
user = root
password = '123'
---
# 拷貝回容器
docker cp ./my.conf mysql:/etc/mysql/
# 備份
docker exec -it mysql mysqldump --defaults-extra-file=/etc/mysql/my.cnf -A > ./all.sql
# 恢復
docker exec -i mysql mysql --defaults-extra-file=/etc/mysql/my.cnf < ./all.sql

方法4:JDBC建立連接,Java方式備份

利用JDBC連接,將備份腳本拷貝進容器,然后用jdbc執行source命令恢復備份。

為了省去拷貝的步驟,最好在創建容器時將mysql容器的卷映射到宿主機器上(防止重新創建容器導致備份丟失)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM