不用我多说都知道在数据库备份操作有多重要,数据是任何一家互联网企业的命脉,为了防止数据库服务器异常宕机,停电,非人为关机等造成数据库数据丢失的情况,我们必须要为数据库做备份操作,这样我们就能及时的恢复数据.数据备份还用于做数据迁移,例如公司新增数据库服务器,想要将旧服务器上的数据迁移到新服务器并且不关闭旧服务器,就必须用到比较高级的数据备份迁移技术.
数据备份方式:物理备份和逻辑备份
实验环境:Linux,mysql5.7
物理备份就是单纯的拷贝与覆盖,只需要拷贝mysql下的文件即可,操作如下
备份操作:
cp /usr/local/mysql /备份目录/mysql.bak
tar -zcvf 备份目录/mysql.bak.tar.gz 备份目录/mysql.bak
将mysql.bak.tar.gz拷贝到需要做数据迁移的机器,或者是作为一定时间的备份文件存在本机
恢复操作:
tar -xf 备份目录/mysql.bak.tar.gz
cp 备份目录/mysql.bak /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql //记住一定要赋权
补充:
你也可以手写一个脚本为你定时的做数据备份
]#crontab -e //每天的凌晨4点30备份
30 4 * * * /root/dumpdata.sh
]#vim /root/dumpdata.sh
#/bin/bash
filename=mysql.bak-`date +%Y-%m-%d-%H-%M-%S` //为了防止重名.利用时间区分
cp /usr/local/mysql /root/$filename
tar -zcvf /root/$filename.tar.gz /root/$filename
用物理备份的公司属实没有多少,想想看几个G还可以忍受,大到上千G,上万G,鬼都不知道要备份多久,还非常浪费内存空间
所以我们一般会使用逻辑备份.逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,只是原数据库中数据内容的一个映像。因此,逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入,而不能按数据库原来的存储特征进行物理恢复。
逻辑备份策略:
1)完全备份
2)增量备份
3)差异备份
1.完全备份与完全恢复
使用mysqldump命令,root权限,安装了mysql服务都会有mysqldump命令
完全备份: mysqldump -uroot -p密码 库名 > 目录/xxx.sql
完全恢复: mysql -uroot -p密码 库名 < 目录/xxx.sql
备份时库名表示方式:
所有库:--all-database 或 -A
单个库:数据库名
多个库:数据库名1 数据库名2....数据库名n
单张表:数据库名 表名
实例:备份所有库与完全恢复
]#mysqldump -uroot -p123456 -A > /fullbak.sql
]#mysql -uroot -p123456 -A < /fullbak.sq
2.增量备份
在了解了完全备份之后,你要思考下一个问题,为什么当我做完全恢复的时候,我要将表里已经存在的数据重新恢复一遍,不能直接将那些后来插入的数据恢复吗?(这里是指以某个完全备份数据为基准,比如100条数据,当我插入101条或之后的数据时,这些就是非重复数据).这样做不仅仅节省备份与恢复时间,还节省空间.这就是增量备份.
想知道增量备份是如何工作的,你必须先了解binlog日志.
[binlog教程]https://blog.csdn.net/ck784101777/article/details/100766138
增量备份的命令其实很简单:
mysqlbinlog binlog日志文件 | mysql -u root -p密码
补充:
你要知道何时使用增量备份,如果你搞懂了增量备份的机制,你应该会有这样的疑问,既然binlog日志记载了所有操作(除查询),那么删除操作也会记录,这样即使做恢复数据也会执行删除操作,如果对于某一些删除操作人为故意造成的,你如何将它恢复到删除之前的状态,你可以利用偏移量来剔除删除操作(--start-pos,--stop-pos),但是你得自己查看文件去做筛选,既麻烦也不明智.
当然你还可以用flush logs刷新日志来替换binlog日志(但是你怎么知道何时去做这个刷新操作,虽然理论上可行),比如你在做删除操作前刷新日志,那么你就可以恢复到删除之前的状态,问题是你怎么知道何时该做刷新操作,或者哪条删除操作是你需要的而哪些删除操作是故意的.
数据库维护一直都是数据库工程师的一大难题,定时的做一次完全备份,每天做一次增量备份总是比较靠谱的选择.