需求:使用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線程的數據並無影響,在這期間不會鎖表