mysql备份、基于时间或位置恢复

查看所有日志,在mysql中:


purge master logs to 'localhost-bin.000006'; 删除日志
PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh24:mi:ss'  将删除什么日期之前的所有日志
expire_logs_day=3    这个是在配置文件中标注 日志过期多少天将自动删除


flush logs  启用新的日志文件,一般是备份完数据后执行
reset master; 清空所有bin-log


备份
1、备份所有数据库: mysqldump -uroot -p --all-databases > all.sql
2、备份数据库test:msyqldump -uroot -p test >test.sql
3、备份数据库test下的user和time表:  mysqldump-uroot -p test user time> user_time.sql

4、备份数据库test下的所有表为都好分割的文本,备份到/tmp   msyqldump -uroot -T/tmp test emp --fields-terminated-by','            

more emp.txt



为了保证数据备份的一致性,MyISAM 存储引擎在备份的时候需要加上-l 参数,表示将所有表加上读锁,在备份期间,所有表将只能读而不能进行数据更新。
但是对于事务存储引擎(InnoDB 和 BDB)来说,可以采用更好的选项--single-transaction,此选项将使得 InnoDB 存储引擎得到一个快照(Snapshot),
使得备份的数据能够保证一致性。 


完全恢复
1、将备份作为输入执行即可 mysql -uroot -p < bakfile
2、备份恢复后将备份后执行的日志进行重做   mysqlbinlog binlog-file | mysql -uroot -p*** 


1、mysqldump  -uroot –p –l –F test >test.dmp
其中-l 参数表示给所有表加读锁,-F 表示生成一个新的日志文件,
2、10 点,数据库突然故障,数据无法访问。需要恢复备份: mysql -uroot -p test < test.dmp
3、使用 mysqlbinlog 恢复自 mysqldump 备份以来的 BINLOG。
mysqlbinlog  localhost-bin.000015 | mysql -u root –p test


基于时间点恢复:
1、如果上午 10 点发生了误操作,可以用以下语句用备份和 BINLOG 将数据恢复到故障前: 
shell>mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u 
root –pmypwd 
2、跳过故障时的时间点,继续执行后面的 BINLOG,完成恢复
shell>mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456| mysql -u 
root -pmypwd \ 


基于位置恢复
和基于时间点的恢复类似,但是更精确,因为同一个时间点可能有很多条SQL语句同时
执行。恢复的操作步骤如下。
1、shell>mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" 
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql 
该命令将在/tmp 目录创建小的文本文件,编辑此文件,找到出错语句前后的位置号,
例如前后位置号分别是 368312 和 368315。
2、恢复了以前的备份文件后,应从命令行输入下面内容:
shell>mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \ 
    | mysql -u root -pmypwd  
shell>mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \ 
    | mysql -u root -pmypwd \  
上面的第一行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。
因为 mysqlbinlog 的输出包括每个 SQL 语句记录之前的 SET TIMESTAMP 语句,因此恢复的数据和相关 MySQL 日志将反应事务执行的原时间。



每天自动备份文件
df -h   #查看文件的大小
创建备份目录
cd /home
mkdir backup
cd backup
创建备份shell脚本
vi sets.sh
在脚本里粘贴内容
#!/bin/bash
file_name=$(date+ %Y%m%d_%H%M%S)
mysqldump -uusername -ppassword DatabaseName > /home/backup/DatabaseName_$file_name.sql
添加可执行权限
chmod u+x bkDatabaseName.sh


测试:
./sets.sh
添加计划任务
crontab -e


内容填写:
*/1 * * * * /home/backup/sets.sh


查看任务日志
tail -f /var/log/cron


看有没有文件创建

你可能感兴趣的:(mysql)