备份过程
1.实现LVM
fdisk /dev/sdb #给硬盘分区
pvcreate /dev/sdb1 #创建物理卷
vgcreate vg0 /dev/sda1 #创建卷组
lvcreate -L 5G -n lv_mysql vg0 #创建逻辑卷
lvcreate -L 5G -n lv_binlog vg0
mkfs.xfs /dev/vg0/lv_mysql #格式化
mkfs.xfs /dev/vg0/lv_binlog
mkdir -pv /data/{mysql,binlog} #创建两个文件存放数据库和 二进制
vim /etc/fstab #永久挂载
mount -a #使挂载生效
chown -R mysql.mysql /data/ #修改文件权限
vim /etc/my.cnf #修改数据库配置文件 迁移数据库
datadir=/data/mysql
log_bin=/data/binlog/mysql-bin
systemctl restart mariadb #重启服务使配置文件生效
2.
mysql>flush tables with read lock; 加读锁 暂时锁定数据库 不允许数据库进行写操作
mysql>flush logs 生成新的切换日志
mysql>show master logs 记录日志文件名和position.如mysql-bin.000004,245 做完快照时当前的状态mysql-bin.000004-245
mysql>flush logs 记录二进制日志 生成新的日志
3.对数据库数据做快照
lvcreate -L 1G -n lv_mysql_snap -s -p r /dev/vg0/lv_mysql
4. 解锁 用户在访问,又生成新的日志文件
mysql>unlock tables;
5.备份快照的内容,挂载快照 备份结束用户可正常访问了
mount -o nouuid,norecovery /dev/vg0/lv_mysql_snap /mnt
df #查看挂载
ls /mnt/ #查看数据库文件
cp -a /mnt/* /backup/ #用cp备份文件
umount /mnt #取消挂载
lvremove /dev/vg0/lv_mysql_snap #删除快照
---------------------------------------------------------------------------------------------------------
还原过程
1.还原备份的数据文件
cp -av /backup/* /data/mysql/
systemctl start maraidb
2.利用二进制还原到数据库最新状态
flush table with read lock;数据库暂时不能修改
mysqlbinlog --start-position=245 mysql-bin.00004 >/backup/bin.sql
mysqlbinlog mysql-bin.00005 >> /backup/bin.sql
3.
.vim /etc/my.cnf 临时暂时禁止用户连接
skip_networking #加入此行
systemctl restart maraidb #重启服务
mysql </backup/binlog #恢复binlog中最新日志到数据库中
4.恢复用户访问
vim /etc/my.cnf
skip_networking #删除此行
systemctl restart mariadb #重启服务 还原数据库就要重启服务