MySQL备份
MySQL备份有三种方法,分别是mysqldump、mysqlhotcopy、mysql-binlog备份,他们各自有优点和缺点。
1、mysqldump的备份
原理:全量备份,查处要备份的表结构,在这个表结构上将建表语句(CREATE)和插入语句(INSERT)语句,都写到你要备份的文件中。
优点:支持innodb的存储引擎,但是其mysqldump转存结果前,会将这个结果集放入内存中,数据量过大可能存在问题(手册里说的),所以有主从模式以及mysql-bin增量备份的模式,就可以减少备份的时间,我们可以每天夜里都备份一次,或者写一个shell脚本,进行备份,shell脚本还是要学习的。
由于我的mysqld安装目录在/usr/local/mysql,所以我的mysqldump的路径为在/usr/local/mysql/bin/mysqldump,在这里做一个软连接,使mysqldump作为系统命令。
ln -s /usr/local/mysql/bin/mysqldump /usr/bin ,如图所示:
语法可以上网查一下:(注意了,mysqldump等文件使一个可执行文件,使在Linux的cli中运行的)
案例一:把数据库db_test备份到/tmp/db_test文件中,代码如下【-h 最好加上,格式标准,再说以后分布式的时候都会用到】:
mysqldump -h 127.0.0.1 -uroot -p db_test>/tmp/db_test.sql
效果如下:
我们看看,db_test.sql的问题内容,如下所示:
当然还可以把整个数据库mysqldump备份,具体的问题就具体分析。
2、mysqlhotcopy备份,也可以叫热备份
优点:快
缺点:只支持MySIAM存储引擎
这个就不做例子了,思路和mysqldump差不多,具体用法可以百度查
3、mysql-binlog【重点】
原理:配置文件log-bin=mysql-bin 使控制binlog是否开启的开关。binlog会记录增删改改的记录。
mysql Bin-log日志的使用场景主要有两个:1、主从复制【在后面的文章中会讲到,master 把bin-log的二进制日志推送给slaves来达到master-slave数据一致】。2、数据恢复,通过使用mysql Bin-log工具来使恢复数据。
bingLog地址:data目录下,/usr/local/mysql/data/,如下图所示:
为什么会有这么多mysql Binlog文件?
答:MySQLBinlog当遇到下述情况时,会生成新的日志文件,文件序号递增:
1、MySQL服务重启以及mysqldump进行备份时时候
2、使用flush logs命令
3、当binglog文件超过max_binlog_size变量时,最大值和默认值时1G【但是必须得等它自己的事务执行完毕】。
如何查看mysql binlog中的内容?【如何查看其中内容,以便追踪问题或者恢复数据?】
答:使用命令mysqlbinlog
# 查看bin-log二进制文件(shell方式) mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003
# 查看bin-log二进制文件(带查询条件) mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \ --start-datetime="2019-03-01 00:00:00" \ --stop-datetime="2019-03-10 00:00:00" \ --start-position="5000" \ --stop-position="20000"
输出内容如下图所示:
总之,你所有的增删改操作都会记录在这个里面。
那么如何利用上述的mysql binlog来进行数据的恢复?
案列:如果我向x_letter表中插入了一条数据,delete了一条数据,又插入了一条记录,那么我应该怎么恢复?
1、查看现在binglog运行的日志,show master status; 效果如下图:
2、具体的MySQL的一个binlog恢复,暂时遇不到,先不管了