一:前期准备
至少需要两台主机
192.168.175.200 vip
192.168.175.250 node1
做密钥否则不能拷贝过去
命令:[root@vip ~]#cd /root/.ssh
命令:[root@vip ~]#ssh-keygen
#
命令:[root@vip .ssh]#ssh-copy-id 192.168.175.250
测试一下,命令:[root@vip .ssh]# ssh 192.168.175.250 #不需要密码直接连接
1.另一台主机最好提前创建一个数据存放地
命令:[root@node1 ~]# mkdir -p /data/rsyncdata/databak/
2..备份脚本内容
命令:[root@vip ~]# vim databak.sh
#!/bin/bash
date=$(date +%Y%m%d%H%M%S) #设置时间变量,括号内是设置时间的格式
mysqldump -uroot -p\'123456\' -A > /root/$date-192.168.175.200.sql #MySQL所有数据导出复制到/root/$date-192.168.175.200.sql文件中 注意:yum安装最好是用命令mysqldump的绝对路径而用tar包安装,可以不用
if [ $? -eq 0 ];then #判断上次执行命令是否正确,正确为0,不正确非0
echo "数据备份完成" #正确执行,输出结果
scp /root/$date-192.168.175.200.sql 192.168.175.250:/data/rsyncdata/databak/ #将导出的文件远程复制到192.168.175.250主机上的/data/rsyncdata/databak/文件中
sleep 4 #睡眠4秒
echo "远程备份完成" #输出结果
rm -rf /root/$date-192.168.175.200.sql #删除本地主机导出的数据
fi #结束
3.设置执行计划任务
(1)先将脚本加执行权限(x)
命令:[root@vip ~]# chmod +x databak.sh
(2)周期性任务要用的命令是crontab,那么这里有个选项-e(edit)表示编辑输入
命令:[root@vip ~]# crontab -e
0 * * * * sh /root/databak.sh #分时日月周的顺序,这是每小时执行一次脚本
(3)编写完这个计划任务以后,还是要检查一下这个任务是否在启动
命令:[root@vip ~]# ps -le | grep cron
S表示确实是启动的,如果没有启动可以输入命令:/etc/rc.d/init.d/cron start就可以了
XTRABAKUP工具 在线热备备份过程中不锁库表
主要含两个插件:
rpm -ivh libev-4.15-1.el6.rf.x86_64rpm
yum -y install percona-xtrabackup-24-2.4.7-1.e17.x86_64.rpm
--redo-only 日志合并 --apply-log 准备恢复数据
--copy-back 拷贝数据 --incremental 增量备份
--incremental-basedir 增量备份时指定上一次备份数据存储的目录名 --incremental-dir 准备恢复数据时指定增量备份数据存储的目录名
--export 导出表信息 import 导入表空间
--host 主机名 --user 用户名
--port 端口号 --password 密码
--databases 数据库名 --no-timestamp 不用日期命名备份文件存储的子目录名
完全备份 用户名 密码 备份目录名
例:innobackupex -user root -password 123456 /book --no-timestamp 完全备份
完全恢复
例: 先 innobackupex --apply-log /book 准备恢复数据
后 innobackupex --copy-back /book 恢复数据
恢复完后/var/lib/mysql目录要改归属人如: chown -R mysql:mysql /var/lib/mysql
恢复单张表
innobackupex -user root -password 123456 --databases="db5" /book --no-timestamp 这是备份db5库的文件
数据库里打这个命令: alter table db5.b discard tablespace 删除表空间数据
innobackupex --apply-log --export /book 导出表信息
cp /book/db5/b.{cfg,exp,idb} /var/lib/mysql/db5/ 拷贝表信息到db5库下
chown mysql:mysql /var/lib/mysql/db5/b.* 改所有者和所属组
alter table db5.b import tablespace 导入表空间数据库
rm -rf /var/lib/mysql/db5/b.cfg b.exp 删除这两个文件
增量备份与恢复
innobackupex -user root -password 123456 /lock --no-timestamp 完全备份
增量备份 存放目录 增量备份时指定上一次备份数据存储的目录名 不用日期命名备份文件存储的子目录名
innobackupex -user root -password 123456 --incremental /book --incremental-basedir=/lock --no-timestamp 注: 用--incremental-basedir=/lock这个命令就可以使这次备份的数据只备份上次没备份过的数据
日志合并
scp /book 192.168.17.11:/opt scp /lock 192.168.17.11:/opt 把两个文件拷贝到准备恢复的电脑上
systemctl stop mysql 关闭数据库
innobackupex --apply-log --redo-only /opt/lock 准备恢复数据
innobackupex --apply-log --redo-only /opt/lock --incremental-dir=/opt/book //合并日志
innobackupex --copy-back /opt/lock 恢复文件
chown -R mysql:mysql /var/lib/mysql //修改所有者与组用户
systemctl start mysqld //启动服务
登陆mysql查看是否恢复