docker-compose安装MySQL8并开启远程登录(1045)

docker-compose安装MySQL8并开启远程登录(1045)

编写docke-compose.yml文件

vim docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:8.0.31
    container_name: mysql
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: PASSWORD
      # 初始化数据库
    ports:
      - "3306:3306"
    volumes:
      # 数据挂载
      - ./data/mysql/data/:/var/lib/mysql/
      - ./data/mysql/logs/:/var/lib/logs/
      # 配置挂载
      - ./data/mysql/conf/:/etc/mysql/conf.d/
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    privileged: true
    # restart: always
    networks:
      my_net:
        ipv4_address: 172.30.0.36
    deploy:
      resources:
        limits:
          cpus: 0.25
          memory: 768M
        reservations:
          # cpus: 0.2
          memory: 256M
networks:
  my_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.30.0.0/16

启动mysql8

docker-compose up -d mysql

登录mysql8

在主机上登录:mysql -hmysql -uroot -p
在容器里登录:docker exec -it mysql mysql -uroot -p

设置mysql8密码为空

-- 依次输入如下sql
use mysql;
UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';
UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='%';
FLUSH PRIVILEGES;
exit;

重启mysql8

docker restart mysql

重新登录mysql8

mysql -hmysql -uroot

设置密码

方式1

mysqladmin -u root -p password "NEW_PASSWORD"
# 系统会提示您输入当前的root密码,然后可能会要求您确认新密码

方式2

-- 依次输入如下sql
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED BY 'PASSWORD' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
FLUSH PRIVILEGES;

创建新用户并授权

CREATE USER 'USER'@'%' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
GRANT CREATE ON *.* TO 'USER'@'%';
FLUSH PRIVILEGES;

数据库备份

编写脚本 backup.sh

#!/bin/bash

# 设置备份目录的基础路径(父目录)
backup_base_dir="$(dirname "$(readlink -f "$0")")"

# 设置备份数据库
db_name=DATABASE_NAME

# 获取当前日期格式化的字符串
db_date=$(date +"%Y%m%d_%H")
db_dir="${backup_base_dir}/${db_name}"

# 创建备份目录(如果它们尚不存在)
mkdir -p "$db_dir"

# 设置备份文件名
dbfile="${db_dir}/${db_name}_${db_date}.sql"

echo 备份数据库:mysqldump --databases ${db_name} -uroot -p "${dbfile}"
# 执行备份并检查状态
mysqldump --databases ${db_name} -uroot -pPASSWORD > "${dbfile}" 2> "${dbfile}.err" && {
  # 数据库备份成功,删除两个月以前的备份
  find "$db_dir" -type f -name "*.sql" -mtime +60 -delete
} || {
  echo "数据库备份失败"
}

添加定时任务

临时任务

alias ll='ls -l -h --time-style="+%Y-%m-%d %H:%M:%S"'
# 支持且仅支持其中1个:` +1 month +2 days +2 hours +3 minutes +4 seconds`
echo "bash /path/to/backup.sh" | at now + 3 hours

定时任务

编辑crontab文件

打开终端,并输入以下命令来编辑当前用户的crontab文件:

crontab -e
追加一行corn表达式

在打开的编辑器中,你可以添加一行或多行来定义你的定时任务。每行都包含一个cron表达式,后面跟着要执行的命令。例如,如果你想要在每周二、四、六的凌晨1点执行backup.sh脚本,你可以在crontab中添加以下条目:

0 1 * * 2,4,6 /path/to/backup.sh

cron表达式的含义是:

  • 0 分钟:在小时的开始(即0分)
  • 1 小时:凌晨1点
    • 日期:每天
    • 月份:每个月
  • 2,4,6 星期:周二、周四、周六
posted @ 2023-07-07 21:47  明月心~  阅读(1328)  评论(0)    收藏  举报