Docker安装MySQL及备份
文章首发vate,授权alpha转载。转载需标明出处,禁止未经授权转载。
MySQL容器创建
- 现在推荐MySQL8.4 LTSC版本
- docker compose 文件现在不需要version声明了
docker compose 文件
services:
mysql-db:
# 指定容器的名称
container_name: mysql
# 指定镜像和版本
image: mysql:8.0
ports:
- "3306:3306"
restart: always
# 容器日志大小配置
logging:
driver: 'json-file'
options:
max-size: '5g'
environment:
# 配置root密码
MYSQL_ROOT_PASSWORD: PASSWORD
volumes:
# 挂载数据目录
- "./data:/var/lib/mysql"
# 挂载配置文件目录
- "./config:/etc/mysql/conf.d"
MySQL 用户权限
因为要从容器外面连入,所以MySQL用户的host不能为localhost。
权限不推荐照搬,建议最小权限原则,只提供需要的权限就好
-- 登入容器
docker exec -it mysql mysql -u username -p
CREATE USER 'user1'@'%' IDENTIFIED BY 'password';
ALTER USER 'user1'@'%' IDENTIFIED BY 'password';
-- 授予备份权限
GRANT PROCESS, SHOW VIEW ON *.* TO `user1`@`%`;
-- 增删改查权限
GRANT ALL PRIVILEGES ON `database`.* TO `user1`@`%` ;
-- 刷新权限
FLUSH PRIVILEGES;
-- 权限太大不建议使用:
--- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 如果已存在其他 host 的 root 用户,可以复制权限
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' AS 'root'@'localhost';
MySQL数据导入
如果有需要,要提前创建数据库
-- 登入容器
docker exec -it mysql_container_name mysql -u username -p
mysql> create database database_name
注入数据
docker exec -i mysql mysql -uroot -p'PASSWORD' database_name < ./data.sql
MySQL数据备份
用 crontab 创建定时计划
# crontab -e
0 6 * * * /usr/bin/docker exec mysql mysqldump -uroot -p'PASSWORD' halo > "/mysqlbk/$(date +\%Y\%m\%d_\%H\%M\%S).sql"