使用Docker實(shí)現(xiàn)MySQL容器中批量導(dǎo)出所有數(shù)據(jù)庫
在使用 Docker 部署 MySQL 的場(chǎng)景中,經(jīng)常會(huì)遇到這樣的需求:一次性導(dǎo)出容器內(nèi)除系統(tǒng)庫以外的所有數(shù)據(jù)庫,并分別生成 .sql 文件,用于備份或遷移。
本文介紹一種無需進(jìn)入交互式容器、通過一條 docker exec 命令,在容器內(nèi)生成并執(zhí)行導(dǎo)出腳本的實(shí)現(xiàn)方式。
一、整體思路
實(shí)現(xiàn)流程如下:
- 通過
docker exec在 MySQL 容器中執(zhí)行 Bash - 動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)據(jù)庫導(dǎo)出腳本
export_dbs.sh - 使用
mysql命令獲取所有數(shù)據(jù)庫列表 - 過濾掉系統(tǒng)數(shù)據(jù)庫
- 循環(huán)調(diào)用
mysqldump,將每個(gè)數(shù)據(jù)庫導(dǎo)出為獨(dú)立的.sql文件 - 將導(dǎo)出文件保存到容器內(nèi)
/tmp目錄
二、完整命令示例
docker exec -it mysql-container bash -c "cat << 'EOF' > /tmp/export_dbs.sh
#!/bin/bash
PASSWORD=\"root\"
mysql -uroot -p\${PASSWORD} --socket=/var/run/mysqld/mysqld.sock -e \"SHOW DATABASES;\" | \
grep -v \"Database\" | \
grep -v \"information_schema\" | \
grep -v \"mysql\" | \
grep -v \"performance_schema\" | \
grep -v \"sys\" | \
while read db; do
echo \"Exporting database: \$db\"
mysqldump -uroot -p\${PASSWORD} \
--socket=/var/run/mysqld/mysqld.sock \
--databases \"\$db\" > \"/tmp/\$db.sql\"
done
echo \"Export completed.\"
EOF
chmod +x /tmp/export_dbs.sh
/tmp/export_dbs.sh"
三、關(guān)鍵部分詳解
1. docker exec 執(zhí)行容器內(nèi)命令
docker exec -it mysql-container bash -c "..."
mysql-container:MySQL 容器名稱bash -c:在容器中執(zhí)行一段 Bash 命令-it:支持交互與終端輸出
2. 使用 Here Document 生成腳本
cat << 'EOF' > /tmp/export_dbs.sh
- 使用 Here Document 寫入多行腳本
'EOF'使用單引號(hào)可避免變量在宿主機(jī)側(cè)被提前展開- 腳本被寫入容器內(nèi)
/tmp/export_dbs.sh
3. MySQL 認(rèn)證方式
PASSWORD="root"
mysql -uroot -p${PASSWORD} --socket=/var/run/mysqld/mysqld.sock
- 使用 root 用戶連接
- 通過 Unix Socket 連接 MySQL(適用于官方 MySQL Docker 鏡像)
- 避免 TCP 連接帶來的端口問題
4. 獲取并過濾數(shù)據(jù)庫列表
SHOW DATABASES;
配合 grep -v 過濾系統(tǒng)數(shù)據(jù)庫:
information_schemamysqlperformance_schemasys
最終只保留業(yè)務(wù)數(shù)據(jù)庫。
5. 循環(huán)導(dǎo)出數(shù)據(jù)庫
while read db; do mysqldump --databases "$db" > "/tmp/$db.sql" done
特點(diǎn):
- 每個(gè)數(shù)據(jù)庫生成一個(gè)獨(dú)立的 SQL 文件
- 文件命名規(guī)則:
數(shù)據(jù)庫名.sql - 便于單庫恢復(fù)與管理
四、導(dǎo)出結(jié)果說明
導(dǎo)出完成后:
SQL 文件位于容器內(nèi):
/tmp/*.sql
如需拷貝到宿主機(jī),可使用:
docker cp mysql-container:/tmp/dbname.sql .
或批量拷貝整個(gè)目錄。
五、適用場(chǎng)景
MySQL Docker 容器備份
數(shù)據(jù)遷移前批量導(dǎo)出
CI / 自動(dòng)化備份腳本
測(cè)試環(huán)境數(shù)據(jù)庫快照
六、注意事項(xiàng)
不建議在生產(chǎn)環(huán)境明文寫密碼(可改用 .my.cnf)
大庫導(dǎo)出時(shí)注意磁盤空間
可根據(jù)需要添加 --single-transaction 以減少鎖表
七、總結(jié)
通過一條 docker exec 命令,我們實(shí)現(xiàn)了:
- 在容器內(nèi)動(dòng)態(tài)生成腳本
- 自動(dòng)過濾系統(tǒng)數(shù)據(jù)庫
- 批量導(dǎo)出所有業(yè)務(wù)庫
- 無需手動(dòng)進(jìn)入容器操作
到此這篇關(guān)于使用Docker實(shí)現(xiàn)MySQL容器中批量導(dǎo)出所有數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Docker MySQL導(dǎo)出數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決mysql配置文件錯(cuò)誤導(dǎo)致在docker中無法啟動(dòng)的問題
這篇文章主要介紹了如何解決mysql配置文件錯(cuò)誤導(dǎo)致在docker中無法啟動(dòng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Centos中使用Docker安裝rabbitmq的問題記錄
這篇文章主要介紹了Centos中使用Docker安裝rabbitmq的問題記錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-05-05
docker進(jìn)入容器運(yùn)行命令的使用及說明
本文介紹了如何使用Docker進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令,主要包括使用docker exec、docker attach和nsenter命令進(jìn)入容器的方法,并詳細(xì)介紹了docker inspect命令的使用以及如何獲取容器/鏡像的元數(shù)據(jù)2026-02-02
docker 部署 Elasticsearch kibana及ik分詞器詳解
這篇文章主要介紹了docker 部署 Elasticsearch kibana及ik分詞器詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05

