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 星期:周二、周四、周六
浙公网安备 33010602011771号