`
xitonga
  • 浏览: 587534 次
文章分类
社区版块
存档分类
最新评论

MySQL备份方案-->(利用mysqldump以及binlog二进制日志)

 
阅读更多

MySQL备份方案-->(利用mysqldump以及binlog二进制日志)

随着数据不断增加,而且为了兼容以后的innodb存储引擎, 所以考虑采用mysqldump全备+日志增量备份的策略。使用mysqldump对于mysql大部分mysql存储引擎比如myisam、innodb都有很好的支持。

方案一:mysqldump全备份+日志增量备份

1, mysqldump备份方案:

周一凌晨3点全备

周二到周日凌晨3点增量备份

2, 备份步骤

(1) 创建备份目录,备份脚本存放目录

Shell > mkdir /usr/mysqlbackup;

Shell > chmod 755 /usr/mysqlbackup;

Shell > mkdir /usr/mysqlbackup/daily;

Shell > chmod 755 /usr/mysqlbackup/daily;

Shell > mkdir /usr/script;

Shell > chmod 777 /usr/script/*.sh

(2) 启用二进制日志

如果日志没有启开,必须启用binlog,要重启mysqld,首先,关闭mysqld,打开/etc/my.cnf,加入以下几行:

[mysqld]

log-bin

然后重新启动mysqld,会产生hostname-bin.000001以及hostname-bin.index,前面的日志文件是记录所有对数据的更新操作,后面的文件是存储所有二进制文件的索引,不能轻易被删除。

(3) 全备份,增量备份。

详细见mysqlFullBackup.sh、mysqlDailyBackup.sh脚本(请注意脚本里面的备份目录、mysql软件安装目录、压缩文件名以及用户名密码,如有不符,请修改)。

下面是部分shell上单个手动执行的测试命令。

Shell> /usr/local/mysql/bin/mysqldump -uroot-pnYuIman25040slave201012301124 --no-create-info=FALSE --order-by-primary=FALSE--force=FALSE --no-data=FALSE --tz-utc=TRUE --flush-privileg

es=FALSE --compress=FALSE --replace=FALSE--insert-ignore=FALSE --extended-insert=TRUE --quote-names=TRUE --hex-blob=TRUE--complete-insert=FALSE --add-locks=TRUE --port=3306 --d

isable-keys=TRUE --delayed-insert=FALSE--create-options=TRUE --delete-master-logs=FALSE --comments=TRUE--default-character-set=utf8 --max_allowed_packet=1G --flush-logs=FALSE -

-dump-date=TRUE --lock-tables=TRUE--allow-keywords=FALSE --events=FALSE --single-transaction=TRUE --routines--all-databases > /backup/mysql/full/mysql_20110104_195546.sql

(4)设置crontab任务,每天执行备份脚本

shell> crontab –e

#每个星期日凌晨3:00执行完全备份脚本

0 3 * * 0 /usr/scrpit/mysqlFullBackup.sh>/dev/null 2>&1

#周一到周六凌晨3:00做增量备份

0 3 * * 1-6/root/MySQLBackup/mysqlDailyBackup.sh >/dev/null 2>&1

(5)清除旧的备份文件。

每天去看查看下备份磁盘空间,删除旧的备份压缩文件。

3, 数据库恢复

【注释】如果增量恢复操作中报“ERROR 1051 (42S02) at line 32: Unknown table 'fin_cell_attr_his'”类似的错误,则需要现create一张空表,然后再执行增量恢复。

Mysql> createtable tb1 ……;

(1)全恢复:

用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,直接用 mysql命令恢复最后一次全备份:

先从备份文件服务器上copy出来,解压缩,再恢复,例如:

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_20101216_231900.sql.tar.gz/usr/mysqlrestore/

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz/usr/mysqlrestore/

Shell>cd /usr/mysqlrestore/

Shell>tar -xvf mysql_20101216_231900.sql.tar.gz

Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz

刷新日志:

Mysql>flush logs;

恢复最后一次全备份命令:

Shell>/usr/local/mysql/bin/mysql -uroot -p123456 </tmp/mysqlbackup/backup_20101215_adb.sql

恢复最后一次全备份之后的所有增量备份命令:

Shell>/usr/local/mysql/bin/mysqlbinlog mysql-bin.00007 mysql-bin.00008mysql-bin.00009 mysql-bin.00010 mysql-bin.00011 | mysql

检查:查看数据库结构以及数据。

(2)基于时间点恢复一,当天全备份之后的insert点数据故障误操作:

如果上午全备份之后的insert数据被误删除, 在11点发生了误操作.可以直接用bin-log日志将数据库恢复到11点之前的那一刻,然后跳过故障时间点11点,再进行恢复下面所有的操作,命令如下:

刷新日志:

Mysql>flush logs;

先从备份文件服务器上把binlog日志copy出来,解压缩。

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101221_030100.tar.gz /usr/mysqlrestore/

Shell>cd /usr/mysqlrestore/

Shell>tar -xvf mysql_binlog_20101221_030100.tar.gz

日志增量恢复到故障点之前

Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-21 10:59:59" mysql-bin.00011|mysql -u root -p 123456
跳过故障的时间点,继续执行后面的binlog,完成恢复
Shell> /usr/local/myql/bin/mysqlbinlog--start-date="2010-12-21 10:59:59" mysql-bin.00011| mysql -u root -p 123456

检查:

用select * from tb等sql命令查看表以及数据是否恢复。

(3)基于时间点恢复二,当天11点数据故障误操作:

如果上午全备份之后的insert数据被误删除, 在11点发生了误操作.丢失的数据是最后一次备份之前录入的数据,则必须先用全备份文件进行全恢复,然后可以用bin-log日志将数据库恢复到11点之前的那一刻,然后跳过故障时间点11点,再进行恢复下面所有的操作,步骤过程如下:

刷新日志:

Mysql>flush logs;

先从备份文件服务器上copy出来,解压缩,再恢复

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz/usr/mysqlrestore/

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/

Shell>cd /usr/mysqlrestore/

Shell>tar -xvf mysql_20101216_231900.sql.tar.gz

Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz

恢复最后一次全备份命令:

Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/mysql_20101216_231900.sql

日志增量恢复到故障点之前

Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-21 10:59:59" mysql-bin.00011|mysql -u root -p 123456
跳过故障的时间点,继续执行后面的binlog,完成恢复
Shell> /usr/local/myql/bin/mysqlbinlog--start-date="2010-12-21 10:59:59" mysql-bin.00011| mysql -u root -p 123456

检查:

用select * from tb等sql命令查看表以及数据是否恢复。

(4)基于时间点恢复三,昨天11点数据故障误操作:

恢复流程,先全恢复,然后日志增量恢复跳过11点后继续日志增量恢复,如下:

先从备份文件服务器上copy出来,解压缩,再恢复

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz/usr/mysqlrestore/

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/

Shell>cd /usr/mysqlrestore/

Shell>tar -xvf mysql_20101216_231900.sql.tar.gz

Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz

刷新日志:

Mysql>flush logs;

全恢复:

Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/ mysql_20101216_231900.sql

日志增量恢复到故障点:

Shell>/usr/local/myql/bin/mysqlbinlog --stop-date="2010-12-20 10:59:59" mysql-bin.00010|mysql -u root -p 123456

跳过故障点继续恢复:

Shell>/usr/local/myql/bin/mysqlbinlog --start-date="2010-12-20 10:59:59" mysql-bin.00010mysql-bin.00011| mysql -u root -p 123456

(5)基于时间点恢复四,多故障点恢复比如2个故障点数据故障误操作:

第一个故障点:2010-12-2113:41:41 –> 2010-12-21 13:42:36

第二个故障点:2010-12-2113:43:16 –> 2010-12-21 13:46:05

恢复流程,先全恢复,然后日志增量恢复跳过第一个故障点后继续日志增量恢复到第二个故障点,然后跳过第二个故障点继续恢复到终点,如下:

先从备份文件服务器上copy出来,解压缩,再恢复

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/mysql_20101216_231900.sql.tar.gz/usr/mysqlrestore/

Shell>/root/s3cmd/s3cmd get s3://csf-backup/mysqldb/ mysql_binlog_20101217_030100.tar.gz /usr/mysqlrestore/

Shell>cd /usr/mysqlrestore/

Shell>tar -xvf mysql_20101216_231900.sql.tar.gz

Shell>tar -xvf mysql_binlog_20101217_030100.tar.gz

刷新日志:

Mysql>flush logs;

全恢复:

Shell>/usr/local/mysql/bin/mysql -uroot -p123456 < /tmp/mysqlbackup/ mysql_20101216_231900.sql

日志增量恢复到第一个故障点之前:

Shell>/usr/local/mysql/bin/mysqlbinlog --stop-date="2010-12-21 13:41:41"mysql-bin.000012| mysql -u root -p123456;

跳过故障点继续恢复到第二个故障点之前:

Shell> /usr/local/mysql/bin/mysqlbinlog--start-date="2010-12-21 13:42:36" --stop-date="2010-12-2113:43:16" mysql-bin.000012 mysql-bin.000013|mysql -u root -p123456;

跳过第二个故障点恢复到flushlogs之时

Shell>/usr/local/mysql/bin/mysqlbinlog --start-date="2010-12-21 13:46:05" --stop-date="2010-12-2113:46:33" mysql-bin.000012 mysql-bin.000013| mysql -u root -p123456;

检查:运用sql语句查询误操作的表以及数据是否已经恢复。

(6)恢复单一库:

Shell>/usr/local/mysql/bin/mysql -uroot -pmysql --database=csf </tmp/mysqlbackup/backup_20101215_adb_003.sql

(7)基于单库中的各种时间点情况恢复:

请参考 以上步骤(1)(5)过程基本一样,只要在恢复命令后面加上一个空格和库名就可以了。

(8)恢复单库中的单张表:

Mysql所提供的工具目前无法做到这一步,有个方案是:先恢复整个库到一个测试数据服务器上,然后在此服务器上导出单张表的sql,然后把这个sql导入进生产库上。

在测试服务器上导入库:

Shell>/usr/local/mysql/bin/mysql -uroot -pmysql --database=csf </tmp/mysqlbackup/backup_20101215_adb_003.sql

从测试服务器导出单个表:

Shell>/usr/local/mysql/bin/mysqldump --user=root -pmysql --port=3306--default-character-set=utf8--single-transaction=TRUE"csf" "tmp_excel_data_000728" > /tmp/mysqlbackup/backup_20101215_single_table_013.sql

在生产库上导入此表记录

Shell>/usr/local/mysql/bin/mysql -uroot -pmysql csf < /tmp/mysqlbackup/backup_20101215_single_table_013.sql

检查数据

Select* from csf. tmp_excel_data_000728;

(9)电源故障恢复

重启服务器之后,重启数据库,mysql自动恢复,断电时候正在运行的数据库任务和操作需要重新执行一遍。

(10) 操作系统崩溃恢复

操作系统恢复之后,重启数据库,mysql自动恢复,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍

(11) 文件系统崩溃恢复

文件系统恢复之后,重启数据库即可,系统崩溃时正在运行的数据库任务以及操作需要重新执行一遍。

(12) 硬件坏块恢复

重格磁盘,然后恢复数据库。

分享到:
评论

相关推荐

    Linux下实现MySQL数据备份和恢复的命令使用全攻略

    1、利用Mysqldump+二进制日志实现备份 2、利用LVM快照+二进制日志实现备份 3、使用Xtrabackup备份 一:实验环境介绍: 系统介绍:CentOS6.4_X64 数据库版本:mysql-5.5.33 二:基于Mysqldump命令实现备份恢复 2.1、...

    08-MySQL逻辑备份工具mysqldump&mysqlpump&mydumper1

    08-MySQL逻辑备份工具mysqldump&mysqlpump&mydumper1

    详解 linux mysqldump 导出数据库、数据、表结构

    详解 linux mysqldump 导出数据库、数据、表结构 导出完整的数据库备份: mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -q dbname &gt; dbname.sql 说明:–add-locks:导出过程中锁定表,完成后回解锁...

    mysql-5.7.24-win32.zip

    basedir=D:\mysql-8.0.26-winx64\mysql-8.0.26-winx64 # 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建 #datadir=E:\mysql\mysql\data # 允许最大连接数 max_connections=200 # 允许...

    mysql批处理 备份数据库-压缩文件

    NULL 博文链接:https://navylee.iteye.com/blog/1146725

    数据库备份方案.doc

    《MonkeyOnline》数据备份方案 备份方式 主从复制+完整备份(Mysqldump或winrar压缩备份DATA目录)+增量备份(启用从服 务器二进制日志文件) 备份策略 在主服务器上启用二进制日志实现主从复制做实时在线热备份;...

    mysqldump备份还原和mysqldump导入导出语句大全详解

    mysqldump备份: 代码如下:mysqldump -u用户名 -p密码 -h主机 数据库 a -w “sql条件” –lock-all-tables &gt; 路径 mysqldump还原: 代码如下:mysqldump -u用户名 -p密码 -h主机 数据库 &lt; 路径 mysqldump按条件...

    UNIX下MySQL 备份和恢复

    目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。...

    MySQL备份与恢复实战(PDF版)

    增量备份:使用二进制日志增量备份,使用mysqlbinlog 命令恢复二进制日志。SQL 语法备份及恢复。拷贝数据文件备份(对Innodb 还需拷贝日志文件)。MyISAM 表的检查与修复(另见《MySql 存储引擎》)。Innodb 表的...

    MySQL完整备份和增量备份脚本

    mysql完整备份和增量备份脚本,本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这...mysql需要开启二进制日志。

    Mysql5.6.21 x86版本

    复制: 新变量 simplified_binlog_gtid_recovery 可用于更改在恢复期间搜索以前GTID的二进制日志文件的方式,从而在存在大量二进制日志文件时加快进程。(Bug#69097,Bug#16741603,Bug#74071,Bug#19686914) ...

    mysqldump数据库备份参数详解

    mysqldump备份: 代码如下:mysqldump -u用户名 -p密码 -h主机 数据库 a -w “sql条件” –lock-all-tables &gt; 路径 mysqldump还原: 代码如下:mysqldump -u用户名 -p密码 -h主机 数据库 &lt; 路径 mysqldump按条件...

    mysql数据库备份还原实战操作步骤-mysqldump备份还原

    mysql数据库备份还原实战操作步骤-mysqldump备份还原

    Linux运维-运维课程d4-MySQL备份与恢复(重点)-19-mysqldump全库级备份.mp4

    Linux运维-运维课程d4-MySQL备份与恢复(重点)-19-mysqldump全库级备份.mp4

    浅谈mysqldump使用方法(MySQL数据库的备份与恢复)

    #mysqldump –help 1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname &gt; dbname.sql  (2)导出数据库结构(不含数据) mysqldump -u username -p -d ...

    LNH_MySQL 12-mysqldump-master-data参数答疑详解.mp4

    LNH_MySQL 12-mysqldump-master-data参数答疑详解.mp4

    Linux下MYSQL每天完全备份

    利用crontab,系统每天定时备份mysql数据库 利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。 1、创建保存备份文件的路径/mysqldata #mkdir /mysqldata 2、创建/usr/sbin/...

    介绍备份和还原MySQL数据的两种方法

    使用mysqldump进行备份和还原 使用mysqldump进行备份 mysqladmin stop-slave -uroot -p mysqldump --all-databases &gt; fulldb.dump mysqladmin start-slave -uroot -p tar -czf /tmp/dbdump.tar.gz ./fulldb.dump ./...

    Linux系统Mysql数据库的备份和还原.pdf

    退出mysql,然后输⼊以下命令备份数据库 1 [root@CentOS ~]# mysqldump -u root -p mysql &gt; ~/mysql.sql #把数据库mysql备份到家⽬录下命名为mysql.sql 2 Enter password: 3 [root@CentOS ~]# ls ~/mysql.sql /root...

    MySQL数据库的数据备份和恢复详解

    目前MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志,还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是...

Global site tag (gtag.js) - Google Analytics