一、数据备份
  • 备份的类型
  1. 完全备份
  2. 增量备份
  3. 差异备份
  4. 冷、温、热备份
  5. 物理和逻辑备份
  • 备份工具
  • cp、tar等复制归档工具,只支持冷备份,即是要将数据库服务停用
  • lvm快照,几乎热备份
  • mysqldump 逻辑备份工具,温备份,即是数据库再备份期间只能读
  • xtrabackup (官方下载仓库):由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份。而且还是开源免费的。
  • 以mysqldump为例备份的步骤(它的缺点:不能备份那些没有提交的事务和已经提交的事务但是没有写到磁盘上的数据)
    备份数据库所有文件
# 给数据库所有表加读锁,记录备份起点
mysql> flush tables with read lock 读锁
mysql>flush logs;
mysql>show master logs;  # 记录文件名和position。如mysql-bin.000004,245

# 建立快照
lvcreate -n lv_mysql_snap -L 1G  -s -p r /dev/vg0/lv_mysql 

# 解锁数据库
 mysql>unlock tables;  

# 备份快照里的内容
mount -o nouuid,norecovery /dev/vg0/lv_mysql_snap   /mnt
cp -a /mnt/ /backup/

# 删除快照,因为快照会影响数据库的性能
umount /mnt
lvremove /dev/vg0/lv_mysql_snap

备份到sql脚本中

# innodb数据库备份:
mysqldump -uroot -pxxx -A -F --single-transaction --master-data=2 >/backups/full_backup_$backup_time.sql
# myisam 数据库备份:
mysqldump -uroot -pxxx -A -F -x --master-data=1 > /backups/full_backup_$backup_time.sql
  • xtrabackup 工具备份
# 完全备份
innobackupex --user=root --password=xxx /backups

# 增量备份,单独新建一个目录便于区分增量备份和完全备份
innobackupex --user=root --password=xxx --incremental /backups/inc1  --incremental-basedir=/backups/2019-05-01_10-09-26
二、数据还原
  • mysqldump 工具还原
# 禁止用户访问,确保数据库目录为空,启动服务
vim /etc/my.cnf
skip_networking

rm -rf /var/li/mysql*
systemctl start mariadb

# 使用备份sql恢复数据库
mysql < /backups/full_backup_$backup_time.sql

# 没有备份的数据通过二进制日志恢复
mysqlbinlog --start-position=245 mysql-bin.000004 > /backup/bin.sql
mysqlbinlog  mysql-bin.000005 >> /backup/bin.sql
mysql < /backup/bin.sql

# 恢复数据库访问
vim /etc/my.cnf、
skip_networking  #删除此行
systemctl start mariadb
或iptables 清除
  • xtrabackup 工具还原
# 整理事务日志,准备可以用于恢复的数据库数据,因为将事务日志也备份下来的,为了数据完整
innobackupex --apply-log --redo-only /backups/2019-05-01_10-09-26
# 同样处理增量备份
innobackupex --apply-log --redo-only /backups/2019-05-01_10-09-26/ --incremental-dir=/backups/inc1/2019-05-01_10-12-26
innobackupex --apply-log --redo-only /backups/2019-05-01_10-09-26/ --incremental-dir=/backups/inc2/2019-05-01_10-16-26

# 确保还原的数据库数据目录为空,然后还原数据库
innobackupex --copy-back /backups/2019-05-01_10-09-26 

# 修改目录的权限
chown -R mysql.mysql /var/lib/mysql/

#启动数据库服务
systemctl start mariadb
三、使用新版本的xtrabackup
  • 安装工具
    This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0
yum install ./percona-xtrabackup-80-8.0.6-1.el7.x86_64.rpm
  • 查看软件包构成
    新版本没有 innobackupex 这个perl脚本,所以直接使用 xtrabackup 。
~]# rpm -ql percona-xtrabackup-80 
-------------------------------------------------------------
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-80-8.0.6
/usr/share/doc/percona-xtrabackup-80-8.0.6/LICENSE
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
-------------------------------------------------------------
  • 完全备份
xtrabackup --backup --target-dir=/data/backups/base --datadir=/var/lib/mysql/
  • 准备还原数据
    如果还有增量备份,那这一阶段。需要加上 –apply-log-only 选项。但是最后一个增量备份不许要加这个选项,都完成后在应用了所有增量数据的完全备份目录,在运行下面的命令。
xtrabackup --prepare  --target-dir=/data/backups/base

注意:
–apply-log-only should be used when merging all incrementals except the last one. That’s why the previous line doesn’t contain the --apply-log-only option. Even if the
–apply-log-only was used on the last step, backup would still be consistent but in that case server would perform the rollback phase.

  • 还原
xtrabackup --copy-back --target-dir=BASE-DIR
  • 修改所有者和所数组