MariaDB用法——备份
备份
完全备份、增量备份、差异备份
热备、温备、冷备
冷备
过程中需要停止服务
cp、tar等复制归档工具:物理备份工具:大数据备份工具
温备
过程中只能读
mysqldump:逻辑备份工具;小数据备份工具
热备
过程中能读能写
xtrabackup 完全备份及还原
逻辑卷快照备份
同步分区:partprobe(centos7)
改配置文件
导入数据
mysql <mysql脚本
flush tables with read lock 添加读锁
flush logs
show master logs;
lvcreate -n lv_mysql_snap -L 2G -s -p r /dev/vg-mysql/lv-mysql
unlock tables;解锁
mount -o nouuid, norecovery /dev/vg-mysql/lv-mysql_snap /mnt
cp -a /mnt/* /backup/
umount /mnt
lvremove /dev/vg-mysql/lv-mysql-snap
还原数据
systemctl stop mariadb
cp -av /backup/* /data/mysql/
禁止用户连接
vim /etc/my.cnf
skip_networking
systemctl restart mariadb
导出binlog最新日志
mysqlbinlog --start-position=385 mysql-bin.xxxxxx >/backup/bin.spl
mysqlbinlog mysql-bin.xxxxxx >>/backup/bin.spl
mysql < /backup/bin.spl
恢复用户访问
vim /etc/my.cnf
skip_networking注释掉
重启服务
实验:数据库数据文件损坏,如何还原最新状态?
前提:log_bin=ON
1 全备份
mysqldump -A -F --single-transaction --master-data=2 > /backup/full.sql
修改数据
防止损失扩大化,先锁表
flush tables with read lock;
查看下之前备份的最后一个位置
less /backup/all_2018-06-14.sql
切换一个二进制日志
导出相应的二进制日志
mysqlbinlog --start-position=245 /data/binlog/log-bin.000005 > /backup/bin.sql
在bin.sql中找到有问题的记录并删除
vim /backup/bin.sql
恢复
删除全部数据库
rm -rf /data/mysql/*
重启服务
systemctl stop mariadb.service
还原
验证
实验:误删除表,如何还原最新状态?
下载xtrabackup
wget https://www.percona.com/downloads/XtraBackup/LATEST/percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
配置网络yum源并安装
yum -y install percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
innobackupex --user=用户名 --password=密码/backups/
备份好的文件
备份时用到的参数,大多数是默认参数
bin_log的位置
备份的相关参数
备份过程中产生的二进制日志文件
把备份文件保存到其他主机上
scp -r /backup/ 192.168.30.111:/
完整数据还原
关闭服务
systemctl stop mariadb.service
清除数据库
1、整理数据
innobackupex --apply-log /backups/2018-06-13_02-38-10/
把整理过的文件复制到数据库路径下
innobackupex --copy-back /backups/2018-06-13_02-38-10/
恢复所属主和属组重启服务
验证
增量数据还原
1 在原主机
先做完全备份过程如上
innobackupex /backups
数据库写入数据
开始第一次增量备份
创建文件夹区别完全备份和增量备份
mkdir /backups/inc{1,2}
备份
innobackupex --incremental 备份到的路径 --incrementalbasedir=基于谁做增量备份(路径)
再次修改数据库
再次备份(基于第一次增量备份所做的增量备份)
innobackupex --incremental 备份到的路径 --incrementalbasedir=增量备份的上一次备份路径
scp -r /backups/* 192.168.27.17:/data/
2 在目标主机
不启动mariadb
rm -rf /var/lib/mysql/*
第一次数据整合(--redo-only:提交已完成的事务,保留未完成的事务)
innobackupex --apply-log --redo-only 完全备份路径
第二次数据整合
innobackupex --apply-log --redo-only 完全备份路径 --incremental-dir=第一次增量备份路径
innobackupex --apply-log --redo-only 完全备份路径 --incremental-dir=第二次备份路径
ls /var/lib/mysql/
innobackupex --copy-back 整合后的完全备份
chown -R mysql.mysql /var/lib/mysql/
systemctl start mariadb
验证
单表导出导入
安装xtrabackup步骤同上
配置文件添加innodb_file_per_table表数据单独存放
生成数据库和表
备份
innobackupex --includb="(要备份的)数据库名.表面" 备份到路径
备份表结构(最后把备份数据备份到其他主机)
mysql -e 'show create table hellodb.students' >students.sql
模拟误删表
还原
导出数据
innobackupex --apply-log --export /backup/2018-06-16_06-04-03/
导出后生成两个文件
创建丢失表的表结构
之前备份出来的表结构
更改一下
导入表结构
删除原有表数据
把备份表复制到数据库中
更改权限
把表数据导入到表空间中并验证