OpenEuler 系统 MySQL 数据库备份与恢复超详细教程
本教程全程适配 OpenEuler 20.03/22.03/24.03 LTS 主流版本,覆盖从入门级逻辑备份到生产级物理热备、增量备份与时间点恢复全场景,所有命令均可直接复制执行,附带完整参数解释与避坑指南。
一、前置环境准备与基础配置
1. 环境说明与前提
- 系统:OpenEuler LTS 系列版本
- 数据库:MySQL 5.7/8.0 (MariaDB 操作逻辑完全兼容)
- 权限:所有操作需使用 root 用户或具备 sudo 权限的普通用户
- 前提:MySQL 服务已正常安装并运行
2. MySQL 服务状态检查
执行以下命令确认服务正常运行,备份前必须保证服务处于正常状态
# 查看服务运行状态
systemctl status mysqld
# MariaDB对应命令:systemctl status mariadb
# 验证MySQL登录可用性
mysql -u root -p -e "SELECT VERSION();"
3. 专用备份用户创建与权限配置
生产环境禁止直接使用 root 用户备份,需创建专用备份用户并授予最小必要权限
-
登录 MySQL 命令行
mysql -u root -p
-
创建备份用户并授权
-- 创建本地备份用户(替换为你的备份密码)
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'Backup@123456';
-- 授予备份所需核心权限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, SELECT, SHOW VIEW, EVENT, TRIGGER ON . TO 'backup_user'@'localhost';
-- MySQL 8.0 热备需额外添加BACKUP_ADMIN权限
GRANT BACKUP_ADMIN ON . TO 'backup_user'@'localhost';
-- 刷新权限生效
FLUSH PRIVILEGES;
exit; -
权限说明
RELOAD:用于执行 FLUSH LOGS、FLUSH TABLES 等刷新操作LOCK TABLES:用于备份时锁表保证数据一致性REPLICATION CLIENT:用于获取 binlog 二进制日志位置SELECT:用于读取表数据进行备份BACKUP_ADMIN:MySQL 8.0 热备所需的实例备份权限
4. 核心前提:开启 binlog 二进制日志(增量恢复必备)
binlog 是 MySQL 增量备份、时间点恢复、误删数据急救的核心,必须提前开启
-
编辑 MySQL 主配置文件
vim /etc/my.cnf
-
在
[mysqld]段落中添加以下配置[mysqld]
服务器唯一ID,单实例填1即可,主从环境需保证唯一
server-id = 1
开启binlog日志,指定日志文件前缀
log_bin = mysql-bin
binlog格式,推荐ROW行模式(数据恢复最安全,无数据丢失风险)
binlog_format = ROW
binlog自动过期时间,单位天,避免磁盘占满
expire_logs_days = 7
每次事务提交立即刷写binlog到磁盘,极致数据安全
sync_binlog = 1
字符集配置,避免备份恢复乱码
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci -
重启 MySQL 服务使配置生效
systemctl restart mysqld
-
验证 binlog 是否开启成功
mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin';"
若返回结果中Value为ON,则表示开启成功。
二、MySQL 备份全方案(从入门到生产级)
MySQL 备份分为逻辑备份 和物理备份两大类,逻辑备份兼容性强、操作简单,适合中小库;物理备份速度快、无锁影响,适合 TB 级大库生产环境。
(一)逻辑备份 1:mysqldump 自带工具全详解(兼容性最强)
mysqldump 是 MySQL 安装自带的逻辑备份工具,无需额外安装,将数据库转换成 SQL 脚本文件,跨版本、跨平台兼容性拉满,是新手入门、中小库备份的首选。
1. 核心语法与通用参数
- 基础语法:
mysqldump [选项] > 备份文件绝对路径/备份文件名.sql - 执行位置:必须在 OpenEuler 系统终端执行,不能在 MySQL 命令行内执行
- 通用核心参数(生产环境必加):
表格
| 参数 | 作用说明 |
|---|---|
-u 用户名 |
指定 MySQL 登录用户 |
-p |
交互式输入密码,也可直接写-p密码(无空格,不推荐,密码会明文暴露) |
--single-transaction |
针对 InnoDB 引擎,开启事务一致性快照,备份期间完全不锁表,不影响业务读写,生产环境必加 |
--routines |
备份存储过程和函数 |
--triggers |
备份触发器 |
--events |
备份事件调度器 |
--master-data=2 |
记录 binlog 日志文件名和位点,用于增量恢复 / 主从搭建,2 表示注释状态,1 表示直接生效 |
--quick |
逐行读取表数据,不缓存整表到内存,适合大表备份 |
--default-character-set=utf8mb4 |
指定字符集,彻底避免备份恢复乱码 |
--add-drop-table |
建表前添加 DROP TABLE 语句,恢复时直接覆盖旧表,默认开启 |
2. 全场景备份命令与示例
提前创建专用备份目录,避免权限问题:
mkdir -p /data/mysql_backup
chmod 700 /data/mysql_backup
(1)全库备份(备份整个 MySQL 实例所有数据库)
-
基础全库备份
mysqldump -u backup_user -p --all-databases > /data/mysql_backup/mysql_full_backup_$(date +%Y%m%d_%H%M%S).sql
-
生产级优化全库备份(InnoDB 引擎无锁,推荐)
mysqldump -u backup_user -p
--all-databases
--single-transaction
--routines --triggers --events
--master-data=2
--quick
--default-character-set=utf8mb4 \/data/mysql_backup/mysql_full_backup_$(date +%Y%m%d_%H%M%S).sql
(2)单个指定数据库备份...
mysql在use下的local中
已完成思考
OpenEuler 系统 MySQL(/usr/local 安装版)备份与恢复超详细教程
本教程针对手动编译安装或解压安装在 /usr/local/mysql 目录下 的 MySQL 5.7/8.0 版本适配,所有路径、命令均已调整为 /usr/local 环境,覆盖逻辑备份、物理热备、增量备份与时间点恢复全场景。
一、前置环境准备与基础配置
1. 环境说明与前提
- 系统:OpenEuler LTS 系列版本
- 数据库:MySQL 5.7/8.0(安装路径:
/usr/local/mysql) - 权限:所有操作需使用 root 用户或具备 sudo 权限的普通用户
- 前提:MySQL 服务已正常安装并运行
2. MySQL 服务状态检查
# 方式1:通过自定义启动脚本检查(若使用mysql.server)
/usr/local/mysql/support-files/mysql.server status
# 方式2:通过进程检查
ps -ef | grep mysqld
# 验证MySQL登录可用性(使用绝对路径)
/usr/local/mysql/bin/mysql -u root -p -e "SELECT VERSION();"
3. 专用备份用户创建与权限配置
-
登录 MySQL 命令行
/usr/local/mysql/bin/mysql -u root -p
-
创建备份用户并授权
-- 创建本地备份用户(替换为你的备份密码)
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'Backup@123456';
-- 授予备份所需核心权限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, SELECT, SHOW VIEW, EVENT, TRIGGER ON . TO 'backup_user'@'localhost';
-- MySQL 8.0 热备需额外添加BACKUP_ADMIN权限
GRANT BACKUP_ADMIN ON . TO 'backup_user'@'localhost';
-- 刷新权限生效
FLUSH PRIVILEGES;
exit;
4. 核心前提:开启 binlog 二进制日志(增量恢复必备)
-
编辑 MySQL 配置文件(通常为
/usr/local/mysql/etc/my.cnf或/usr/local/my.cnf,若不存在则创建)vim /usr/local/mysql/etc/my.cnf
-
在
[mysqld]段落中添加以下配置[mysqld]
安装基础目录
basedir = /usr/local/mysql
数据目录(关键!必须与实际安装路径一致)
datadir = /usr/local/mysql/data
服务器唯一ID
server-id = 1
开启binlog日志,指定日志文件前缀(存放在数据目录下)
log_bin = mysql-bin
binlog格式,推荐ROW行模式
binlog_format = ROW
binlog自动过期时间,单位天
expire_logs_days = 7
每次事务提交立即刷写binlog到磁盘
sync_binlog = 1
字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci -
重启 MySQL 服务使配置生效
方式1:通过自定义启动脚本重启
/usr/local/mysql/support-files/mysql.server restart
方式2:若已配置systemctl服务(需提前手动配置)
systemctl restart mysql
-
验证 binlog 是否开启成功
/usr/local/mysql/bin/mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin';"
若返回结果中Value为ON,则表示开启成功。
二、MySQL 备份全方案(/usr/local 路径适配版)
(一)逻辑备份 1:mysqldump 自带工具全详解
1. 核心说明
-
命令路径:
/usr/local/mysql/bin/mysqldump -
建议将
/usr/local/mysql/bin加入环境变量(可选):echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile source /etc/profile若未加入环境变量,以下所有命令需使用绝对路径。
2. 全场景备份命令与示例
提前创建专用备份目录:
mkdir -p /data/mysql_backup
chmod 700 /data/mysql_backup
(1)全库备份(生产级优化版)
/usr/local/mysql/bin/mysqldump -u backup_user -p \
--all-databases \
--single-transaction \
--routines --triggers --events \
--master-data=2 \
--quick \
--default-character-set=utf8mb4 \
> /data/mysql_backup/mysql_full_backup_$(date +%Y%m%d_%H%M%S).sql
(2)单个指定数据库备份
/usr/local/mysql/bin/mysqldump -u backup_user -p \
--single-transaction \
--routines --triggers --events \
--default-character-set=utf8mb4 \
test_db > /data/mysql_backup/test_db_backup_$(date +%Y%m%d).sql
(3)备份时直接压缩(大库必备)
/usr/local/mysql/bin/mysqldump -u backup_user -p \
--all-databases --single-transaction --routines --triggers --events \
| gzip > /data/mysql_backup/mysql_full_backup_$(date +%Y%m%d).sql.gz
3. 增量备份核心:定期备份 binlog
binlog 默认存放在 /usr/local/mysql/data/ 目录下,文件名为 mysql-bin.00000*
# 1. 刷新binlog,生成新的日志文件
/usr/local/mysql/bin/mysql -u backup_user -p -e "FLUSH LOGS;"
# 2. 备份binlog文件到备份目录
cp -p /usr/local/mysql/data/mysql-bin.00000* /data/mysql_backup/binlog/
(二)物理备份 1:冷备份(离线全量备份)
1. 备份操作步骤
-
停止 MySQL 服务
/usr/local/mysql/support-files/mysql.server stop
-
直接拷贝整个数据目录(必须保留文件权限与属性)
cp -rp /usr/local/mysql/data /data/mysql_backup/mysql_cold_backup_$(date +%Y%m%d)
-
启动 MySQL 服务恢复业务
/usr/local/mysql/support-files/mysql.server start
(三)物理备份 2:Percona XtraBackup 热备份(生产级首选)
1. 安装说明
安装步骤与之前一致,但备份时需显式指定 MySQL 的 datadir 和 basedir。
2. 全量热备份操作
xtrabackup --user=backup_user --password='Backup@123456' \
--backup \
--target-dir=/data/mysql_backup/xtrabackup_full/full_$(date +%Y%m%d) \
--parallel=4 \
--datadir=/usr/local/mysql/data \
--basedir=/usr/local/mysql
三、MySQL 数据恢复全方案(/usr/local 路径适配版)
(一)mysqldump 逻辑备份恢复
1. 全库备份文件恢复
# 普通sql文件恢复
/usr/local/mysql/bin/mysql -u root -p < /data/mysql_backup/mysql_full_backup_20260330.sql
# 压缩gz备份文件直接恢复
gunzip < /data/mysql_backup/mysql_full_backup_20260330.sql.gz | /usr/local/mysql/bin/mysql -u root -p
2. source 命令交互式恢复(大文件推荐)
-
登录 MySQL 命令行
/usr/local/mysql/bin/mysql -u root -p
-
执行恢复操
-- 单库/单表恢复:先切换到目标数据库
use test_db;
-- 执行source命令,必须使用备份文件的绝对路径
source /data/mysql_backup/test_db_backup.sql;
(二)binlog 增量备份恢复
1. 核心说明
- mysqlbinlog 命令路径:
/usr/local/mysql/bin/mysqlbinlog - binlog 文件路径:
/usr/local/mysql/data/mysql-bin.00000*
2. 按时间点恢复(误删数据急救)
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003 /usr/local/mysql/data/mysql-bin.000004 \
--stop-datetime="2026-03-30 10:29:59" \
| /usr/local/mysql/bin/mysql -u root -p
(三)冷备份文件恢复步骤
-
停止 MySQL 服务
/usr/local/mysql/support-files/mysql.server stop
-
备份当前数据目录(防止恢复失败)
mv /usr/local/mysql/data /usr/local/mysql/data_bak_$(date +%Y%m%d)
-
将冷备份的文件拷贝回数据目录
cp -rp /data/mysql_backup/mysql_cold_backup_20260330/data /usr/local/mysql/
-
修正数据目录权限(关键步骤)
chown -R mysql:mysql /usr/local/mysql/data
chmod -R 750 /usr/local/mysql/data -
启动 MySQL 服务
/usr/local/mysql/support-files/mysql.server start
(四)XtraBackup 备份文件恢复步骤
1. 全量备份恢复
-
停止 MySQL 服务
/usr/local/mysql/support-files/mysql.server stop
-
备份当前数据目录
mv /usr/local/mysql/data /usr/local/mysql/data_bak_$(date +%Y%m%d)
mkdir -p /usr/local/mysql/data -
准备备份文件
xtrabackup --prepare --target-dir=/data/mysql_backup/xtrabackup_full/full_20260330
-
将备份文件拷贝回 MySQL 数据目录
xtrabackup --copy-back
--target-dir=/data/mysql_backup/xtrabackup_full/full_20260330
--datadir=/usr/local/mysql/data -
修正目录权限并启动服务
chown -R mysql:mysql /usr/local/mysql/data
/usr/local/mysql/support-files/mysql.server start
四、生产级自动化备份方案(/usr/local 路径适配)
1. 自动化备份脚本编写
vim /data/mysql_backup/mysql_auto_backup.sh
脚本内容(关键路径已适配):
#!/bin/bash
# ==================== 配置项开始 ====================
# MySQL安装路径
MYSQL_BASE="/usr/local/mysql"
# MySQL备份用户信息
MYSQL_USER="backup_user"
MYSQL_PASSWORD="Backup@123456"
# 备份目录
BACKUP_DIR="/data/mysql_backup/daily"
# 备份文件保留天数
RETENTION_DAYS=7
# 日期格式
DATE=$(date +%Y%m%d_%H%M%S)
# 日志文件路径
LOG_FILE="${BACKUP_DIR}/backup_log_${DATE}.log"
# ==================== 配置项结束 ====================
# 创建备份目录
mkdir -p ${BACKUP_DIR}
# 日志输出函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> ${LOG_FILE}
}
log "==================== 备份开始 ===================="
# 执行mysqldump全量备份并压缩(使用绝对路径)
${MYSQL_BASE}/bin/mysqldump -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
--all-databases \
--single-transaction \
--routines --triggers --events \
--master-data=2 \
--quick \
--default-character-set=utf8mb4 \
| gzip > ${BACKUP_DIR}/mysql_full_backup_${DATE}.sql.gz
# 判断备份是否成功
if [ $? -eq 0 ]; then
log "备份成功,备份文件:${BACKUP_DIR}/mysql_full_backup_${DATE}.sql.gz"
BACKUP_SIZE=$(du -h ${BACKUP_DIR}/mysql_full_backup_${DATE}.sql.gz | awk '{print $1}')
log "备份文件大小:${BACKUP_SIZE}"
else
log "备份失败!"
exit 1
fi
# 清理超过保留天数的备份文件
log "开始清理${RETENTION_DAYS}天前的备份文件"
find ${BACKUP_DIR} -name "mysql_full_backup_*.sql.gz" -mtime +${RETENTION_DAYS} -delete
find ${BACKUP_DIR} -name "backup_log_*.log" -mtime +${RETENTION_DAYS} -delete
log "过期文件清理完成"
log "==================== 备份结束 ===================="
2. 脚本权限配置与测试
chmod 700 /data/mysql_backup/mysql_auto_backup.sh
bash /data/mysql_backup/mysql_auto_backup.sh
五、关键路径总结(/usr/local 安装版)
表格
| 项目 | 路径 |
|---|---|
| MySQL 安装目录 | /usr/local/mysql |
| 数据目录 | /usr/local/mysql/data |
| 配置文件 | /usr/local/mysql/etc/my.cnf 或 /usr/local/my.cnf |
| 命令工具目录 | /usr/local/mysql/bin |
| binlog 日志目录 | /usr/local/mysql/data |
| 启动脚本 | /usr/local/mysql/support-files/mysql.server |
