数据库备份

环境

服务器:centos7
数据库:mysql 5.7.28
工具:mysqldump rsync

基础命令

1、备份命令
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
例如: mysqldump -h 192.168.1.100 -p 3306 -uroot -ppassword --database cmdb > /data/backup/cmdb.sql
2、备份压缩
导出的数据有可能比较大,不好备份到远程,这时候就需要进行压缩
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 | gzip > 文件名.sql.gz
例如: mysqldump -h192.168.1.100 -p 3306 -uroot -ppassword --database cmdb | gzip > /data/backup/cmdb.sql.gz
3、备份同个库多个表
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 表1 表2 .... > 文件名.sql
例如 mysqldump -h192.168.1.100 -p3306 -uroot -ppassword cmdb t1 t2 > /data/backup/cmdb_t1_t2.sql
4、同时备份多个库
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --databases 数据库名1 数据库名2 数据库名3 > 文件名.sql
例如:mysqldump -h192.168.1.100 -uroot -ppassword --databases cmdb bbs blog > /data/backup/mutil_db.sql
5、备份实例上所有的数据库
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --all-databases > 文件名.sql
例如:mysqldump -h192.168.1.100 -p3306 -uroot -ppassword --all-databases > /data/backup/all_db.sql
6、备份数据出带删除数据库或者表的sql备份
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --add-drop-table --add-drop-database 数据库名 > 文件名.sql
例如:mysqldump -uroot -ppassword --add-drop-table --add-drop-database cmdb > /data/backup/all_db.sql
7、备份数据库结构,不备份数据
格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --no-data 数据库名1 数据库名2 数据库名3 > 文件名.sql
例如:mysqldump --no-data –databases db1 db2 cmdb > /data/backup/structure.sql

本地备份

说明
本次备份使用mysqldump+crontab。采用shell脚本实现定时备份服务器数据库的功能
实现
创建备份目录

/home/test/data

脚本
备份数据库脚本
mysql_backup.sh

#!/bin/bash
#保存备份个数,备份7天数据
number=7
#备份保存路径
backup_dir=/home/test/data
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=Pincll@demo\&ykl543
#如果文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi
#简单写法  mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
$tool -u $username -p$password -A > $backup_dir/ALL-$dd.sql
#写创建备份日志
echo "create $backup_dir/ALL-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

定时器
添加一条定时任务

crontab -e

每天23时0分开始执行备份脚本

0 23 * * * bash /home/test/mysql_backup,sh

远程备份

环境

数据库服务器A ip:192.168.11.124
远程备份服务器B ip:192.168.11.34

实现

使用rsync来实现服务器之间同步,用户crontab来实现定时同步两服务器之间的数据。由于rsync备份时会要求输入远程服务器登录密码,所以需要实现两服务器之间免密登录。
配置服务器建免密访问
登录数据库服务器A:192.168.11.124
执行

生成公私钥

ssh-keygen -t rsa

分发公钥

ssh-copy-id 192.168.11.34

安装rsync

服务器A & 服务器B 安装rsync

sudo yum install rsync

创建远程备份目录
数据库服务器A已存在备份目录
在远程备份服务B中创建备份目录/home/test/rsync
备份脚本
rsync_mysql.sh

增量备份/home/test/data目录下的文件至192.168.11.134:/home/test/rsync

rsync -avPz --progress /home/test/data 192.168.11.134:/home/test/rsync

删除192.168.11.134:/home/test/rsync目录下多余的文件,【与/home/test/data目录下文件对比】

rsync -avPz --delete --progress /home/test/data 192.168.11.34:/home/test/rsync

定时器
添加一条定时任务,实现定时同步数据,同步的定时任务较数据库备份任务滞后一段时间,防止数据库备份尚未完成。
crontab -e

每天1时0分开始执行同步脚本,

0 1 * * * bash /home/test/rsync_mysql.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值