vlambda博客
学习文章列表

MySQL备份最佳实践

1.逻辑备份

mysqldump

这里只是一个简单的示例

备份指定的数据库:

mysqldump --single-transaction members | gzip - > members.sql.gz

备份所有的数据库:

mysqldump --single-transaction --all-databases | gzip - > full_backup.sql.gz

--single-transaction获得一致性备份。


备份还原测试

zcat my_full_backup.sql.gz | mysql


mydumper

mydumper是第三方工具,类似mysqldump,但是提供了很多其它特性,比如并行、一致性读、内嵌压缩;此外,mydumper是将每个表备份到单独的文件,这样更容易还原单个表。

mydumper --compress

还包含了myloader,可以并行还原表。


备份还原测试

myloader --directory dump_dir --overwrite-tables --verbose=3


2.物理备份

Percona XtraBackup

xtrabackup --backup --parallel 4 --compress --target-dir /var/backup/

也可以通过stream的方式,物理备份到单个archive:

xtrabackup --backup --parallel 4 --stream=xbstream > mybackup.xbstream
OR
xtrabackup --backup --stream=tar > mybackup.tar

tar归档不支持并行。

设置可以通过xbcloud备份到S3:

xtrabackup --backup --stream=xbstream | xbcloud put --storage=s3 <S3 parameters> mybackup_s3.blob


还原测试

# Prepare the backup
xtrabackup --prepare --parallel 4 --use-memory 4G --target-dir /var/backup

# Copy backup to original location (ie: /var/lib/mysql), assuming backup taken on same host
xtrabackup --copy-back --target-dir /var/backup

# Fix file permissions if necessary
chown -R mysql:mysql /var/lib/mysql

# Start MySQL
systemctl start mysql


MySQL Enterprise Backup


卷快照

LVM和ZFS都支持native快照。在做快照之前,要确保MySQL已经停住了写操作,并将内存中的数据刷新到磁盘。以下是ZFS的示例:

mysql -e 'FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; ! zfs snapshot -r mysqldata/mysql@my_first_snapshot'