物理备份-XBK
主机 RAID卡的BBU关闭,根据存储数据种类而选择储存设备,配置合理的RAID级别:
-
RAID0:条带化,性能高,最少1块盘
-
RAID1:镜像+安全,(适合系统盘)最少2块盘,最多能坏1块
-
RAID5:条带化+写校验,读性能高(安全较高),最少3块盘,最多能坏1块
-
RAID10:安全+性能都很高,最少4块盘,最多能坏2块(前提是这两块不在同一个RAID1 里)
服务器(Linux)启动的4个阶段:
(1)BIOS(power on self test)自检——发现致命错误,BIOS会直接控制喇叭发出警报。
- 内存:ECC纠错内存(建议2-3倍cpu核心数量)
- 硬盘:SATA-III、SATA 、SAS、GT-BT 、Fc、SSD(sata)、pci-e ssd(第二好)、Flash(性能最好,但是寿命短)
- IP-SAN iSCSI IP存储,用于网线传输数据
- PC-SAN 光纤存储,用光纤口
- NAS 网络存储
(2)找到mbr(master bootloader record,它是属于硬盘的0磁盘0扇区,硬盘最前的512个节点,前446个字节存放的是系统引导程序grub,中间64字节是分区表,最后2个字节表示结束)
(3)bootstrap loader的引导程序grub(或 lilo)运行:
- 用户可选择不同的开机项目,指向可开机的的程序区段来开始运行操作系统。
- 转交其他loader:将开机管理功能转交给其他loader负责。
grub程序一般位于/boot/grub目录中.
例3.对grub加密
系统默认情况下,grub是不需要任何验证就可以进入的!
进入grub的方法:
开机,进入第一个画面后,按“e”键进入编辑页面,根据选择相应的模式!
1. 修改grub配置文件
# vim /etc/grub.d/00_header --在文件最后方加入以下内容
cat << EOF
set superusers="admin"
password admin 123
EOF
2.重新编译生成新的grub文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
3.配置完成,重启系统进入grub测试
# reboot
开机进入画面后,按“e”键进入,此时就需要输入用户名和密码了
-------------------------------------------
例4.找回root密码
如果root密码忘记或被恶意修改,需要进入grub才能重新设置新密码
1.重启系统,按“e”键进入编辑页面,在linux16那一行尾部加入rd.break console=tty0 保存后,按快捷键"ctrl+x"重启系统。
2.进入救援模式后,重新挂载文件系统
# mount -o remount,rw /sysroot
3.进入系统根目录
# chroot /sysroot
sh-4.2# --看到这个就表示成功了
4.开始修改密码,修改密码过程和正常情况下修改root密码一致,输入两次密码即可
# passwd
5.在根目录创建一个空文件,用于重新标记selinux环境
# touch /.autorelabel
6.退出救援模式
# exit
# exit --一定是两次exit才行
7.重新登陆系统后,使用新密码测试即可
-------------------------------------------
例5.MBR丢失修复,MBR -- 用于存放系统引导信息的一块专用区域,保存在系统第一个分区的前446字节
模拟故障,使用命令将MBR的前446字节覆盖
# dd if=/dev/zero of=/dev/sda bs=1 count=446 --后面的446千万别写错,否则将无法修复
# reboot --此时重启系统就会发现已经无法进入系统了
开始修复
1.进入主板BIOS,将系统第一启动项调整为光驱启动,然后按F10保存后重启系统即可
方法:进入系统时,狂按F2即可(不同型号主板,按键不一样)
保存并重启后,进入系统安装的第一个画面:
选择 troubleshooting (排错)
选择 resure a red hat enterprise linux system
按数字“1” 回车
按数字“2” 回车
sh-4.2# -----救援模式更新
2.确定boot分区的设备编号
# fdisk -l --找到带“*”的那一行,并记录下设备编号(一般都是/dev/sda1)
3.重新安装grub
# grub2-install --root-directory=/mnt/sysimage /dev/sda
4.重新编译grub,修复损坏的MBR
# grub2-mkconfig -o /mnt/sysimage/boot/grub2/grub.cfg
4.重装完成,重启系统,并将第一启动项调整回本地硬盘启动,看是否能进入系统即可
# exit
或者用快捷键 ctrl + alt + insert
-------------------------------------------
例6.boot分区损坏或误删除修复
boot分区存放着整个系统所有的引导文件,如果该分区出现损坏或误删除,将直接导致系统无法启动
模拟误删除boot分区,并重启系统查看效果
# rm -rf /boot/*
# reboot
开始修复
1.按上面例5的步骤,进入救援模式
2.进入救援模式后,切换进根目录,并将光驱挂载到/mnt目录
# chroot /mnt/sysimage/
# mount /dev/cdrom /mnt
3.“强制”重新安装内核软件包,安装过程比较慢
# rpm -ivh /mnt/Packages/kernel-3.10.0-514.e17.x86_64.rpm --force
安装完成后,查看/boot分区,此时发现,boot分区内的文件已经恢复了,不过grub文件还未恢复
# ls /boot
4.修复grub
# grub2-install /dev/sda
# grub2-mkconfig -o /boot/grub2/grub.cfg
# ls /boot/grub2/grub.cfg --能够看到此文件则表示已经搞定
5.重启系统,检查修复是否成功
# exit
# exit
(4)Linux初始化进程init运行,进程号(PID)为1。系统初始化配置文件/etc/inittab。其中id:5:initdefault语句指示了系统默认启动的运行级别。
运行级别 | 功能说明 |
0 | 系统停机状态(关机) |
1 | 单用户工作 |
2 | 多用户状态(没有NFS) |
3 | 多用户状态(具有NFS) |
4 | 系统未用,保留给用户 |
5 | XLL控制台(Xdm,Gdm,Kdm) |
6 | 重启 |
# runlevel 查看当前的系统启动级别
N 5 表示第一次启动的级别为5
临时切换:
# init [ 0 - 6 ] 在7个不同的启动级别中互相切换(临时有效)
# runlevel
5 3 表示由5级别切成3级别
或者:
# systemctl isolate multi-user.target --临时切换至3级别,仅本次有效,重启后失效
# systemctl isolate graphical.target --临时切换至5级别,仅本次有效,重启后失效
永久有效:
# systemctl set-default graphical.target --将系统启动级别切换至5级别,重启后仍然有效
# systemctl set-default multi-user.target --将系统启动级别切换至3级别,重启后仍然有效
查询当前启动级别:
# systemctl get-default
如需要系统启动默认进入字符界面,可以修改id后面的运行级别为3,即id:3:initdefault,重启Linux系统后生效。
在Linux中,每个服务都会有相应的服务启动脚本,全部位于/etc/rc.d/init.d 目录下。
系统中的各个运行级别有独立的脚本目录,其目录名分别为 rc0.d~rc6.d,各个运行级别脚本目录下的脚本,都指向服务脚本目录(/etc/rc.d/init.d)。
/etc/rc.d/rc.local 文件中可以存放初始化脚本,其内容是被系统自动执行的。
XBK备份原理:直接拷贝文件
innobackupex --version #查看当前XBK的版本号
into outfile '路径/指定的文件' #将sql语句执行的结果导出到指定的文件中
XBK备份核心理念
1、针对非InnoDB,进行锁表备份,copy所有的非innodb表文件。
2、针对InnoDB表,立即触发CKPT,copy所有InnoDB表相关的文件(ibdatal,ibd,frm),并且将备份过程中产生的新的数据变化的部分redo一起备份走
3、在恢复时,xbk会调用Innodb引擎的CSR过程,将数据和redo的LSN最平,然后进行一致性恢复。
备份产生的文件介绍
(1)xtrabackup_binlog_info #记录备份时刻的二进制日志信息,可以作为binlog截取的起点
(2)xtrabackup_checkpoints
备份过程
1、定期全备
innobackupex --user=root --password=123 --no-timestamp /backup/full
2、增量备份(基于全备)
innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/incl
说明:
--no-timestamp
--incremental #开关
--incremental-basedir=/backup/full #基于哪个备份进行增量
/backup/incl #增量备份的位置
恢复思路?
1、停业务,挂维护页,避免数据的二次伤害。
2、查找可用备份:full+inc1+inc2
3、inc2 到 故障时间点的binlog
4、恢复全备+增量+binlog
5、验证数据,开启业务
恢复前的准备
(1)整理full
innobackupex --apply-log --redo-only /backup/full
--redo-only #这个选项 在 整理全备和所有增量合并时 除了 最后一次增量 用
(2)合并 inc1 到 full ,并且整理
innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full
cat /backup/full/xtrabackup_checkpoints
cat /backup/inc1/xtrabackup_checkpoints #XBK备份的信息文件,可用对比
(3)合并 inc2 到 full ,并且整理
innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full
(4)最后一次整理full
innobackupex --apply-log /backup/full
截取二进制日志
cat /backup/inc2/xtrabackup_binlog_info #找到文件里的起点信息
起点:mysql-bin.000031 1997 aa648280-a6a6-11e9-949f-000c294a1b3b:1-17,
e16db3fd-a6e8-11e9-aee9-000c294a1b3b:1-9;
mysqlbinlog /data/binlog/mysql-bin.000031 | grep 'SET'
终点:SET @@SESSION.GTID_NEXT='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:12'/*!*/;
截取
mysqlbinlog --skip-gtids --include-gtid='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:10-12' /data/binlog/mysql-bin.000031 >/backup/binlog.sql
恢复备份数据
cp -a /backup/full/* /data/mysql/data
chown -R mysql. /data/
/etc/init.d/mysqld start
mysql>set sql_log_bin=0
mysql>source /backup/binlog.sql
验证数据
mysql>select * from full.t1;
mysql>select * from inc1.t1;
mysql>select * from inc2.t1;
单表恢复案例
误删了一张10M的表。而备份有500G。如何快速恢复误删除表?
提示:
drop table city;
create table city like city_bck;
alter table city discard tablespace;
cp /backup/full/world/city.ibd /application/mysqldata/world/
chown -R mysql.mysql /application/mysql/data/world/city.ibd
alter table city import tablespace