Linux实现Mysql定时自动化备份(并传输到指定服务器)
创始人
2025-01-18 22:03:10
0

一、脚本实现

1.在指定目录下创建一个执行文件mysql_db_back.sh

touch  mysql_db_back.sh

2.将以下脚本复制到文件中
#!/bin/bash DATE=$(date +%F_%H%M%S) HOST=localhost PORT=3306 DB=test USER=root PASS='123456' BACKUP_DIR=/data/db_backup SQL_FILE=${DB}_full_$DATE.sql BAK_FILE=${DB}_full_$DATE.zip cd $BACKUP_DIR if /usr/local/mysql-8.0/bin/mysqldump -h$HOST -P$PORT  -u$USER -p$PASS -B $DB > $SQL_FILE; then zip $BAK_FILE $SQL_FILE && rm -f $SQL_FILE fi  sshpass -p 'abc123456' rsync -avz $BAK_FILE root@10.7.9.35:/data/mysql_bak_db  rm -f $BAK_FILE
3.说明

1). `#!/bin/bash`

       * 这是一个shebang,它告诉系统该脚本应由哪个解释器执行。在这里,它指定了bash作为解释器。

2). `DATE=$(date +%F_%H-%M-%S)`

       * 使用`date`命令获取当前的日期和时间,并将其格式化为`YYYY-MM-DD_HH-MM-SS`的形式。然后,这个值被存储在`DATE`变量中。

3). `HOST=localhost`

       * 设置MySQL数据库服务器的IP地址为`localhost`。

4). `PORT=3306`

       * 设置MySQL数据库服务器的端口号为`3306`。

5). `DB=test`

       * 设置要备份的数据库的名称为`test`。

6). `USER=root`

       * 设置用于连接MySQL数据库的用户名为`root`。

7). `PASS=123456`

       * 设置用于连接MySQL数据库的密码为`123456`,这里最好使用单引号框起来,避免因关键字导致密码解析错误的问题。

8). `BACKUP_DIR=/data/db_backup`

       * 设置备份文件的存储目录为`/home/quinn/db_backup`。

9). `SQL_FILE=${DB}_full_$DATE.sql`

       * 设置备份的SQL文件的名称,其格式为`数据库名_full_日期时间.sql`。

10). `BAK_FILE=${DB}_full_$DATE.zip`

       * 设置压缩后的备份文件的名称,其格式为`数据库名_full_日期时间.zip`。

11). `cd $BACKUP_DIR`

       * 切换到备份文件的存储目录。

12). `if mysqldump ...`

        即:if mysqldump -h$HOST -u$USER -p$PASS --single-transaction --routines --triggers -B $DB > $SQL_FILE; then

        mysqldump 是MySQL数据库的一个实用工具,用于从MySQL数据库中导出数据。

        -h$HOST 指定了数据库服务器的主机名或IP地址,这里使用了之前定义的变量$HOST。

        -P$PORT 指定了数据库的端口号,这里使用了之前定义的变量$PORT。

        u$USER 指定了连接数据库时使用的用户名,这里使用了之前定义的变量$USER。

        -p$PASS 指定了连接数据库时使用的密码,这里使用了之前定义的变量$PASS。

        -B $DB 指定了要备份的数据库名,这里使用了之前定义的变量$DB。

        > $SQL_FILE 将mysqldump的输出重定向到之前定义的SQL文件$SQL_FILE中。

        如果mysqldump命令成功执行(即没有错误并成功创建了SQL文件),则执行then后面的代码块。

13). zip $BAK_FILE $SQL_FILE && rm -f $SQL_FILE

        zip $BAK_FILE $SQL_FILE 使用zip命令将SQL文件$SQL_FILE压缩为ZIP文件$BAK_FILE。

        && 是一个shell中的逻辑操作符,它表示只有当左边的命令(在这里是zip命令)成功执行时,才会执行右边的命令。

        rm -f $SQL_FILE 删除原始的SQL文件。-f选项表示强制删除,即使文件是只读的也不会提示。

        这行代码块尝试使用mysqldump备份数据库,并将输出保存到SQL文件中。如果备份成功,则将该SQL文件压缩为ZIP文件,并随后删除原始的SQL文件。

14)sshpass -p 'abc123456'  rsync -avz $BAK_FILE root@10.7.9.35:/data/mysql_bak_db

        sshpass 自动填写密码的工具,需要安装

yum install sshpass

        'abc123456'为指定传输到服务器密码

         rsyncscp 更稳定,本次使用 rsync 同步文件

  • -a: 表示以递归方式传输文件,并保持文件属性。
  • -v: 显示传输详细信息。
  • -z: 在传输过程中进行压缩,可以减少传输时间和带宽

        $BAK_FILE root@10.7.9.35:/data/mysql_bak_db,$BAK_FILE为生成的zip备份文件,将其传输到10.7.9.35这台服务器的/data/mysql_bak_db下,使用root账户。替换为 账号@传输服务器ip:传输地址

15)rm -f $BAK_FILE

删除本机生成的备份压缩包,因为已经传输到另外一台服务器上,无需再次保存。

4.给予执行权限

chmod 755 sql_db_back.sh

二、定时任务

输入命令 crontab -e 进入 crontab 编辑器

crontab -e

设置每天2点备份

0 2 * * *  脚本绝对位置

然后保存即可!!!

相关内容

热门资讯

这一现象值得深思!wepoke... 这一现象值得深思!wepoker怎么下载游戏,hhpoker俱乐部是干嘛的,原来真的有挂(有挂细节)...
刚刚!智星菠萝透视,拱趴大菠萝... 刚刚!智星菠萝透视,拱趴大菠萝挂,果然是有挂(有挂规律)1)拱趴大菠萝挂辅助插件:进一步探索拱趴大菠...
这一问题亟待解决!wepoke... 这一问题亟待解决!wepoker怎么挂底牌,wpk辅助购买,真是存在有挂(有挂教学)1、wepoke...
备受关注的!哈糖大菠萝辅助器,... 备受关注的!哈糖大菠萝辅助器,德扑圈透视挂,确实是有挂(有挂教程)1、让任何用户在无需哈糖大菠萝辅助...
围绕透视问题!hhpoker可... 围绕透视问题!hhpoker可以控制吗,约局吧开挂,竟然存在有挂(有挂分享)所有人都在同一条线上,像...
插件辅助挂!pokernow辅... 插件辅助挂!pokernow辅助控制,wepoker好友助力码,果然是真的有挂(证实有挂)1)wep...
黑科技辅助挂!uupoker有... 黑科技辅助挂!uupoker有透视吗,wepokerplus外挂,真是是真的有挂(有挂细节)1、点击...
网友热议!德州之星扫描器,we... 网友热议!德州之星扫描器,wepoker俱乐部辅助,都是是真的有挂(揭秘有挂)1.wepoker俱乐...
黑科技辅助挂!红龙poker有... 黑科技辅助挂!红龙poker有辅助吗,wepoker破解工具,好像确实有挂(有挂辅助)1、在红龙po...
2026版攻略!aapoker... 2026版攻略!aapoker发牌逻辑,德普之星私人局辅助器,一贯真的是有挂(真的有挂)1、完成德普...