MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失、或者丢失后可以快速恢复呢?只要看完这篇, 大家应该就能对MySQL中实现数据备份和恢复能有一定的了解。

创建新数据库并且进行完全备份

ls /usr/local/mysql/data/school/  //会生成三个数据文件分别为
db.opt    //属性文件
info.frm  //表的结构文件
info.ibd  //表的数据文件
tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/   //全部进行备份
mysql-2018-07-04.tar.xz  //就会在备份的路径中生成一个xz格式的压缩包
当恢复的时候 则删除原有data 所有文件
tar Jxvf /opt/mysql-2018-07-04.tar.xz -C  
当备份回去注意文件的属主和属组

备份

mysqldump -u root -p school > /opt/school.sql /备数据库
mysqldump -u root -p --databases school mysql > /opt/school-mysql.sql  //同时备份多个数据库
mysqldump -u root -p --opt --all-databases > /opt/all-mysql.sql  //备份所有数据库
mysqldump -u root -p school info > /opt/school-info.sql  //备份school 里面的info表
mysqldump -u root -p -d school info > /opt/desc-info.sql  //备份表的结构 不会数据插入

MySQL 数据备份_第1张图片
MySQL 数据备份_第2张图片
MySQL 数据备份_第3张图片
MySQL 数据备份_第4张图片
Linux字符界面中恢复MySQL中的数据库表列

注:在Linux字符界面中恢复的前提是得有一个要恢复的数据库同名的数据才恢复数据库
mysql -u root -p school < /opt/school-info.sql 
//在恢复表的时候一应是要先有数据库才可以恢复

在MySQL模式恢复 "source"命令

mysql> drop table info;  ///删除表
mysql> source /opt/school-info.sql  //导入回来就OK了
mysql> show tables;  //查看表

MySQL 数据备份_第5张图片
MySQL 数据备份_第6张图片
增量备份 要开启二进制日志文件

log-bin=mysql-bin   //在MySQL主配置中服务端里面添加开启二进制日志文件
mysqladmin -u root -p flush-logs2  //刷新并且生成二进制日志
insert into info (name,score) values ('lisi',88);   //添加了李四
mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p  //使用二进制日志进行恢复
查看二进制文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
--base64-output=decode-rows -v //使用64位编码进行解码 按行进行读取 -v 显示出来

MySQL 数据备份_第7张图片
MySQL 数据备份_第8张图片
MySQL 数据备份_第9张图片
MySQL 数据备份_第10张图片