Title

将mysql数据库定时备份到另一台服务器

1. 导出数据到本地

mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql

当MySQL运行在Docker中时

docker exec -it mysql mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql

2. 将数据拷贝到另一台服务器(scp)

这里用 S 指代source服务器,T 指代target服务器。

首先,获取 S 的公钥

ssh-keygen -t rsa

公钥文件 id_rsa.pub 在/root/.ssh目录下,然后将 S 的公钥复制到 T 的/root/.ssh/authorized_keys文件中,之后就可以免密进行scp

scp /home/数据库名.sql root@T的IP地址:/home/数据库名.sql

3. 将以上两步编写为sh脚本

编写脚本时候尽量使用绝对路径,使用相对路径可能会出现问题

#!/bin/bash
source /etc/profile


# 备份XXX数据库
mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql
scp /home/数据库名.sql root@T的IP地址:/home/数据库名.sql

给sh脚本添加执行权限

chmod u+x XXXX.sh
# 或者
chmod 777 XXXX.sh

4. 添加crontab定时任务

编辑配置/etc/crontab文件,这里一定要看清注释,网上找的cron表达式放进来会有语法错误,造成crontab不生效。正确写法:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

*/1 * * * * root bash /usr/sbin/XXXX.sh

Cron 表达式包含 5 个位置,中间用空格分隔。其标准语法如下:

[minute] [hour] [day of month] [month] [day of week]

  • [minute] 表示分钟,取值范围 [0, 59]
  • [hour] 表示小时,取值范围 [0, 23]
  • [day of month] 表示日期,取值范围 [0, 31]
  • [month] 表示月份,取值范围 [1, 12],也可以用名称简写(Jan - Dec)
  • [day of week] 表示星期,取值范围 [0, 6],也可以用名称简写(Sun - Sat)

每个位置均可以使用如下模式:

  • ,:表示值的列表,例如 1,3 表示当该位置为 1 和 3 时各执行一次
  • -:表示值的范围,例如 1-3 表示当该位置为 1、2 和 3 时各执行一次
  • /:表示值的步进,例如 */2 表示该位置每 2 个单位执行一次,又如 1-9/2 表示该位置为 1、3、5、7 和 9 时各执行一次;步进默认为 1
  • *:表示该位置为任意值时都会执行,等价于 */1

经典样例:
* * * * *:每分钟执行一次
0 * * * * :每小时的整点执行一次
0 0 * * *:每天 0 点执行一次
0 0 1 * *:每月 1 号 0 点执行一次
0 0 1 1 *:每年 1 月 1 日 0 点执行一次
0 0 * * 0:每星期日的 0 点执行一次

其他样例:
*/3 * * * *:每 3 分钟执行一次
0 8 * * 1-5:每个工作日的早上 8 点执行一次
0 8 * * 1,5:每周一和周五的早上 8 点各执行一次
0 9-15 * * *:每天 9 点 - 15 点每个整点执行一次
0 0 1 */3 *:每个季度的第 1 天执行一次

sh文件可以放在任意路径,不必放在/usr/sbin

重启crontab服务 systemctl restart crond.service

观察服务状态 systemctl status crond.service

查看服务日志 tail -f /var/log/cron

出现类似红框内记录即为执行成功;Ubuntu下需要设置日志开启

设置定时任务开机自启 systemctl enable crond.service

5. crontab命令

# 查看服务状态
systemctl status crond
# 启动
systemctl start crond
# 停止
systemctl stop crond
# 重启
systemctl restart crond
# 重新加载
systemctl reload crond
# 开机启动crontab服务
systemctl start crond

参考链接:
https://blog.csdn.net/weixin_41962502/article/details/126442005
https://juejin.cn/post/7133811012037738503

posted @ 2022-09-02 20:52  快乐小洋人  阅读(827)  评论(0)    收藏  举报