You've already forked www.colben.cn
udpate
This commit is contained in:
209
content/post/mysql-backup.md
Normal file
209
content/post/mysql-backup.md
Normal file
@@ -0,0 +1,209 @@
|
||||
---
|
||||
title: "mysql/mariadb 备份"
|
||||
date: 2019-10-30T00:54:15+08:00
|
||||
lastmod: 2026-04-21T19:52:00+08:00
|
||||
tags: ["xtrabackup", "mariabackup", "mysql-shell", "备份", "mysql", "mariadb"]
|
||||
categories: ["database"]
|
||||
---
|
||||
|
||||
## xtrabackup
|
||||
### 环境
|
||||
- mysql 8.4
|
||||
- rockylinux 9.6
|
||||
|
||||
### 安装
|
||||
- [下载与操作系统和 mysql 版本对应的通用二进制包](https://www.percona.com/downloads/),解压
|
||||
```bash
|
||||
tar zxf percona-xtrabackup-8.4.0-5-Linux-x86_64.glibc2.34-minimal.tar.gz
|
||||
mv percona-xtrabackup-8.4.0-5-Linux-x86_64.glibc2.34-minimal /opt/pxb
|
||||
```
|
||||
|
||||
### 创建备份用户和目录
|
||||
- **备份目录如果是 nfs,挂载时需指定 sync 选项**
|
||||
- 创建备份用户
|
||||
```sql
|
||||
CREATE USER xb@localhost IDENTIFIED BY 'Xtrabackup_1234';
|
||||
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO xb@localhost;
|
||||
GRANT SELECT ON performance_schema.log_status TO xb@localhost;
|
||||
GRANT SELECT ON performance_schema.keyring_component_status TO xb@localhost;
|
||||
GRANT SELECT ON performance_schema.replication_group_members TO xb@localhost;
|
||||
```
|
||||
|
||||
### 全量备份和恢复
|
||||
- 备份
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --backup --target-dir=/backup/ \
|
||||
--user=xb --password=Xtrabackup_1234
|
||||
```
|
||||
|
||||
- 准备
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --prepare --target-dir=/backup/
|
||||
```
|
||||
|
||||
- 恢复,**提前停止 mysql**
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --move-back --target-dir=/backup/
|
||||
chown -R mysql:mysql /var/lib/mysql
|
||||
```
|
||||
|
||||
### 增量备份和恢复
|
||||
- 先全量备份一次
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --backup --target-dir=/backup/full \
|
||||
--user=xb --password=Xtrabackup_1234
|
||||
```
|
||||
|
||||
- 创建增量备份
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --backup --target-dir=/backup/incre \
|
||||
--incremental-basedir=/backup/full \
|
||||
--user=xb --password=Xtrabackup_1234
|
||||
```
|
||||
|
||||
- 准备全量备份,**注意这里指定"--apply-log-only"避免事务回滚**
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --prepare --apply-log-only --target-dir=/backup/full
|
||||
```
|
||||
|
||||
- 准备增量备份,**准备最后一个增量备份无需指定"--apply-log-only"**
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --prepare --target-dir=/backup/full \
|
||||
--incremental-dir=/data/backups/incre
|
||||
```
|
||||
|
||||
- 恢复,**提前停止 mysql**
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --move-back --target-dir=/backup/full
|
||||
chown -R mysql:mysql /var/lib/mysql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## mariabackup
|
||||
### 环境
|
||||
- mariadb 10.3
|
||||
- rockylinux 8.10
|
||||
|
||||
### 安装
|
||||
```bash
|
||||
dnf install mariadb-backup
|
||||
```
|
||||
|
||||
### 创建备份用户
|
||||
```sql
|
||||
CREATE USER backup@localhost IDENTIFIED BY 'Backup_1234';
|
||||
GRANT SELECT, RELOAD, PROCESS, REPLICATION CLIENT ON *.* TO backup@localhost;
|
||||
```
|
||||
|
||||
### 全量备份和恢复
|
||||
- 备份
|
||||
```bash
|
||||
mariabackup --backup --target-dir=/backup/ \
|
||||
--user=backup --password=Backup_1234
|
||||
```
|
||||
|
||||
- 准备
|
||||
```bash
|
||||
mariabackup --prepare --target-dir=/backup/
|
||||
```
|
||||
|
||||
- 恢复,**提前停止 mariadb**
|
||||
```bash
|
||||
mariabackup --move-back --target-dir=/backup/
|
||||
chown -R mysql:mysql /var/lib/mysql
|
||||
```
|
||||
|
||||
### 增量备份和恢复
|
||||
- 先全量备份一次
|
||||
```bash
|
||||
mariabackup --backup --target-dir=/backup/full \
|
||||
--user=backup --password=Backup_1234
|
||||
```
|
||||
|
||||
- 创建增量备份
|
||||
```bash
|
||||
mariabackup --backup --target-dir=/backup/incre \
|
||||
--incremental-basedir=/backup/full \
|
||||
--user=backup --password=Backup_1234
|
||||
```
|
||||
|
||||
- 准备全量备份
|
||||
```bash
|
||||
mariabackup --prepare --target-dir=/backup/full
|
||||
```
|
||||
|
||||
- 准备增量备份
|
||||
```bash
|
||||
mariabackup --prepare --target-dir=/backup/full \
|
||||
--incremental-dir=/data/backups/incre
|
||||
```
|
||||
|
||||
- 恢复,**提前停止 mariadb**
|
||||
```bash
|
||||
/opt/pxb/bin/xtrabackup --move-back --target-dir=/backup/full
|
||||
chown -R mysql:mysql /var/lib/mysql
|
||||
```
|
||||
|
||||
## mysqlsh
|
||||
### 环境
|
||||
- mysql 8.4
|
||||
- rockylinux 9.6
|
||||
|
||||
### 安装
|
||||
- [下载最新的通用二进制包](https://dev.mysql.com/downloads/shell/),解压
|
||||
```bash
|
||||
tar zxf mysql-shell-8.4.9-linux-glibc2.28-x86-64bit.tar.gz
|
||||
mv mysql-shell-8.4.9-linux-glibc2.28-x86-64git /opt/mysql-shell
|
||||
```
|
||||
|
||||
### 创建备份用户
|
||||
- 创建备份用户
|
||||
```sql
|
||||
CREATE USER shell@'%' IDENTIFIED BY 'Shell_1234';
|
||||
GRANT PROCESS, RELOAD, LOCK TABLES ON *.* TO shell@localhost;
|
||||
```
|
||||
|
||||
### 备份命令
|
||||
- 简化 msyql-shell 命令
|
||||
```bash
|
||||
export MYSQLSH="/opt/mysql-shell -h 'mysql-ip' -P 3306 -u shell -p 'Shell_1234'"
|
||||
# 替换其中的 'mysql-ip'
|
||||
```
|
||||
|
||||
- 备份实例
|
||||
```bash
|
||||
$MYSQLSH -e 'util.dumpInstance("/data/backup/full", {compression: "zstd"})'
|
||||
# includeSchemas/excludeSchemas: ["db1", "db2"], 指定/忽略备份某些库
|
||||
# includeTables/excludeTables: ["db1.tb1", "db2.tb2"], 指定/忽略备份某些库
|
||||
# routines/users/triggers: true, 备份函数和存储过程/账号/触发器
|
||||
```
|
||||
|
||||
- 备份指定库
|
||||
```bash
|
||||
$MYSQLSH -e 'util.dumpInstance("/data/backup/dbs", {includeSchemas: ["db1", "db2"]})'
|
||||
# 或
|
||||
$MYSQLSH -e 'util.dumpSchemas(["db1", "db2"], "/data/backup/dbs")'
|
||||
```
|
||||
|
||||
- 备份指定表
|
||||
```bash
|
||||
$MYSQLSH -e 'util.dumpInstance("/data/backup/tbs", {includeTables: ["db1.tb1", "db2.tb2"]})'
|
||||
# 或
|
||||
$MYSQLSH -e 'util.dumpTables("db1", ["tb1", "tb2"], "/data/backup/db1_tbs")'
|
||||
```
|
||||
|
||||
- 导入数据,建议在服务器本地导入
|
||||
```bash
|
||||
# 开启 local_infile
|
||||
mysql -S /tmp/mysql.sock -uroot -p -e "set global LOCLA_INFILE=ON"
|
||||
|
||||
/opt/mysql-shell/bin/mysqlsh -S /tmp/mysql.sock \
|
||||
-e 'util.loadDump("/data/backup/xxxx", {loadUsers: true})'
|
||||
# loadUsers: true, 导入账号
|
||||
```
|
||||
|
||||
## 参考
|
||||
- https://mp.weixin.qq.com/s/RC6MykrGbZ850xh3AOjrtw
|
||||
- https://swmlee.com/2020/06/18/technicalessays/mariadbseries/08mariadb-dump-backup/
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
---
|
||||
title: "Xtrabackup 笔记"
|
||||
date: 2019-10-30T00:54:15+08:00
|
||||
lastmod: 2019-10-30T00:54:15+08:00
|
||||
tags: ["xtrabackup", "备份", "mysql"]
|
||||
categories: ["database"]
|
||||
---
|
||||
|
||||
## 环境
|
||||
- CentOS7
|
||||
- MySQL 5.27.22
|
||||
- XtraBackup 2.4
|
||||
|
||||
## 安装
|
||||
- 创建 percona.repo 文件,内容如下
|
||||
```ini
|
||||
[percona-release-x86_64]
|
||||
name = Percona Original release/x86_64 YUM repository
|
||||
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/RPMS/x86_64
|
||||
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/RPMS/x86_64
|
||||
enabled = 1
|
||||
gpgcheck = 0
|
||||
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
|
||||
[percona-release-noarch]
|
||||
name = Percona Original release/noarch YUM repository
|
||||
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/RPMS/noarch
|
||||
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/RPMS/noarch
|
||||
enabled = 1
|
||||
gpgcheck = 0
|
||||
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
|
||||
[percona-release-sources]
|
||||
name = Percona Original release/sources YUM repository
|
||||
#baseurl = http://repo.percona.com/percona/yum/release/$releasever/SRPMS
|
||||
baseurl = https://mirrors.cloud.tencent.com/percona/percona/yum/release/$releasever/SRPMS
|
||||
enabled = 0
|
||||
gpgcheck = 0
|
||||
gpgkey = file:///etc/pki/rpm-gpg/PERCONA-PACKAGING-KEY
|
||||
```
|
||||
- 安装
|
||||
```bash
|
||||
yum clean all
|
||||
yum makecache fast
|
||||
yum install percona-xtrabackup-24
|
||||
```
|
||||
|
||||
## 创建数据库备份用户
|
||||
```sql
|
||||
create user percona@localhost identified by '123456';
|
||||
grant reload, lock tables, process, replication client on *.* to percona@localhost;
|
||||
flush privileges;
|
||||
```
|
||||
|
||||
## 全量备份
|
||||
- 按天创建全量备份目录
|
||||
```bash
|
||||
xtrabackup --backup --rsync --parallel=4 --user=percona --password=123456 \
|
||||
--target-dir=/backup/$(date +mysql.%Y%m%d)
|
||||
# --databases='db1 db2.t3', 只导出 db1 数据库和 db2 中的 t3 表
|
||||
# --databases-exclude='db4 db5.t6', 不导出 db4 数据库和 db5 中的 t6 表,优先级高于 --database
|
||||
# --databases-file=/path/to/filename, 指定包含要备份的数据库的文件名,每行一个 db 或者 db.tb
|
||||
# --tables='db1.t2 db3.t4', 只导出 db1 中的 t2 表和 db3 中的 t4 表
|
||||
# --tables-exclude='db5.t6 db7.t8', 不导出 db5 数据库的 t6 表和 db7 的 t8 表
|
||||
# --tables-file=/path/to/filename, 指定包含要备份的数据表的文件名,每行一个 db.tb
|
||||
# --safe-slave-backup, 备份前刷新 slave 临时表,安全退出 slave sql 线程
|
||||
# --slave-info 记录 slave 读取的 master binlog 的位置
|
||||
# NFS 挂载时,需使用 sync 模式
|
||||
# 保留最近 3 天的全量备份
|
||||
ls -d mysql.* | head -n -3 | xargs rm -rf
|
||||
```
|
||||
|
||||
## 恢复数据
|
||||
- 准备一个 xtrabackup 备份目录
|
||||
```bash
|
||||
xtrabackup --prepare --use-memory=2G --target-dir=/backup/20190711
|
||||
# --use-memory=2G 允许使用 2G 内存用于 prepare 数据,默认 100M
|
||||
```
|
||||
- 停止 mysql 服务,移除数据目录
|
||||
```bash
|
||||
systemctl stop mysqld
|
||||
cd /var/lib && [ -d mysql ] && mv mysql mysql_origin
|
||||
```
|
||||
- 恢复 mysql 数据
|
||||
```bash
|
||||
xtrabackup --copy-back --rsync --parallel=4 --target-dir=/backup/20190711
|
||||
chown -R mysql.mysql /var/lib/mysql
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user