mysql的远程备份 和其他备份方法

时间:2024-02-24 16:10:41

一:前期准备

至少需要两台主机

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查看是否恢复