MySQL 数据备份与还原
备份
-
执行备份命令
docker exec -it $(docker ps | grep community | awk '{print $1}') bash -c 'source /entrypoint.sh && backup mysql'
命令执行成功会输出如下信息(容器内存放路径)
backup mysql saved to /data/backup/20240117130609/mysql
backup log saved to /data/backup/20240117130609/backupMysql.log -
将备份文件复制到宿主机目录(
/data/backup
)mkdir -p /data/backup
docker cp $(docker ps | grep community | awk '{print $1}'):/data/backup/20240117130609 /data/backup/
还原
-
停止 HAP 服务。管理器根目录下执行以下命令
bash ./service.sh stopall
-
移除原 MySQL 数据目录(默认:
/data/hap/script/volume/data/mysql
)mv /data/hap/script/volume/data/mysql /data/backup/mysql_$(date +%Y%m%d%H%M%S)
-
启动临时容器,并且挂载数据目录(注意替换实际需要使用的镜像地址、版本号)
- 微服务版本>=5.1.0
- 微服务版本<5.1.0
docker run -it --rm --entrypoint bash -e ENV_MYSQL_HOST="127.0.0.1" -e ENV_MYSQL_PORT="3306" -e ENV_MYSQL_USERNAME="root" -e ENV_MYSQL_PASSWORD="123456" -v /data/hap/script/volume/data/:/data/ -v /data/backup/:/data/backup/ nocoly/hap-sc:3.0.0
docker run -it --rm --entrypoint bash -e ENV_MYSQL_HOST="127.0.0.1" -e ENV_MYSQL_PORT="3306" -e ENV_MYSQL_USERNAME="root" -e ENV_MYSQL_PASSWORD="123456" -v /data/hap/script/volume/data/:/data/ -v /data/backup/:/data/backup/ nocoly/hap-community:版本 号
-
创建目录
mkdir -p /data/{logs,mysql}
-
临时容器内启动 MySQL
source /entrypoint.sh && mysqlStartup &
-
还原 MySQL 数据库(/data/backup/20240117130609/mysql 改成实际路径)
source /entrypoint.sh && restore mysql /data/backup/20240117130609/mysql
-
执行完成,退出临时容器
exit