Linux下定时备份MySQL并同步到其他服务器

Linux下定时备份MySQL并同步到其他服务器

一、需求背景

有一台web服务器,Linux系统,是Mysql的数据库,想要备份Mysql中的数据文件到别的服务器上,以便恢复数据的时候使用。

源服务器(运行web的服务器):10.172.***.*(zajweb) mysql=root:123456

目标服务(备份数据的服务器):10.172.***.***(zzweb)

 

二、mysql备份

1.数据的导入和导出

1.1#导出数据库(压缩)

/usr/local/mysql/bin/mysqldump ‐u root ‐p12qwaszx gatcms | gzip >

/home/bak/zz_web_mysqlbak/database20170905.sql.gz

1.2#导入数据库

mysql ‐u root ‐p database < database20160929.sql

 

2.创建Crontab

2.1创建备份目录

mkdir ‐p /home/bak/zaj_web_mysqlbak

           2.2创建备份脚本

                     1#创建自动备份脚本

          touch /usr/sbin/zaj_web_mysqlbak.sh

          2、编辑备份脚本

          vi /home/bak/zaj_web_mysqlbak.sh

          3、脚本代码:

          #!/bin/bash

          # Name:bakmysql.sh

          # This is a ShellScript For Auto DB Backup and Delete old Backup

          #

          mysql_bin_dir=/usr/local/mysql/bin #mysqlbin目录地址

          backupdir=/home/bak/zaj_web_mysqlbak #数据库的备份地址

          time=` date +%Y%m%d%H `

          $mysql_bin_dir/mysqldump ‐u root ‐p123456 zajcms | gzip

          $backupdir/zaj_web_database$time.sql.gz

          #

          find $backupdir ‐name "zaj_*.sql.gz" ‐type f ‐mtime +7 ‐exec rm {} \; > /dev/null 2>&1

          #

         说明:

                backupdir mysql的备份地址(数据存放的位置)

                mysql_bin_dir mysqlbin路径(backupdir已经定义)

                ppwdp后面跟的是数据库的密码

 

          2.3 给创建的备份脚本授权

              chmod +x /usr/sbin/zaj_web_mysqlbak.sh

          2.4设置crontab定时

              1crontab ‐e

   200 1 * * * /usr/sbin/zaj_web_mysqlbak.sh

               #表示每天100分执行备份

               #注:crontab配置文件格式如下:

               #分 时 日 月 周 命令

         2.5重启crontab

              /etc/rc.d/init.d/crond restart

         #这样就完了定时备份并清理前7天的备份数据

三、同步到其它服务器

     这里使用Linux同步文件工具rsync+inotify来进行文件的同步

rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程

同步 支持本地复制,或者与其他SSH、rsync主机同步

用法:

       rsync src dest

这是最简单的用法,表示同步src,dest文件。(即,执行之后,dest的文件与src的相同,以src的为准)

常用选项:

              -a: 等价于rlptgoD,归档式

-r: 递归

-l: 复制软件链接

-p: 保留权限信息

-t: 将src的修改时间,同步到dest

-g: 同步组信息(group)

-o: 同步拥有者信息(own)

-D: 保持字符与块设备文件

              -z: 启用压缩传输

-delete: 如果src没有此文件,那么dest也不能有,即在dest删除src里没有的文件。(如果你使用这个选项,就必须搭配-r选项一起)

       3.1配置同步

              1、创建同步脚本文件

               touch /usr/sbin/zaj_web_rsync_mysqlbak.sh

    2、进入要编辑的脚本文件

    vi /usr/sbin/zaj_web_rsync_mysqlbak.sh

     3、配置要同步数据的信息以及要同步到那个服务器

      rsync ‐vrzacu ‐‐delete /home/bak/zaj_web_mysqlbak

      root@10.172.***.***:/home/bak/zaj_web_mysqlbak ‐e "ssh ‐p 22"

#将本地/home/bak/zaj_web_mysqlbak/文件同步到远程服务器/home/bak/zaj_web_mysqlbak/目录下面通过ssh端口

       3.2 配置ssh互信(两台服务器之间便于直接进行数据的同步,不用输入密码验证)

            #下面在zajweb‐10.172.***.*服务器生成ssh key

[root@zajweb ~]$cd root

[root@zajweb ~]$mkdir ~/.ssh

[root@zajweb ~]$chmod 700 ~/.ssh

[root@zajweb ~]$ssh‐keygen ‐t rsa

[root@zajweb ~]$ssh‐keygen ‐t dsa

#下面在zzweb‐10.172.***.***服务器生成ssh key

[root@zzweb ~]$cd root

[root@zzweb ~]$mkdir ~/.ssh

[root@zzweb ~]$chmod 700 ~/.ssh

[root@zzweb ~]$ssh‐keygen ‐t rsa

[root@zzweb ~]$ssh‐keygen ‐t dsa

#配置互信(root用户)

[root@zajweb ~]$touch ~/.ssh/authorized_keys

[root@zajweb ~]$ssh 10.172.***.* cat ~/.ssh/id_rsa.pub >>authorized_keys

[root@zajweb ~]$ssh 10.172.***.* cat ~/.ssh/id_dsa.pub >>authorized_keys

[root@zajweb ~]$ssh 10.172.***.*** cat ~/.ssh/id_rsa.pub >>authorized_keys

[root@zajweb ~]$ssh 10.172.***.*** cat ~/.ssh/id_dsa.pub >>authorized_keys

[root@zajweb ~]$scp ~/.ssh/authorized_keys 10.172.***.***:~/.ssh/

authorized_keys 100% 1980 1.9KB/s 00:00 

       3.3 给创建的同步脚本授权:

              chmod +x /usr/sbin/zaj_web_rsync_mysqlbak.sh   

       3.4 创建同步定时:

              30 1 * * * /usr/sbin/zaj_web_rsync_mysqlbak.sh

#表示每天130分执行同步

 

你可能感兴趣的:(Linux下定时备份MySQL并同步到其他服务器)