当Linxu服务器进行定时备份时,需要配置scp服务。
如下:
本地服务器(A)主服务器
远程服务器(B)从服务器
1,本地服务器A运行ssh-keygen -t rsa,一直回车即可。出现这个页面表示运行成功,会在/root/.ssh下生成id.rsa和id_rsa.pub两个文件。
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fdipzone/.ssh/id_rsa): 这里输入要生成的文件名
Enter passphrase (empty for no passphrase): 这里输入密码
Enter same passphrase again: 这里重复输入密码
Your identification has been saved in /home/fdipzone/.ssh/id_rsa.
Your public key has been saved in /home/fdipzone/.ssh/id_rsa.pub.
The key fingerprint is:
f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a2:b0 fdipzone@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
| .+=*.. |
| . += + |
| o oo+ |
| E . . o |
| ..S. |
| .o . |
| .o + |
| ...oo |
| +. |
+-----------------+
2,把主服务A的id_rsa.pub文件拷贝到远程服务器B的/root/.ssh下,如果远程服务器B的/root/.ssh的文件夹不存在,执行mkdir 文件名创建。通过ssh工具下载上传的方式,也可以用scp拷贝,scp第一次是需要输入密码,复制完之后,信任关系就已经建立如下:
#/root/.ssh为文件夹路径,127.0.0.1是备份服务器IP。scp的同时会修改文件夹为authorized_keys
[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@127.0.0.1:/root/.ssh/authorized_keys
root@127.0.0.1's password:
id_rsa.pub 100% 408 41.7KB/s 00:00
[root@localhost .ssh]#
3,在Linux下Mysqldump备份数据,会提示输入密码。在my.cnf配置文件中[client]模块下添加数据库账号和密码,如下图
[client]
port = 3306
default-character-set=utf8
user = root
password = 123456
4,在指定的路径执行编写好的shell脚本,执行之前需要在远程服务器B创建/home/mysql_backup文件夹。因为scp相互信任步骤完成,my.cnf配置中已设置数据库账号和密码,所以不需要在输入密码,如下图:
[root@localhost home]# sh mysql_backup.sh
20201129-1445-test1.sql-tar.gz 100% 341KB 14.0MB/s 00:00
20201129-1445-test2.sql-tar.gz 100% 5483 387.3KB/s 00:00
20201129-1445-test3.sql-tar.gz 100% 31MB 31.3MB/s 00:01
20201129-1445-test4sql-tar.gz 100% 23KB 827.6KB/s 00:00
20201129-1445-test5.sql-tar.gz 100% 46MB 45.8MB/s 00:01
[root@localhost home]#
5,脚本如下
#创建mysql备份目录
file_dir="/home/mysql_backup"
if [ ! -d "$file_dir" ]; then
echo "创建文件夹"
mkdir $file_dir
else
echo "文件夹已存在,正在备份mysql,请等待。"
fi
rm -rf /home/mysql_backup/*
HOST=127.0.0.1
DATABASE1=test
BACKUP_DIR=/home/mysql_backup/ #备份数据库文件的路径
LOGFILE=/home/mysql_backup/data_backup.log #备份数据库脚本的日志文件
DATE=`date +%Y%m%d-%H%M -d -3minute` #获取当前系统时间-3分钟
DUMPFILE1=$DATE-test.sql #需要备份的数据库名称
ARCHIVE1=$DUMPFILE1-tar.gz #备份的数据库压缩后的名称
if [ ! -d $BACKUP_DIR ]; #判断备份路径是否存在,若不存在则创建该路径
then
mkdir -p "$BACKUP_DIR"
fi
echo -e "\n" >> $LOGFILE
echo "------------------------------------" >> $LOGFILE
echo "BACKUP DATE:$DATE">> $LOGFILE
echo "------------------------------------" >> $LOGFILE
cd $BACKUP_DIR
#跳到备份路径下
mysqldump -h$HOST -R --databases $DATABASE1 --hex-blob > $DUMPFILE1
#使用mysqldump备份数据库
if [[ $? == 0 ]]; then
tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1
#判断是否备份成功,若备份成功,则压缩备份数据库,否则将错误日志写入日志文件中去。
echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE
rm -f $DUMPFILE1
else
echo “$ARCHIVE1 Backup Fail!” >> $LOGFILE
fi
scp /home/mysql_backup/* root@127.0.0.1:/home/mysql_backup/
6,到主服务器A,远程服务器B指定的MYSQL备份目录看下是否成功,备份成功!
7,接下来设置定时备份任务,在主服务器A执行crontab -e,设置脚本执行的时间,下面语句中的路径及时间请根据实际情况填写。如下
30 23 * * * /bin/bash /home/mysql_backup.sh
8,如未生效,执行 service crond reload 重载crond服务!