热度 1||
文章首发vate个人博客,转载至greatsql社区。转载需标明出处,禁止未经授权转载。
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用户的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';
如果有需要,要提前创建数据库
<code class="language-hljs language-livecodeserver livecodeserver">-- 登入容器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
用 crontab 创建定时计划
# crontab -e0 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.
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com