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'