云服务器MySQL数据自动备份到Windows 2024-06-29 11:59 ### 摘要 对于任何服务来说,数据都是第一重要的;在企业级开发中,我们有各种措施确保数据完整、安全。但是对个人网站而言,那些都太重、太耗费财力物力了,我们有时候只需要数据定期保存下来就行了。 本篇文章将介绍**如何将云服务器上MySQL中的数据定期备份并传输到Windows上**,这一切都是自动化的: ![](https://minio.riun.xyz/riun1/2024-06-29_65IueBEFwpOZDNWnS4.jpg) ### 1、创建脚本 先在云服务器上创建脚本,这个脚本的作用是:备份MySQL数据库,将sql文件保存本地,兼有删除过早的备份文件。 我这里MySQL是运行在docker中的(企业级开发不建议这么做),所以执行的是docker命令。根据你的MySQL运行环境替换成别的命令即可。 vim /root/backup_mysql.sh ```sh #!/bin/bash # 定义备份的参数 将以下参数修改为你的 BACKUP_DIR=/root/backup/mysql/test MYSQL_CONTAINER_NAME=mysql MYSQL_USER=root MYSQL_PASSWORD=your_password DATABASE_NAME=your_database_name DATE=$(date +"%Y%m%d%H%M%S") LOG_FILE=/root/backup/mysql/test/backup.log # 创建备份目录 mkdir -p $BACKUP_DIR # 备份MySQL数据库 输出日志 docker exec $MYSQL_CONTAINER_NAME /usr/bin/mysqldump -u $MYSQL_USER --password=$MYSQL_PASSWORD $DATABASE_NAME > $BACKUP_DIR/$DATABASE_NAME-$DATE.sql 2>> $LOG_FILE # 删除超过30天的备份文件 find $BACKUP_DIR -type f -mtime +30 -name "*.sql" -exec rm {} \; >> $LOG_FILE 2>&1 ``` 设置脚本可执行:chmod +x /root/backup_mysql.sh ### 2、定时任务 使用cron job来每天自动运行这个脚本:crontab -e,进入编译器,i,插入: ```sh 0 20 * * * /root/backup_mysql.sh ``` 每天20点执行脚本/root/backup_mysql.sh。(这里可以改为一个最近的时间点,让其先生成一个备份文件) 查看定时任务:crontab -l ### 3、设置服务器ssh密钥 在Windows上使用SSH密钥对来安全地连接到云服务器。如果你电脑上已经有了.ssh,就能直接用,否则需要生成一下。这里假设已经有了。(生成命令:ssh-keygen -t rsa -C xxx) 先查看服务器上是否有authorized_keys,如果没有最好,有的话需要先备份一下: ```sh # 查看authorized_keys cat ~/.ssh/authorized_keys ``` 把Windows本地的公钥id_rsa.pub文件(一般在C:\Users\your_user\\.ssh目录下)的内容,复制到authorized_keys中: ```sh vim ~/.ssh/authorized_keys ``` 给与权限: ```sh chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` 重启ssh: ```sh systemctl restart sshd.service ``` widows验证,cmd输入: ```sh ssh root@remote_ip ``` 成功则会进入云服务器。 ### 4、设置windows定时任务 在Windows上创建备份目录:D:/Backup/mysql_data;创建下载脚本:D:\Backup\download_backup.ps1: ```sh # 定义参数 将以下参数修改为你的 $remoteUser = "root" $remoteHost = "your_remote_ip" $remoteDir = "/root/backup/mysql/test" $localDir = "D:/Backup/mysql_data/" # 使用SCP下载最新的备份文件 $scpCommand = "scp ${remoteUser}@${remoteHost}:${remoteDir}/*.sql ${localDir}" & "D:\\Git\\bin\\bash.exe" -c $scpCommand ``` 确保Git Bash已安装并将其路径(如上所示D:\\Git\\bin\\bash.exe)添加到脚本中。 测试scp命令:到D:\\Git\\bin\\bash.exe中执行: ```bash scp root@your_remote_ip:/root/backup/mysql/test/*.sql D:/Backup/mysql_data/ ``` 以上命令将远程文件备份到本地D:/Backup/mysql_data/,执行后检查目录下是否存在sql文件。 测试psl脚本:PowerShell中执行: ```sh powershell.exe -File "D:\Backup\download_backup.ps1" ``` 以上命令使用powershell执行psl脚本。 如果出现”禁止运行脚本“提示,则先更改当前会话的执行策略(更改的是当前会话,当前powershell窗口关闭后就还原了): ```sh Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process ``` 然后再尝试执行上述powershell命令。确定PowerShell执行没问题了,再继续。 使用Windows任务计划程序来定期运行下载脚本: - 打开【任务计划程序】。 - 左上角【操作】,然后【创建任务】,名称随便写你的业务意义。 - 【触发器】,设置每天,然后设置时间如 20:05(确保在云服务器备份任务完成之后),下一步。 - 【操作】,新建,选择【启动程序】;程序或脚本中,点击浏览,找到 `powershell.exe` (通常情况下在:C:\Windows\System32\WindowsPowerShell\v1.0);在“添加参数”字段中输入: ``` -ExecutionPolicy Bypass -File "D:\Backup\download_backup.ps1" ``` - 【条件】,勾选“唤醒计算机运行此任务” - 点击完成,即可! ### 效果 这样,每天云服务器上的MySQL数据备份会自动生成,然后Windows本地会自动下载最新的备份文件到指定目录。 云服务器:![](https://minio.riun.xyz/riun1/2024-06-29_65J0U9J626Y2eiUXYF.jpg) Windows本地:![](https://minio.riun.xyz/riun1/2024-06-29_65J1qsfNNbCCpf3vpH.jpg) --END--
发表评论