mysql 备份与恢复(全量与增量)

时间:2021-02-05 06:24:25

全量备份使用自带的mysqldump命令

备份命令

mysqldump -u[username] -p[password]  [database] [table] > backup.sql


恢复命令

mysql -u[username] -p[password] [database] < backuo.sql


注意恢复命令是mysql不是mysqldump了。


增量备份与恢复

我们开启日志功能,在进行备份后,在指定目录下会产生当次备份后所有操作的日志,通过这个日志,可以把全量备份后所进行的操作所改变的数据状态恢复出来。


1.在 /etc/mysql 下的my.conf 配置文件中。找到log_bin语句,并取点前面的注释符号。

#log_bin = /var/log/mysql/mysql-bin.log

2.使用一下命令进行备份

mysqldump -u[username] -p[password] --single-transaction --flush-logs --master-data=2  [database] [table] > backup.sql


single-transaction的作用是在一个事务里对全部表取得一致性快照来保证事务的一致性。

master-data=2 主要是记录Binlogde log 和pos,用于之后基于位置和时间点的恢复。


执行了上面这条命令之后,同样会得到一个backup.sql的备份文件,另外在目录/var/log/mysql/下面会有日志文件生成。

例如,在我的目录下生成了名为 “mysql-bin.000005” 的二进制文件。

使用命令 mysqlbinlog mysql-bin.000005 > test0005.sql

可以将二进制文件解析出来。

部分截取如下:

#170331  0:56:19 表示时间是2017年03月31日的0点56, end_log_pos 295 表示上一条命令的行序号

-------------------------------------


#170331  0:56:19 server id 1  end_log_pos 295  Xid = 443

COMMIT/*!*/;

# at 295

#170331  0:56:22 server id 1  end_log_pos 364  Query  thread_id=39    exec_time=0    error_code=0

SET TIMESTAMP=1490946982/*!*/;

BEGIN

/*!*/;

# at 364

#170331  0:56:22 server id 1  end_log_pos 456  Query  thread_id=39    exec_time=0    error_code=0

SET TIMESTAMP=1490946982/*!*/;

insert one value(2233,"qwe")

-----------------------------------------------------------------------------

我们同样使用命令:

mysqldump -u[username] -p[password]  [database] [table] > backup.sql

来恢复全量备份。

然后通过对日志的查看,通过使用“时间”或者“行号”作为约束条件,我们可以恢复我们所需要的增量数据。

a.使用时间作为约束条件

mysqlbinlog --start-datetime="20170331 00:56:19" --stop-datetime="20170331 00:57:11" mysql-bin.000005 | mysql -u[username] -p[password] 

b.使用行号作为约束条件

mysqlbinlog --start-position=1556 --stop-position=1648 mysql-bin.000005 |mysql -u[username] -p[password]


------

补充一下,如果要在Linux下面执行定时备份,先创建可执行脚本。

#!/bin.bash

mysqldump -u[username] -p[password] kuone | gzip  > /home/andy/testSQL/DatabaseName_$(date +%Y%m%d_%H%M%S).sql


然后使用命令 crontab -e  在里面写定时任务,比如每天0点执行一次

0 0 * * * sh /home/andy/backup.sh 

然后重启一下cron任务

service cron restart 

好了,就是这样。