物理备份-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(性能最好,但是寿命短)
  • PDU:服务器机柜专用排插;双电源(断掉一路电源,服务器不会重启或关机)。
  • 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 文件中可以存放初始化脚本,其内容是被系统自动执行的。

数据库是多用户共享资源——当多个事务同时对同一数据操作前,先向系统发出请求,对其加锁,在该事务释放锁前,其他的事务不能对此数据操作。

Mysql中有哪几种锁?
  1. 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
  2. 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  3. 页面锁:开销和加锁时间界于表锁与行锁之间,会出现死锁;锁定粒度界于表锁与行锁之间。
锁的优化策略
  1. 读写分离,减少锁持有的时间。
  2. 多个线程尽量以相同的顺序去获取资源。
  3. 分段加锁——不能将锁的粒度过于细化,效率而不如一次加一把大锁。

mysql排错

方法一:
查看mysql的报错日志文件:vim /data/mysql/data/(默认)主机名.err
找到包含[ERROR]字段的行
可能情况:
            /etc/my.cnf 路径不对等
            /tmp/mysql.sock 文件修改过 或 被删除
            数据库目录权限不是mysql
            参数改错了
 
方法二:
pskill mysqld
使用命令行启动,会将启动日志信息打印在屏幕上。
命令:/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
==============================================================
 
管理员用户密码忘了,其它用户可以正常使用。
--skip-grant-tables      #跳过授权表
--skip-networking        #跳过运程登录
 
步骤:
1、关闭数据库
/etc/init.d/mysqld stop  或 systemctl stop mysqld
2、启动数据库到维护模式
mysqld_safe --skip-grant-tables --skip-networking &
3、登录并修改密码
mysql          #直接跳过验证进入数据库,只能在本地操作,不能远程连接
mysql >alter user roo@'localhost' identified by '1';
mysql >flush privileges;            #启用授权表
mysql >alter user roo@'localhost' identified by '1';
4、关闭数据库,正常启动
mysqladmin -uroot -p password '123456'    #为root用户设置一个新密码

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
posted @ 2023-10-23 14:28  兰昌  阅读(21)  评论(0编辑  收藏  举报