两种方法
一,mysqldump(全备) + binlog(增备)
mysqldump每周做一次全备
mysqldump -uroot -p123456 db1 --flush-logs --master-data=2 --single-transaction >/tmp/db1-all.sql
注意:
1,--flush-logs,会刷新binlog,看情况设定
2,--master-data=2,能看到当前DB最后的pos点,在master-slave中能看到主的最后pos以便change master,在恢复时也提供binlog恢复的起点;
3,--single-transaction,设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。保证数据的一致性。
binlog增备有两种方式
1,间隔时间短,通常为分钟,使用rsync将目录下的binlog同步到其他机器
(1) 备份的服务器上创建同步目录
[root@xxx root]# cd /tmp/ && mkdir rsync && cd rsync
(2)DB服务器上生成ssh-keygen,将id_rsa.pub重命名为authorized_keys,并将authorized_keys拷贝至备份的服务器/root/.ssh/下,测试ssh是否需要密码,离开
[root@xxx root]# ssh-keygen -t rsa
[root@xxx root]# chmod 755 /root/.ssh/id_rsa.pub
[root@xxx root]# scp /root/.ssh/id_rsa.pub 192.168.1.92:/root/.ssh/authorized_keys
[root@xxx root]# ssh 192.168.1.92
[root@xxx root]# exit
(3)DB服务器上创建脚本,并执行,测试是否能同步到备份服务器
#!/bin/sh
RSYNC=/tmp/rsync #rsync位置
RUSER=root #备份服务器帐号
RHOST=192.168.1.92 #备份服务器IP
RPATH=/tmp/rsync #备份服务器目录
LPATH=/usr/local/mysql/log/ #DB服务器binlog目录
rsync -avu -e ssh $LPATH $RUSER@$RHOST:$RPATH
#rsync -vz /usr/local/mysql/log/mysql-bin* -e ssh $LPATH $RUSER@$RHOST:$RPATH #只同步部分文件,带上参数a会同步所有
(4) 系统定时执行同步crontab -e
*/5 * * * * /home/rsync/rsync
注意:1,rsync同步时,只会把有更新的文件同步。
2,$LPATH的路径最后不带 “/” 时,会把路径最后的目录也同步, 如果带上 “/” ,则只会把 “/” 后的文件同步。
例如当“***/log” ,会把log目录也加入同步,当“***/log/” ,则只会把Log文件夹内的文件同步。
多一层,少一层的区别。
2,间隔时间长,通常为天,使用scp将目录下的binlog同步到其他机器。
缺点:scp拷贝时间较长。
binlog恢复数据
情况一,删除数据
1,使用全备在其他机器导入数据
2,将binlog导出为文本格式,找到对应的数据position,或者时间
mysqlbin -uroot -p123456 --base64-output=decode-rows /usr/local/mysql/data/mysql-bin.000001 >/tmp/db1
3,利用mysqlbinlog按pos或者时间恢复数据
mysqlbinlog /var/log/mysql/mysql-bin.000002 --start-pos=575 --end-pos=601 | mysql -uroot –p
mysqlbinlog /var/log/mysql/mysql-bin.000002 --start-date=”2005-04-20 10:01:00″ --end-date=”2005-04-20 10:03:00″| mysql -uroot –p
注意:
1,如果是二进制格式的binlog,需要带上--base64-output,因为mysqlbin导出的是文本文件,如果binlog是二进制格式,打开文件后看不到修改的字段,也就失去了导出用来查看修改内容的作用。
二,xtrabackup(全备) + xtrabackup(增备)
每周做一次全备,每天做一次增备