linux定时备份mysql并同步到其它服务器

数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小

这篇文章将会两部分来说明:

1、mysql的定期备份;

2、同步到其它服务器

mysql 备份

备份还原某个数据库

备份还原

# 导出数据库
/usr/bin/mysqldump -u root -ppwd database > database20160929.sql
# 导入数据库
mysql -u root -p database < database20160929.sql

备份到压缩文件从压缩文件导入

#备份到压缩文件
/usr/bin/mysqldump -u root -ppwd database | gzip > database20160929.sql.gz
#从压缩文件导入
gzip < database20160929.sql.gz | mysql -u root -p database
crontab定时备份

1、创建备份目录

# root 用户,创建备份目录
mkdir -p /bak/mysqlbak
cd /bak/mysqldata

2、编写运行脚本

vi  /usr/sbin/bakmysql.sh

脚本代码:

#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysqlbak
time=` date +%Y%m%d%H `
mysql_bin_dir/mysqldump -u root -ppwd database | gzip > $backupdir/database$time.sql.gz
#
find $backupdir -name "name_*.sql.gz" -type f -mtime +7 -exec rm {} ; > /dev/null 2>&1

#

脚本说明:

backupdir mysql备份地址
root mysql用户名
pwd mysql密码
database 数据库名
mysql_bin_dir mysql的bin路径;
time=` date +%Y%m%d%H `也可以写为time="$(date +"%Y%m%d$H")"其中`符号是TAB键上面的符号,不是ENTER左边的'符号,还有date后要有一个空格。
type f 表示查找普通类型的文件,f表示普通文件。
mtime +7 按照文件的更改时间来查找文件,+5表示文件更改时间距现在7天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
exec rm {} \ 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。
/dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行。

3、为脚本添加执行权限

# chmod +x /usr/sbin/bakmysql.sh

4、设置crontab定时执行

vi /etc/crontab
#在最后一行中加入:
00 3 * * * root /usr/sbin/bakmysql.sh
#表示每天3点00分执行备份
注:crontab配置文件格式如下:
分 时 日 月 周  命令 

5、重启crontab

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

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

同步到其它服务器

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

rsync

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选项一起)

## 将本地/bak/mysqlbak/文件同步到 远程服务器 /bak/mysql/bak 目录下面 排除 mysqlbak/index目录 通过ssh端口
rsync -vzacu  /bak/mysqlbak/  root@192.168.53.86:/bak/mysqlbak   --exclude  "mysqlbak/index"   -e "ssh -p 22"
# 将远程目录 /bak/mysqlbak下的文件同步到本地 /bak/mysqlbak/目录下
rsync -vzrtopg --progress --delete root@192.168.53.85:/bak/mysqlbak  /bak

启用rsync服务器端同步远程文件

rsycn的服务端为服务器的文件接收端,rsycn的客户端为服务器的文件推动端。

rsycn的服务端/文件接收端配置

服务端需要开启rsyncd服务

添加配置文件rsyncd.conf

vi /etc/rsyncd.conf
#以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
[mysqlbak]   #模块名,在源服务器指定这个名字
  comment = sync rsync/home   #描述信息
  path = /bak/mysqlbak   #备份目录
  use chroot=no      #不使用chroot,不用root权限
  read only = no     #设置本地备份目录为读写权限
  uid=root
  gid=root
  max connections=10    #客户端最大连接数
  auth users = root   #指定数据同步用户
  secrets file = /etc/rsyncd.pass     #指定数据同步用户信息文件
  hosts allow=192.168.53.0/85   #允许连接的客户端
  ignore errors = yes   #忽略出现I/O错误
  timeout = 600

创建认证文件

vi /etc/rsyncd.pass
 ##代码
 root:root   #格式是用户名:密码
 #属主要有权限读这个文件,否则会报没权限
 chmod 600 /etc/rsyncd.pass 

修改/etc/xinetd.d/rsync文件,disable 改为 no

service rsync
{
    disable = no
    socket_type   = stream
    wait      = no
    user      = root
    server     = /usr/bin/rsync
    server_args   = --daemon
    log_on_failure += USERID
}

启动服务端

rsync --daemon --config=/etc/rsyncd.conf 

rsycn的客户端/文件发送端配置

客户端配置简单 只需要配置密码既可

vi /etc/rsync_client.pwd
##代码
root #只需要填写rsync服务的密码
#属主要有权限读这个文件,否则会报没权限
chmod 600 /etc/rsync_client.pwd

客户端同步测试

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /bak/mysqlbak/ root@192.168.53.86::mysqlbak

rsync只是一次性同步,如果需要实时同步就需要引入另一个工具了

inotify

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

Inotify只需要要按照部署在同步的客户端,当监控的文件有变化触动 rsync脚本来同步

安装

yum install inotify-tools

配置监控的文件路径

vi /etc/inotify_exclude.lst
#代码
/bak/mysqlbak #监控目录
@/bak/log #排除监控目录
rsync排除监控文件目录

vi /etc/rsyncd.d/rsync_exclude.lst
#代码
src/*.html*
src/js/
src/2014/20140[1-9]/

客户端同步到远程的脚本rsync.sh

#rsync auto sync script with inotify
#variables
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/bak/mysqlbak/
log_file=/var/log/rsync_client.log
#rsync
rsync_server=192.168.53.86
rsync_user=root
rsync_pwd=/etc/rsync_client.pwd
rsync_module=mysqlbak
INOTIFY_EXCLUDE='(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)'
RSYNC_EXCLUDE='/bak/rsync_exclude.lst'
#rsync client pwd check
if [ ! -e ${rsync_pwd} ];then
  echo -e "rsync client passwod file ${rsync_pwd} does not exist!"
  exit 0
fi
#inotify_function
inotify_fun(){
  /usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' \
     --exclude ${INOTIFY_EXCLUDE} -e modify,delete,create,move,attrib ${source_path} \
     | while read file
   do
     /usr/bin/rsync -auvrtzopgP --exclude-from=${RSYNC_EXCLUDE} --progress --bwlimit=200 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module}
   done
}
#inotify log
inotify_fun >> ${log_file} 2>&1 &

给脚本执行权限,执行后就可以了

chmod 777 rsync.sh
./rsync.sh

总结

以上所述是小编给大家介绍的linux定时备份mysql并同步到其它服务器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Linux服务器间文件实时同步的实现

    使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/paul/rsync/ ). 数据镜像备份工具Rsync Rsync是一个非常快速和灵活的文件复制工具.它支持本机或者是和远程服务器间的文件复制.Rsync使用了delta-transfer算法,它只需要传送源端和目标端的文件差异部分,大大减少了网络带宽的消耗和复制耗费的时间.Rsync多用于数据备

  • linux实现mysql数据库每天自动备份定时备份

     概述 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.而对于一些网站.系统来说,数据库就是一切,所以做好数据库的备份是至关重要的! 备份是什么? 为什么要备份 容灾方案建设 存储介质 光盘 磁带 硬盘 磁盘阵列 DAS:直接附加存储 NAS:网络附加存储 SAN:存储区域网络 云存储 这里主要以本地磁盘为存储介质讲一下计划任务的添加使用,基本的备份脚本,其它存储介质只是介质的访问方式可能不大一样. 1.

  • 详解linux ntp服务器时间同步设置

    linux ntp服务器时间同步设置 时间同步这个需求在很多地方都有.比如安装cm和cdh的话,需要ntp时间同步,否则会出现红色警告 这里主要是设置一台服务器作为主服务器,让其他机器同步这台机器的时间,而且是配置的本地时间,没有同步internet时间,因为很多时候服务器不能联网 首先我们这里设置2台机器,主机器为192.168.5.102,另外一台为192.168.5.103 首先设置主机器 编辑/etc/ntp.conf文件 在里面加上 restrict 127.0.0.1 # 开启内部递

  • linux系统中rsync+inotify实现服务器之间文件实时同步

    之前做了"ssh信任与scp自动传输脚本"的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道主服务器给备份服务器传输了多少文件,磁盘空间就那么大,做备份的原因:一个是为了保持文件,另外一个是解决主服务器的磁盘饱满问题,但由于不知道备份服务器到底接收了多少文件,所以主服务器里的文件不敢删除(如果没有备份的情况下删除,问题就严重了,我这个是政府的项目,服务器里的文件都是重要的,删错了

  • Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求:   1,每天4点备份mysql数据:   2,为节省空间,删除超过3个月的所有备份数据:   3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim backup_mysql.sh mysqldump -uroot -p123456 --all-databases > /data/dbdata/mysqlbak/`date +%Y%m%d`.sql find

  • Linux 服务器同步 Rsync同步服务器文件

    当一台服务器上的文件更新后,其它的服务器也需要更新,而且在更新的时 候应该是只对新增或是修改过的文件进行更新,否则会造成网络带宽和时间的浪费.rsync就是能有 效的保持文件及目录的一致的优秀软件. rsync,remote synchronize 顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的 权限.时间.软硬链接等附加信息,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另 外它还是免费的软件.rysnc的官方网站:http://rsync.sa

  • MySQL定时备份之使用Linux下的crontab定时备份实例

    1. Mysql备份某个数据库的命令 复制代码 代码如下: ##################################################################  # 备份某个数据库  ################################################################## # root 用户,创建备份目录  mkdir -p /usr/local/cncounter/mysql_dump  cd /usr/local/

  • linux实现定时备份mysql数据库的简单方法

    以下是详细步骤: 1.查看磁盘空间情况: [root@localhost backup]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17G 2.7G 15G 16% / devtmpfs 476M 0 476M 0% /dev tmpfs 488M 0 488M 0% /dev/shm tmpfs 488M 7.7M 480M 2% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1

  • linux下指定mysql数据库服务器主从同步的配置实例

    一. 概念: ① 数据库同步  (主从同步 --- 主数据库写的同时 往从服务器写数据)② 数据库同步  (主主同步 --- 两台数据库服务器互相写数据) 二. 举例数据库服务器(A) 主数据库   IP:192.168.1.134数据库服务器(B) 主数据库   IP:192.168.1.138两台服务器同步的用户名为: bravedu    密码: brave123 一.主数据库操作设置(A):① 创建同步用户名 允许连接的 用户IP地址  (非本机IP) 复制代码 代码如下: grant

  • linux定时备份mysql并同步到其它服务器

    数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小 这篇文章将会两部分来说明: 1.mysql的定期备份: 2.同步到其它服务器 mysql 备份 备份还原某个数据库 备份还原 # 导出数据库 /usr/bin/mysqldump -u root -ppwd database > database20160929.sql # 导入数据库 mysql -u root -p database < database201609

  • linux定时备份MySQL数据库并删除以前的备份文件(推荐)

    备份数据库,这是必须会用到的,今天上午花了几个小时整理了一下,结果不错.下面详细的走一遍 一丶选择一个比较大位置来保存备份文件(创建文件就行) 使用mkdir来创建文件夹,这个简单. 二丶检查有没安装crond,如果没有,先安装 rpm -qa|grep cron  安装后会是 一般没有安装,所以先 yum -y install vixie-cron 然后再 yum -y install crontabs 这样服务就安装好了. 三丶写备份脚本 vi  /var/spool/cron/name.s

  • Linux实现定时备份MySQL数据库并删除30天前的备份文件

    1. MySQL5.6以上版本 2. 修改 /etc/my.cnf 文件 # vim /etc/my.cnf [client] host=localhost user=你的数据库用户 password='你的数据库密码' 3. 编写数据库脚本 mysql-backup.sh # vim mysql-backup.sh #!/bin/bash backupDir=数据库备份目录 backupTime=`date +%Y%m%d%H%M%S` mysqldump 你的数据库 | gzip > $ba

  • Linux系统利用crontab定时备份Mysql数据库方法

    利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1.创建保存备份文件的路径/mysqldata #mkdir /mysqldata 2.创建/usr/sbin/bakmysql文件 #vi /usr/sbin/bakmysql 输入 rq= date +%Y%m%d tar zcvf /mysqldata/mysql$rq.tar.gz /var/lib/mysql 或者写成 rq= date +%Y%m%d mysqldump –all-databases

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql 二.写Python程序 BackupsDB.py #!/usr/bin/python # -*- coding: UTF-8 -*- ''''' zhouzhongqing 备份数据库 ''' import os import time import sched import smtplib from em

  • Linux定时备份数据库到指定邮箱的方法

    一.配置邮箱 这里使用的是网易邮箱126邮箱的STMP服务,服务器是smtp.126.com.如果你使用其它第三方邮箱,在帐号设置那里一般都有说明SMTP服务器地址. 如果你的Ubuntu没有安装mail模块,则需要执行这条命令来安装邮件模块: root@name:~# apt-get install mailutils 打开mail配置文件 vim /etc/mail.rc 在结尾部分加上这些设置 set from=test@126.com smtp=test@126.com set smtp

  • 定时备份 Mysql并上传到七牛的方法

    多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份.xtrabackup 增量逻辑备份等. 常见的数据存储方式有,本机存储.FTP 上传到远程服务器.云存储(如阿里云OSS.七牛云存储等).甚至本地也行. 我们可能不想每次都手动去备份,也不想每次都那么耗时间的去下载,也不想就放在服务器上丢了,因为我们需要异地备份.那我们可以尝试,写个脚本定时备份数据

  • PHP定时备份MySQL与mysqldump语法参数详解

    先来为大家介绍几个MySQL备份命令mysqldump常用操作实例: 1.mysqldump备份 只导出表结构 d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --no-data --default_character-set=utf8 > d:/Python/data/snsgou_sns_test_table.sql mysqldump只导出数据 d:/PHP/xampp/

  • 给Linux定时备份数据库的实现脚本

    目录 场景:服务器数据库需要实现每天定时备份 1.首先确定备份脚本放置位置 2.编写shell脚本 3.给bash增加权限 4.测试看看脚本是否是正确可执行的 5.打开定时任务 6.编辑内容 7.查看定时任务 crontab -l 8.踩坑 服务器数据实现还原 1. 首先对定时任务备份的数据进行解压 2.接着将数据导入到database中 场景:服务器数据库需要实现每天定时备份 1.首先确定备份脚本放置位置 个人放置在   /usr/local/backup文件下,取名文件     bkData

随机推荐