Docker 在外部操作docker容器內部的命令的方法


需求:使用shell腳本把sql數據文件導入到docker版的MySQL服務

 

方法一:適合寫入判斷語句等

比如備份數據

[root@vrgv app]# vim 1.sh

mysqlid=`docker ps -aqf "name=mysql"`

docker exec -i ${mysqlid} bash<<'EOF'

#mysqldump導出表結構和數據
if [ ! -d "/backup" ]; then
mkdir -p /backup
fi

if [ -f "/backup/db.sql" ]; then
rm -rf /backup/db.sql
fi

mysqldump --single-transaction -u root -h 127.0.0.1 --password=root --all-databases > /backup/db.sql

echo '成功制作備份sql'

if [ $? -ne 0 ]; then
echo 'mysqldump運行失敗'
exit
EOF
fi

exit

EOF

注:不能使用-ti,會報錯“the input device is not a TTY”

方法二:

查看nacos容器根目錄文件

[root@vrgv app]# docker exec -it nacos  bash -c 'ls /'
bin  etc   lib    media  opt   root  sbin  sys  usr
dev  home  lib64  mnt    proc  run   srv   tmp  var

創建mysql數據庫並導入sql文件

[root@vrgv app]# docker exec -it mysql /bin/bash -c 'mysqladmin -u root -proot create mobile_application_management'
[root@vrgv app]# docker exec -it mysql /bin/bash -c 'mysql --single-transaction -uroot -proot mobile_application_management < /sql/mobile_application_management.sql'

 

--single-transaction:設置事務的隔離級別為可重復讀,即REPEATABLE READ,這樣能保證在一個事務中所有相同的查詢讀取到同樣的數據,也就大概保證了在dump期間,如果其他innodb引擎的線程修改了表的數據並提交,對該dump線程的數據並無影響,在這期間不會鎖表


免責聲明!

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



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