Mysql/MariaDB数据库备份与恢复

2017-06-14  本文已影响0人  油菜花的ID

文章来源:https://blog.movekj.com/?p=1049

数据库备份

数据库备份的目的是为了防止由于某些意外情况导致数据丢失而造成无法挽救的局面出现。因此,数据备份是运维工作者日常的重要工作之一

可能出现数据丢失的场景

数据备份类型

数据库备份工具

使用mysqldump进行备份

mysqldump [选项] db_name [ta_name ...] > /path/to/file
mysqldump [选项] --db_name ... > /path/to/file
mysqldump [选项] --all-databases > /path/to/file
备份mysql数据库的所有库中的所有表
[root@movekj ~]$ mysqldump -x --master-data=2 --flush-logs --all-databases  > ~/my_backup$(date +%F).sql
恢复数据库
[root@movekj ~]$ mysql -e 'source /root/my_backup.sql'

基于LVM2进行备份

前提: 要求数据文件和事务日志位于同一个逻辑卷

获取全局读锁,此步骤可能需要花费很长时间等待其他链接释放正则使用的锁
[root@movekj ~]$ mysql -e "FLUSH TABLES WITH READ LOCK"
 滚动二进制日志文件,并记录二进制文件事件位置
[root@movekj ~]$ mysql -e "FLUSH LOGS"
[root@movekj ~]$ mysql -e "SHOW MASTER STATUS" > /PATH/TO/FILE
 创建快照卷
[root@movekj ~]$ lvcreate  -L SIZE -s -p r -n SNAM-NAME /dev/VG-NAME/LV-NAME 
 释放全局读锁
[root@movekj ~]$ mysql -e "UNLOCK TABLES"
 挂载快照卷,并执行备份,备份完成后删除快照卷
[root@movekj ~]$ mkdir /snap /mybackup
[root@movekj ~]$ mount /dev/VG-NAME/LV-NAME  /snap
[root@movekj ~]$ cd /snap; tar Jxf /mybackup/mybackup-$(date +%F).tar.xz ./* 
[root@movekj ~]$ umount /snap
[root@movekj ~]$ lvremove  /dev/VG-NAME/LV-NAME 

使用Xtrabackup备份Mysql

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。下载地址: https://www.percona.com/software/mysql-database/percona-xtrabackup

# 创建一个备份账号
mysql> CREATE USER 'User'@'Host' IDENTIFIED BY 'Passwd';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'User';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS ON *.* TO 'User'@'Host';
mysql> FLUSH PRIVILEGES;
 # 执行一次完全备份
[root@movekj ~]$ innobackupex   /PATH/TO/BACKUP-DIR/
 # 执行一次增量备份
# BASEDIR可以指向完全备份路径或者上一次增量备份路径
[root@movekj ~]$ innobackupex --incremental  /PATH/TO/BACKUP-DIR/ --incremental-basedir=BASEDIR 
 # 压缩并归档备份出来的数据
[root@movekj ~]$ innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
 # 将备份出来的数据复制到远程主机
[root@movekj ~]$ innobackupex --stream=tar  /PATH/TO/BACKUP-DIR/ | \ 
ssh user@www.magedu.com  "cat -  > /PATH/TO/BACKUP-DIR/`date +%F_%H-%M-%S`.tar" 
# BASE-DIR为完全备份数据所在的路径
# INCREMENTAL-DIR-#为增量备份数据所在的路径
# 只有一个完全备份且无其他增量备份时,--apply-log这一步也需要做
# 准备完全备份数据
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR
 # 准备第一个增量备份数据
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
 # 准备第二个增量备份数据
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
 # 停止mysql服务并清空mysql数据目录
[root@movekj ~]$ systemctl stop mariadb
[root@movekj ~]$ tar Jcvf /tmp/mybackup-$(date +%F) /mydata/data 
[root@movekj ~]$ rm -rf  /mydata/data/*
 # 将备份数据恢复至mysql服务器的数据目录
[root@movekj ~]$ innobackupex --copy-back  BASE-DIR
 # 改变mysql数据文件的属主和属组
[root@movekj ~]$ chown -R  mysql:mysql  /mydata/data/
 # 启动mysql服务
[root@movekj ~]$ systemctl start mariadb
上一篇 下一篇

猜你喜欢

热点阅读