[TOC]
【Mysql】Docker下Mysql8数据备份与恢复
1 创建Mysql容器
-
格式
-
示例
2 连接Mysql
-
Navicat
-
创建SQL
-
3 Binlog检查
3.1 检查是否开启
-
ON : 开启
-
OFF : 关闭
3.2 mysql 5.7
-
找到
my.cnf
- docker 位置:
/etc/my.cnf
- docker 位置:
-
开启
3.3 mysql8
- 默认开启
4 备份数据库
4.1 容器里执行备份
-
进入容器
-
在容器内创建备份目录
前面创建容器时已创建,没有则执行下面
-
全量备份SQL
4.2 宿主机执行备份
-
格式
-
示例
4.3 参数说明
mysqldump
: 这是 mysqldump 命令的执行路径或者别名,用于备份 MySQL 数据库。--single-transaction
: 在导出数据时使用单个事务,这样可以确保导出的数据是一个一致性状态的快照,避免了在备份过程中数据变化引起的问题。--flush-logs
: 在备份完成后刷新日志文件,这样可以确保备份包含了最新的日志记录。--source-data=2
: 指定数据来源的格式,这里是指定为默认格式 2,表示在备份过程中,将主服务器的二进制日志位置信息也备份到文件中。这个参数比较重要,用于在恢复数据时找到位置信息。- Mysql 8 :
--source-data=2
- Mysql 5.7 :
--master-data=2
- Mysql 8 :
--routines
: 备份存储过程和函数。--opt
: 表示使用优化过的备份方式,以提高备份速度和减少备份文件的大小。-uroot
: 使用 root 用户连接到 MySQL 数据库。-p
: 提示输入密码。test
: 要备份的数据库名称,这里假设要备份的数据库名为 test。> backup.sql
: 将导出的 SQL 数据写入到 backup.sql 文件中。
5 定时备份
使用crontab定时任务来实现定时备份功能
-
新建个shell脚本
mysql-backup.sh
#!/bin/bash
docker exec mysql-8 sh -c ‘mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot -pn2wqeGrlv7 test > /backup/test_$(date +%Y%m%d_%H%M%S).sql’
crontab -e
按 shift + :
输入 wq
mysql -uroot -p123456 test < /backup/test_20240714_123905.sql
docker exec -i mysql-8 mysql -uroot -p123456 test < /workspace/mysql-8-backup/test_20240714_123905.sql