From a665d20d174b5b6c939e720e7b41e8a1664f4d23 Mon Sep 17 00:00:00 2001 From: colben Date: Tue, 21 Apr 2026 22:21:25 +0800 Subject: [PATCH] udpate --- content/post/mysql-backup.md | 209 +++++++++++++++++++++++++++++++++++ content/post/xtrabackup.md | 87 --------------- 2 files changed, 209 insertions(+), 87 deletions(-) create mode 100644 content/post/mysql-backup.md delete mode 100644 content/post/xtrabackup.md diff --git a/content/post/mysql-backup.md b/content/post/mysql-backup.md new file mode 100644 index 0000000..0902f5a --- /dev/null +++ b/content/post/mysql-backup.md @@ -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/ + diff --git a/content/post/xtrabackup.md b/content/post/xtrabackup.md deleted file mode 100644 index b87acc4..0000000 --- a/content/post/xtrabackup.md +++ /dev/null @@ -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 - ``` -