环境
服务器: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