分类:MySQL| 发布时间:2019-11-07 16:11:00
MySQL 物理备份可以通过 Percona 的 xtrabackup 来进行。 本文主要描述如何对 MySQL 进行物理全备与恢复。
可以从 源码编译 xtrabackup, 如果你的系统是 Ubuntu 或者 Debian 也可以使用 Percona 官方 提供的 deb 包。
通过 Percona 的 xtrabackup 可以实现对 MySQL 进行物理热备份,最大限度减少备份操作对业务系统的影响。
在 MySQL 所在主机运行以下命令:
$ xtrabackup \
--password=123456 \
--user="root" \
--backup \
--datadir=/var/lib/mysql/ \
--socket=/var/run/mysqld/mysqld.sock \
--target-dir=/data/mysqlbackup/base
这条命令会将 MySQL 备份到 /data/mysqlbackup/base 目录下。
这个命令的执行过程中,会将执行过程输出到标准错误中。 成功执行后,会有如下的输出:
MySQL binlog position: filename 'mysql-bin.000004', position '777', GTID of the last change 'd01d92c6-399c-11e9-88c1-00163e02ae86:1-4'
191107 15:36:31 [00] Writing /data/mysqlbackup/base/backup-my.cnf
191107 15:36:31 [00] ...done
191107 15:36:31 [00] Writing /data/mysqlbackup/base/xtrabackup_info
191107 15:36:31 [00] ...done
xtrabackup: Transaction log of lsn (1308177312) to (1308177321) was copied.
191107 15:36:31 completed OK!
和使用 mysqldump 类似,你需要创建一个含有 MySQL 密码的配置文件,然后使用 --defaults-extra-file 选项指定这个文件(去掉 --password 选项)。 文件内容如下:
[xtrabackup]
password=123456
如下:
$ xtrabackup \
--password=123456 \
--user="root" \
--backup \
--datadir=/var/lib/mysql/ \
--socket=/var/run/mysqld/mysqld.sock \
--stream=xbstream > full.xbstream
这个命令会将备份集以 xbstream 格式输出到标准输出中。 这个格式的备份集可以使用 percona-xtrabackup 包自带的 xbstream 命令来进行解包:
$ mkdir full
$ xbstream -x -C full <full.xbstream
由于 xtrabackup 备份出来的 MySQL 数据并不是一致的,在将其用于恢复前需要先将其恢复到一致状态:
$ xtrabackup --prepare --target-dir=/data/mysqlbackup/base
之后就可以将备份集的数据复制回 MySQL 的数据目录:
$ xtrabackup --copy-back --target-dir=/data/mysqlbackup/base --datadir=/var/lib/mysql
在进行这一步前需要确保 MySQL 服务进程已经停止,并且确保 datadir 的目录是空的
如果你不需要保留备份集也可以使用 --move-back 参数来代替 --copy-back。
或者你可 rsync 等其他命令进行数据的复制操作,比如:
$ rsync -avrP /data/mysqlbackup/base/ /var/lib/mysql/
复制完成后,你需要修改数据文件的所有者
$ chown -R mysql:mysql /var/lib/mysql
以确保 MySQL 进程有正确的权限对其进行访问。 现在,你可以启动 MySQL 并且验证恢复是否正常了。