备份分为:冷备、热备、异地灾备
1.冷备的分类:
物理备份、逻辑备份
完全备份、增量备份
在线(热)备份、温备份、离线(冷)备份
1.1 物理备份
常用工具:cp tar lvm
(1)tar备份步骤
①停止服务 systemctl stop mariadb
②备份数据 tar -cf /tmp/mysql.all.tar /var/lib/mysql
③启动服务 systemctl start mariadb
tar还原步骤
①停止服务 systemctl stop mariadb
②清环境 rm -rf/var/lib/mysql/*
③导入数据 tar -xf /tmp/mysql.all.tar -C
④启动服务 systemctl start mariadb
⑤测试
(2)lvm 快照方式
1.首先创建需要系统支持lvm方式
① 停止服务,全备份tar,挂载硬盘到数据目录下
② 导入数据,注意数据权限,启动服务。
2.备份数据
# 与数据库服务相关的操作
① 添加全局的读锁(只能读不能写‐‐‐》数据不会变)> flush tables with read lock;
② 创建快照 #lvcreate ‐s ‐L 1G ‐n snap1 /dev/vgmysql/lv1 ‐‐‐>/dev/vgmysql/snap1
③ 解锁 > unlock tables;
# 与数据库服务无关的操作
① 挂载快照 mount /dev/vgmysql/snap1 /mnt (如果是xfs,mount ‐o nouuid/dev/vgmysql/snap1 /mnt )
② tar打包 cd /mnt;tar ‐cf /tmp/mysql.2.tar ./*
③ 删除挂载 umount umount /mnt
④ 删除快照 lvremove /dev/vgmysql/snap1
3.lvm快照还原数据
① 停止服务 systemctl stop mariadb
② 清环境 rm ‐rf /var/lib/mysql/*
③ 导入数据 tar ‐xf /tmp/mysql.2.tar ‐C /var/lib/mysql
④ 启动服务 systemctl start mariadb
2.逻辑备份
常用工具 mysqldump 备份数据‐‐‐逻辑备份sql语句
存储引擎 | 数据一致 | 服务可用 | 实现方式 |
MYISAM | OK | NO | 锁表 |
INNODB | OK | YES | MVCC |
备份方法
mysqldump
-u 用户名
-p 密码
-A 所有的库
--single‐transaction INNODB存储引擎的表备份时能够做到数据一致,服务可用
‐‐lock‐all‐tables MYISAM存储引擎的表备份时能够做到数据一致,服务不可用
备份步骤
INNODB mysqldump ‐uroot ‐puplooking ‐A ‐‐single‐transaction > /tmp/mysql.201608301600.sql
MYISAM mysqldump ‐uroot ‐puplooking ‐A ‐‐lock‐all‐tables > /tmp/mysql.xxx.sql
还原步骤
停服务、清环境、启服务、
导入数据 mysql < /tmp/mysql.all.1.sql
刷新授权 flush privileges
3.Percona Xtrabackup
常用参数
-user=name 用户名
-password=name 密码
-apply-log 重演回滚
-copy-back 还原数据
-redo-only 只重演不回滚,与apply-log同时使用
(1)全备份
innobackupex user=root password=uplooking /tmp/backup
还原全备份
停服务、清环境
导数据
apply‐log innobackupex apply-log /tmp/backup/2016
copy-back innobackupex copy-back /tmp/backup/2016
改权限、启服务、测试
(2)增量备份
全备份 innobackupex ‐‐user=root ‐‐password=uplooking /tmp/backup
增量备份1 innobackupex ‐‐user=root ‐‐password=uplooking ‐‐incrementalbasedir=/tmp/backup/2016‐09‐01_11‐32‐43 ‐‐incremental /tmp/backup
增量备份2 innobackupex ‐‐user=root ‐‐password=uplooking ‐‐incremental‐basedir= ‐‐incremental
增量备份3 innobackupex ‐‐user=root ‐‐password=uplooking ‐‐incremental‐basedir= ‐‐incremental
全备份还原 innobackupex ‐‐apply‐log ‐‐redo‐only /tmp/backup/全备份innobackupex ‐‐apply‐log ‐‐redo‐only /tmp/backup/全备份 ‐‐incrementaldir=
增量1 innobackupex ‐‐apply‐log ‐‐redo‐only /tmp/backup/全备份 ‐‐incrementaldir=
增量2 innobackupex ‐‐apply‐log ‐‐redo‐only /tmp/backup/全备份 ‐‐incrementaldir=
增量3 innobackupex ‐‐apply‐log /tmp/backup/全备份
innobackupex ‐‐copy‐back /tmp/backup/全备份
4.二进制日志
(1)打开二进制日志。
①configure 修改配置文件 vi /etc/my.cnf
②log-bin=/bar/lib/mysql-log/master1
③mkdir 创建目录 并且修改GUO
④重启服务
注:在mysql5.7以及更高版本中,必须同时加上server-id=1 这个配置
(2)二进制日志的备份恢复使用
①二进制日志的备份
mysqldump -uroot -puplooking -A --single-transaction --master-data=2 --flush-logs > /tmp/mysqlbak.1
-A 备份所有的库,有其它选项备份,可以备份单独的库
--master-data 将当前本备份时二进制文件名和pos位置记录到备份文件中去
--flush-logs 备份完,启用一份新的二进制日志文件
②查看二进制文件
mysqlbinlog 二进制文件名
-start-datetime=name 起始时间点
-stop-datetime=name 结束时间点
-start-position=pos 位置编号,唯一,增大 at
-stop-position=pos
过滤出有用的信息:mysqlbinlog mastera.000001 | sed -n '/^create/p;/^drop/p;/^alter/p;/^grant/p;
/^revoke/p;/^insert/p;/^delete/p;/^update/p;/^COMMIT/p;/^BEGIN/p;'
③二进制日志的还原方法
1)停服务 清环境 启服务 导入全备份 刷新授权
2)查看分析二进制日志,查看错误操作时间位置,还原正确操作
mysqlbinlog ‐‐start‐datetime='2016‐08‐31 13:45:10' ‐‐stopdatetime='2016‐08‐31 13:45:42' /va
r/lib/mysql‐log/mastera.000006|mysql ‐uroot ‐puplooking
注:这里如果只进行stop,则一直从该日志开始位置,重演到stop位置,所以要有start 有stop进行还原
1)configure 修改配置文件/etc/my.cnf
2)log‐bin= 添加二进制日志存放的路径,以及二进制日志的名字log‐bin=/var/lib/mysqllog/
mastera
3)mkdir 创建目录
4)UGO,selinux 修改权限mysql:mysql;selinux 允许
5)restart mariadb 重启服务
离线(冷)备份:备份过程中,服务中断
温备份:备份过程中,只能读不能写
在线(热)备份:备份过程中,服务正常使用