一般使用完全物理备份(数据完全)和逻辑备份,很少使用快照备份。
目录
一、逻辑备份
逻辑备份:也叫“导出”,将数据包含再一种Mysql能够解析的格式中,要么是SQL,要么是以某个符号分隔的文本。
优点:逻辑备份是可以用编辑器或像grep何sed之类的命令查看何操作的普通文件。当需要回复数据或只想查看数据但不恢复时,这都非常有帮助。
恢复很简单。可以通过管道把它们输入到mysql,或者使用mysqlimport.
可以通过网络来备份何恢复——就是说,可以在与Mysql主机不同的另外一台机器上操作。
可以在类似 RDS 这样不能访问底层文件系统的系统中使用。
非常灵活,因为mysqldump——大部分人喜欢的工具——可以接受许多选项,例如可以用where子句来限制需要备份哪些行。
与存储引擎无关。因为是从Mysql服务器中提取数据而生成。所有消除了底层数据存储和不同。
因此,可以从InnoDB表中备份,然后只需要极小的工作量就可以还原到MyISAM表中。而对于原始数据却不能这么做。
有助于避免数据损坏。如果磁盘驱动器有故障而需要复制原始数据文件时,你将会得到一份错误并且/或生成一个部分或损坏的备份。
如果Mysql在内存中的数据还没哟损坏,当不能得到一个正常的原始文件复制时,有时可以得到一个可以信赖的逻辑备份。
缺点:
必须由数据库服务器完成生成逻辑备份工作,因此要使用更多的CPU周期。
逻辑备份在某些场景下比数据库文件本身更大。ASCII形式的数据不总是和存储引擎存储数据一样高效。例如,一个整形需要4个字节来存储,但是用ASCII写入时,可能需要12个字符。当然也可以压缩文件以得到一个更小的备份文件,但这样会使用更多的CPU资源。(如果索引比较多,逻辑备份一般比物理备份小)
无法保证导出后再还原出来的一定是同样的数据。浮点表示的问题,软件BUG等都会导致问题,尽管很少见。(因此需要定时检查备份数据的完整性)
从逻辑备份中还原需要Mysql加载和解释语句,转化为存储格式,并重建索引,所以这一切会很慢
创建和恢复mariadb备份:
# mkdir /backup
# mysqldump –u root -p inventory > /backup/rhce.dump //执行逻辑备份 (inventory为数据库名)
# mysqldump -u root -p –all-databases > /backup/mariadb.dump //备份所有数据库
恢复备份
# mysql –u root -p inventory < /backup/rhce.dump //逻辑备份恢复
备份恢复所有数据库:
(1)登录mysql远程控制台:mysql -u root -p
(2)source /backup/mariadb.dump;
二、物理备份
物理备份:直接copy存在于硬盘上的文件。
优点:基于文件的物理备份,只需要将需要的文件复制到其他地方即可完成备份。不需要其他额外的工作来生成原始文件。
物理备份的恢复可能就更简单了,这取决于存储引擎。对于MyISAM,只需要简单地复制文件到目的地即可。
对于InnoDB则需要停止数据库服务,可能还要采取其他一些步骤。
InnoDB和MyISAM的物理备份非常容易跨平台,操作系统和MySQL版本。(逻辑导出也如此)
从物理备份中恢复会更快,因为Mysql服务器不需要执行任何SQL 或构建索引。
如果由很大的InnoDB表,无法完全缓存到内存中,则物理备份的恢复要快非常多——至少要快一个数量级。事实上,逻辑备份最可怕的地方就是不确定的还原时间。
缺点:InnoDB的原始文件通常比相应的逻辑备份要大得多。InnoDB得表空间往往包含很多未使用得空间。
还有很多空间被用来做存储数据以外得用途(插入缓冲,回滚段等)。
物理备份不总是可以跨平台,操作系统及Mysql版本。文件名大小写敏感和浮点格式时可能会遇到麻烦。很可能因为浮点格式不同而不能移动文件到另一个系统
物理备份通常更加简单有效。尽管如此,对于需要长期保留备份,或者是满足法律合规要求得备份,尽量不要完全依赖物理备份。
至少每隔一段时间还是需要做一次逻辑备份。
1、完全物理备份
mysqladmin -u root -p variables | grep datadir //确定mariadb数据的存储位置(这里查到是/data/mysql)
mkdir /backup
cd /data/mysql
tar -cf /backup/`date +%F`.gz *
#开始还原
systemctl stop mysql
rm -rf /data/mysql/*
tar -xf /backup/2022-07-18.gz -C /data/mysql
systemctl start mysql
#登录测试数据库是否还在
mysql -u root -p
show databases;
2、使用LVM快照执行物理备份
(1)准备LVM及文件系统,我是虚拟机直接添加硬盘
lsblk #查看硬盘信息
vgcreate datavg /dev/sdb
vgs #查看lvm容量
lvcreate -L 2G -n mysql datavg #创建容量2G名为mysql的lvm
mkfs.xfs /dev/datavg/mysql #格式化
(2)数据迁移到lvm
systemctl stop mysql
mount /dev/datavg/mysql /mnt/ #临时挂载点,注意mnt下不要有其他东西
mysqladmin -u root -p variables | grep datadir //确定mariadb数据的存储位置(这里查到是/data/mysql)
cp /data/mysql/* /mnt/ -a #将mysql数据拷到这里
umount /mnt/
vi /etc/fstab #编辑这个文件添加如下一行内容
/dev/datavg/mysql /data/mysql xfs defaults 0 0
systemctl start mysql
#3、下面开始创建快照备份
echo ‘flush tables with read lock;system lvcreate -L 500M -s -n lv-mysql-snap /dev/datavg/mysql;’ |mysql -u root -p
#加全局锁、创建快照和释放锁要在同一会话中完成,所以这边释放锁就不需要了,自动释放了
#4、从快照中备份
mount -o ro,nouuid /dev/datavg/lv-mysql-snap /mnt/ #因为是xfs,要加上nouuid,只读是为了防止快照被破坏
cd /mnt/
ll
tar -cf /backup/`date +%F`-mysql-snap1.tar ./*
#5、移除快照
cd; umount /mnt/
ll /backup/
lvremove -f /dev/datavg/lv-mysql-snap
vgscan
#6、下面利用快照恢复mysql
systemctl stop mysqld
rm -rf /data/mysql/*
tar -xf /backup/2022-07-18-mysql-snap1.tar -C /data/mysql/
systemctl start mysql
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106869.html