scp 传输文件到另一台服务器
文章目录一、scp 命令简介二、简单测试 scp 命令1、启动 ssh 服务2、运行 scp 命令三、scp 免密码传输文件四、docker 备份 MySQL 到另一台服务器一、scp 命令简介Linux scp 命令用于 Linux 之间复制文件和目录。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的,rc
一、scp 命令简介
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
scp 详细命令可参考 https://www.runoob.com/linux/linux-comm-scp.html
二、简单测试 scp 命令
1、启动 ssh 服务
①、使用 ss -lnt 查看 ssh 服务是否启动,如下我指定的 10022 已经启动,默认端口是 22
②、如果没有启动,使用如下命令启动
systemctl start sshd
③、如果没有安装使用如下命令安装,
sudo yum install sshd
或
sudo yum install openssh-server
3、scp 命令格式
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
- 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
- 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
2、运行 scp 命令
命令说明 -p 指定目的主机端口号,默认 22 可不用指定,-r 递归复制整个目录
scp -P 10022 -r /opt/docker/mysql/backup/2021-08-12_01\:00\:01/ root@22.22.22.22:/opt/docker/mysql/backup/
输入密码即可拷贝成功
但是每次都需要手动输入密码,则不能加入到我们的脚本中,使用 scp 免密码传输文件
三、scp 免密码传输文件
以下以 A 服务器 和 B 服务器说明,将 A 服务器文件拷贝到 B 服务器
①、 A 服务器生成公钥私钥,一路回车就可以,需要定制可自行修改
ssh-keygen -t rsa
生成之后,多了两个文件,id_rsa 私钥,id_rsa.pub 公钥
②、将 A 服务器的公钥追加到 B 服务器的 /root/.ssh/authorized_keys 认证文件中,没有该文件则新建
复制 A 服务器 /root/.ssh/id_rsa.pub 公钥
追加到 B 服务器/root/.ssh/authorized_keys 认证文件
③、A 服务器运行免密登陆 scp 命令
④、B 服务器查看,远程备份成功
以上就是 scp 传输文件到另一台服务器的简单使用
四、docker 备份 MySQL 到另一台服务器
下面内容接另一篇博客 备份 MySQL 三种方法备份 MySQL 数据库(含docker)
将上面的 scp 命令添加到 docker mysql 备份的脚本中即可(A 服务器)
#!/bin/bash
dateBackup=$(date +%Y-%m-%d_%H:%M:%S)
dir=/opt/docker/mysql/backup/${dateBackup}
# 宿主机新建目录,通过挂载会自动添加到容器
if [ ! -d "${dir}"]
then
mkdir ${dir}
echo "创建文件夹 ${dir} 成功" >> ${dir}/error.log
else
echo "创建文件夹 ${dir} 失败,文件夹已存在" >> ${dir}/error.log
dbNames=(student teacher car dog cat)
for dbName in ${dbNames[@]}
do
echo "-----------------> 备份 ${dbName} 数据库 <-----------------" >> ${dir}/error.log
docker exec -i 642c89599d9b sh -c "mysqldump -ubackup -pAdmin@123 -h127.0.0.1 -P32773 ${dbName} 1>> /opt/backup/${dateBackup}/${dbName}.sql 2>> /opt/backup/${dateBackup}/error.log"
gzip ${dir}/${dbName}.sql
done
# -e 开启转义字符
echo -e "\n------------------------> scp 22.22.22.22 <---------------------------" >> ${dir}/error.log
# 将该服务器 mysql 备份文件复制到 22.22.22.22:10022 服务器的 /opt/docker/mysql/backup/ 目录下
# script 用于录制会话过程(类似记录日志)
script -a -q ${dir}/error.log -c "scp -P 10022 -r ${dir} root@22.22.22.22:/opt/docker/mysql/backup/"
echo -e " \n ----------------> 删除过期文件 <---------------------------" >> ${dir}/error.log
# 判断文件夹数量是否大于7,防止程序意外停止,定时任务删除所有备份
dirCount=`ls -l /opt/docker/mysql/backup/|grep "^d"|wc -l`
if [ ${dirCount} -gt 7 ]
then
# 删除超过七天的带"_"的目录
find /opt/docker/mysql/backup/ -mtime +6 -name "*_*" -exec rm -rf {} \;
echo -e " 删除过期文件成功" >> ${dir}/error.log
else
echo "删除过期文件失败,文件数量小于 7" >> ${dir}/error.log
fi
script 参数说明
B 服务器定时删除备份过来的文件,可以添加一个定时任务,使用 crontab -e 命令,在文件中追加
0 1 * * * /opt/docker/mysql/backup/del_backup.sh
添加 /opt/docker/mysql/backup/del_backup.sh 脚本文件
dateDel=$(date +%Y-%m-%d_%H:%M:%S)
# 判断文件夹数量是否大于7,防止程序意外停止,定时任务删除所有备份
dirCount=`ls -l /opt/docker/mysql/backup/|grep "^d"|wc -l`
if [ ${dirCount} -gt 7 ]
then
# 删除超过七天的带"_"的目录
find /opt/docker/mysql/backup/ -mtime +6 -name "*_*" -exec rm -rf {} \;
echo -e " ${dateDel} 删除过期文件成功" >>/opt/docker/mysql/backup/del.log
else
echo " ${dateDel} 删除过期文件失败,文件数量小于 7" >> /opt/docker/mysql/backup/del.log
fi
以上就是利用 scp 传输 docker 备份 mysql 数据的所有内容。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)