代码改变世界

MySQL备份最佳实践

2022-03-05 13:35  abce  阅读(269)  评论(0编辑  收藏  举报

 

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'

 

 

https://www.percona.com/blog/2020/05/27/best-practices-for-mysql-backups/