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>
es=FALSE --compress=FALSE
isable-keys=TRUE
-dump-date=TRUE
(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 检查:查看数据库结构以及数据。 (责任编辑:好模板) |