在mysql中mysqldump命令使用binlog二进制日志进行备份的例子。
采用mysqldump全备+日志增量备份的策略。
方案一:mysqldump全备份+日志增量备份
2, 备份步骤
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) 启用二进制日志
[mysqld]
log-bin
然后,重新启动mysqld,会产生hostname-bin.000001以及hostname-bin.index,前面的日志文件是记录所有对数据的更新操作,后面的文件是存储所有二进制文件的索引,不能轻易被
(3) 全备份,增量备份。
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一张空表,然后再执行增量恢复。
(1) 全恢复:
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
刷新日志:
(2)基于时间点恢复一,当天全备份之后的insert点数据故障误操作:
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
日志增量恢复到故障点之前
(3)基于时间点恢复二,当天11点数据故障误操作:
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
恢复最后一次全备份命令:
(4)基于时间点恢复三,昨天11点数据故障误操作:
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
刷新日志:
(5)基于时间点恢复四,多故障点恢复比如2个故障点数据故障误操作:
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
刷新日志:
全恢复:
跳过第二个故障点恢复到flushlogs之时
(6)恢复单一库:
(7)基于单库中的各种时间点情况恢复:
从测试服务器导出单个表:
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
在生产库上导入此表记录
(9) 电源故障恢复 (责任编辑:IT) |