Docker安装mysql8.0

发布于 2024-08-17  12 次阅读


1.环境准备

docker安装参考:Centos安装docker

2.容器搭建

拉取镜像

DOCKER
docker pull mysql:8.0

创建复制配置文件的容器

DOCKER
docker run -d --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

复制文件

宿主机创建以下目录

LINUX
mkdir -p /home/docker/mysql8.0/conf \ /home/docker/mysql8.0/data \ /home/docker/mysql8.0/logs \ /home/docker/mysql8.0/bak

执行docker cp命令

DOCKER
docker cp mysql8.0:/etc/my.cnf /home/docker/mysql8.0/conf/my.cnf && \ docker cp mysql8.0:/etc/mysql/conf.d /home/docker/mysql8.0/conf/ && \ docker cp mysql8.0:/var/lib/mysql/. /home/docker/mysql8.0/data/

删除复制文件的容器

DOCKER
docker stop mysql8.0 && \ docker rm mysql8.0

创建容器

DOCKER
docker run --restart=always -d --name mysql8.0 -p 3306:3306 \ -v /home/docker/mysql8.0/conf/my.cnf:/etc/my.cnf \ -v /home/docker/mysql8.0/conf/conf.d:/etc/mysql/conf.d \ -v /home/docker/mysql8.0/logs:/logs \ -v /home/docker/mysql8.0/data:/var/lib/mysql \ -v /home/docker/mysql8.0/bak:/mysqlbak \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0

参数解释
-v 挂载目录
-v /home/docker/mysql8.0/bak:/mysqlbak 备份数据的目录
设置mysql密码
-e MYSQL_ROOT_PASSWORD=123456

查看是否运行

DOCKER
docker ps # 查看运行容器 docker logs mysql8.0 # 查看运行日志

其它

mysql的定时数据备份与数据恢复

备份

mysql备份命令mysqldump,运行命令

DOCKER
# 使用这条命令会备份数据到容器内/mysqlbak/2024-8-18_ce_blog.sql文件里 docker exec -it mysql8.0 bash -c "mkdir -p /mysqlbak" && docker exec -it mysql8.0 bash -c \ > "mysqldump -uroot -p123456 --databases ce_blog > /mysqlbak/2024-8-18_ce_blog.sql" # 使用这条命令会将容器内ce_blog数据库备份到宿主机的/home/docker/mysql8.0/bak/2024-8-18_ce_blog.sql文件里 docker exec -it mysql8.0 bash -c "mysqldump -uroot -p123456 --databases ce_blog" > /home/docker/mysql8.0/bak/2024-8-18_ce_blog.sql

定时运行执行以下命令

LINUX
# 编辑定时任务 crontab -e # 将命令写入进去 # 1.只设置定时备份 # */1 * * * * 每分钟执行一次 0 3 * * *每天凌晨3点执行 0 3 * * * docker exec mysql8.0 bash -c "mkdir -p /mysqlbak && mysqldump -uroot -p123456 --databases ce_blog > /mysqlbak/\$(date +\%Y-\%m-\%d-\%H-\%M-\%S).sql" # 2.设置定时备份并设置备份时错误日志的输出目录宿主机目录/home/docker/mysql8.0/logs/mysql_backup_error.log # */1 * * * * 每分钟执行一次 0 3 * * *每天凌晨3点执行 # 可能宿主机和docker时间不同 导致文件名时间显示看不懂 加上TZ='Asia/Shanghai' 0 3 * * * /usr/bin/docker exec mysql8.0 bash -c "mkdir -p /mysqlbak && mysqldump -uroot -p123456 --databases ce_blog > /mysqlbak/$(TZ='Asia/Shanghai' date +'\%Y-\%m-\%d-\%H-\%M-\%S').sql" 2>> /home/docker/mysql8.0/logs/mysql_backup_error.log # 验证定时任务 crontab -l

恢复

mysql恢复命令mysql,运行命令

DOCKER
# 运行这条命令会将宿主机的/home/docker/mysql8.0/bak/ce_blog.sql这个文件数据恢复 docker exec -i mysql8.0 mysql -uroot -p123456 ce_blog < /home/docker/mysql8.0/bak/ce_blog.sql # 可能会报错 ERROR 1067 (42000) at line 44: Invalid default value for 'comment_date' # 这个错误是sql模式使用了严格模式,执行下面语句即可 docker exec -i mysql8.0 mysql -uroot -p123456 -e "SET GLOBAL sql_mode='';" && \ docker exec -i mysql8.0 mysql -uroot -p123456 ce_blog < /home/docker/mysql8.0/bak/ce_blog.sql && \ docker exec -i mysql8.0 mysql -uroot -p123456 -e "SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';"

欢迎来到我的世界!