TypechoJoeTheme

阿尔法色色之屋

【vate】Docker安装MySQL及备份

本文最后更新于2025年05月31日。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
为了有更好的阅读体验,阿尔法色色之屋为长篇文章提供了目录树,若没有正常显示,则需要手动缩小页面比例。
文章首发vate,授权alphaH转载。转载需标明出处,禁止未经授权转载。

MySQL容器创建

  1. 现在推荐MySQL8.4 LTSC版本
  2. 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 ON *.* 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' --no-tablespaces database_name > "/mysqlbk/$(date +\%Y\%m\%d_\%H\%M\%S).sql"

根据官方文档说明,如果命令带--no-tablespaces 就不需要使用PROCESS 权限

https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html

mysqldump requires at least the SELECT privilege for dumped tables, SHOW VIEW for dumped views, TRIGGER for dumped triggers, LOCK TABLES if the --single-transaction option is not used, PROCESS if the --no-tablespaces option is not used, and the RELOAD or FLUSH_TABLES privilege with --single-transaction if both gtid_mode=ON and gtid_purged=ON|AUTO. Certain options might require other privileges as noted in the option descriptions.
赞(1)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

标签云