docker安装mysql并备份

1. 准备工作

  • 首先服务器安装好docker环境,可参考博主的知乎链接:linux环境下安装docker - Yourbestboy的文章 - 知乎

2. 拉取镜像

  • 查找镜像,命令:docker search mysql,如下图:

docker安装mysql并备份_第1张图片

  • 也可以查询指定版本:docker search mysql:8.0,如下图:

docker安装mysql并备份_第2张图片

  • 拉去镜像,docker pull mysql 默认拉取的版本是latest,也可以拉取指定版本:docker pull mysql:8.0,如下图所示:

docker安装mysql并备份_第3张图片

  • 待拉取完成之后,查看镜像,命令:docker images, 如下图所示,出现mysql镜像

docker安装mysql并备份_第4张图片

3.创建配置文件

  • 由于mysql的配置文件要是不挂在到宿主机目录下,修改或者变更配置文件不方便,故需要将配置文件挂载出来,可方便操作,数据同理。但是配置文件在哪里呢?可以查看dockerhub官方的mysql的dockerfile文件进行查看:dockerhub

  • 在本地创建mysql的配置文件my.cnf

mkdir -p /opt/mysql/conf/
cd /opt/mysql/conf/
vim my.cnf


[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
tmpdir          = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
skip-name-resolve
# 主服务器唯一ID
server-id=1
  • 将数据挂在到宿主机目录下
mkdir -p /opt/mysql/mysql 

4.启动mysql

  • 启动mysql
docker run -d -p 3306:3306 --name mysql -v /opt/mysql/conf/:/etc/mysql/conf.d/ -v /opt/mysql/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 参数详解
参数 说明
-d 标识启动mysql后台运行,切启动完成之后返回容器id
-p 3306:3306 端口映射,前者3306为宿主机端口,后者3306为容器内部端口
–name mysql 容器名 为 mysql 自定义
-v /opt/mysql/conf/:/etc/mysql/conf.d/ -v 挂在 /opt/mysql/conf/:宿主机目录 /etc/mysql/conf.d/:容器内部目录,将容器内部目录挂载到宿主机目录下
-v /opt/mysql/mysql:/var/lib/mysql 同理
-e MYSQL_ROOT_PASSWORD=123456 设置mysql密码为123456
mysql 最后的mysql为之前所拉取的镜像名称
  • 运行命令之后,输入:docker ps,查看如下图:

图5至此代表mysql已经安装成功。

4.进入容器内,连接mysql

  • 进入容器内部
docker exec -it 73eadb6f35e2 bash 
#或者
docker exec -it 73eadb6f35e2 /bin/bash

图6

  • 连接mysql
    mysql -uroot -p 回车,输入密码:再回车即可,出现如下图所示即成功登录,之后就是mysql的命令操作了,详情可查看博主的:mysql安装docker安装mysql并备份_第5张图片

备注:

  • 如果需要将mysql容器设置成当docker服务启动的时候,mysql容器随之重启:
docker run -d -p 8080:8080 --name mysql--restart=always  mysql
#还有将运行的容器设置根据docker服务启动而启动
docker update --restart=always 容器名字或者容器ID

docker安装的mysql进行定时备份

  • 提前准备好脚本以及数据备份存放目录
#!/bin/bash
# 容器名称  容器ID,容器名称都行,建议使用id,不会被更改
container_name="73eadb6f35e2"
# 数据库账户
mysql_name="root"
# 数据库密码
mysql_pwd="123456"
# 数据库备份根目录
backup_dir="/home/mysqlBak/data"
bakup_log="/home/mysqlBak/log"
# 备份数据库
DATABASES=$(/usr/bin/docker exec -i ${container_name} mysql -u${mysql_name} -p${mysql_pwd} -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql|brp_log")
# 备份数据保留天数
backup_clean_day=5
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then     
                mkdir -p $back_dir;
fi

#循环数据库进行备份
for db in  $DATABASES
do
        echo
        echo ----------$BACKUP_FILEDIR/${db}_`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz BEGIN----------

        /usr/bin/docker exec -i ${container_name}  mysqldump -u${mysql_name} -p${mysql_pwd} --default-character-set=utf8mb4 --single-transaction --source-data=2 --flush-logs --hex-blob --triggers --routines --events --databases ${db} |  gzip > ${backup_dir}/${db}`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz

        #写创建备份日志
        echo "create $bakup_log/${db}-`date "+%Y_%m_%d_%H_%M_%S"`.dupm" >> $bakup_log/log.txt
        echo ----------$BACKUP_FILEDIR/${db}_`date "+%Y_%m_%d_%H_%M_%S"`.sql.gz COMPLETE----------
        echo
done
echo "done"
#删除5天之前的备份
find ${backup_dir} -type f -mtime +${backup_clean_day} -delete
  • 定时任务可查看链接:mysql定时备份,除了脚本略微不同,其他都一样。

你可能感兴趣的:(mysql,docker,数据库)