- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
1、遇到的问题 。
我们使用过mysqldump都知道,使用该命令后,需要我们手动输入 mysql的密码,那么我们就不能够直接在crontab中使用mysqldump实现周期备份。其实我们可以使用expect脚本自动输入密码,从而实现真正的周期备份。如果你不知道什么是expect,建议先请看这篇文章:http://www.zzvips.com/article/141303.html 。
。
2、思路 。
思路如下:
。
3、代码 。
3.1、单机冷备份 。
(1)mysqldump的shell脚本 backup.sh
1
2
3
4
5
6
7
|
#!/bin/bash
mysql_username=$1
backup_databases=$2
backup_path=$3
mysqldump -u ${mysql_username} -p --databases ${backup_databases} > ${backup_path}
|
(2)执行mysqldump的expect脚本,能帮助我们自动输入mysql代码 single_cold_backup_service.exp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/expect
set
timeout 5
#设置本机信息
set
mysql_username [lindex $argv 0]
set
backup_database [lindex $argv 1]
set
backup_path [lindex $argv 2]
#utils路径
set
utils_path
/home/hadoop/backup_script/utils
spawn
bash
${utils_path}
/backup
.sh ${mysql_username} ${backup_database} ${backup_path}
expect {
"*assword*"
{send
"nimabidecao1 "
}
#输入密码
}
expect eof
|
(3)驱动脚本,执行expect,这里可以传入需要的参数 single_cold_backup_service_driver.sh:
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
#这里的数据就可以写死了
mysql_username=root
backup_databases=school
backup_path=$HOME
/backup_data/
${backup_databases}.sql
#运行expect脚本
expect $HOME
/backup_script/single_cold_backup/single_cold_backup_service
.exp ${mysql_username} ${backup_databases} ${backup_path}
|
这里一定要十分注意自己的路径,强烈建议使用绝对路径来执行 。
。
(4)使用crontab周期执行驱动脚本 进入crontab编辑:crontab -e 输入如下内容:
1
|
0 9 * * 1
bash
/home/hadoop/backup_script/single_cold_backup/single_cold_backup_driver
.sh
|
意思为:每周1早上9点执行一次备份 若你想确定自己想要的时间,可以到这个网址:https://crontab-generator.org/ 去点选自己想要的时间 。
3.2、双机冷备份 。
(1)复制远程文件,用于拷贝本地机的mysql备份文件 scp.sh
1
2
3
4
5
6
7
8
|
#!/bin/bash
local_backup_path=$1
another_user=$2
another_ip=$3
another_backup_path=$4
scp
${local_backup_path} ${another_user}@${another_ip}:${another_backup_path}
|
(2)执行mysqldump的expect脚本,能帮助我们自动输入mysql代码 double_cold_backup_service.exp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#!/usr/bin/expect
set
timeout 5
#主机信息
set
mysql_username [lindex $argv 0]
set
backup_database [lindex $argv 1]
set
backup_path [lindex $argv 2]
#从机信息
set
slave_user [lindex $argv 3]
set
slave_ip [lindex $argv 4]
set
slave_backup_path [lindex $argv 5]
#utils路径
set
utils_path
/home/hadoop/backup_script/utils
spawn
bash
${utils_path}
/backup
.sh ${mysql_username} ${backup_database} ${backup_path}
expect {
"*assword*"
{send
"nimabidecao1 "
}
#输入密码
}
spawn
bash
${utils_path}
/scp
.sh ${backup_path} ${slave_user} ${slave_ip} ${slave_backup_path}
expect {
"*assword*"
{send
"nimabidecao1 "
}
#输入密码
}
expect eof
|
(3)驱动脚本,执行expect,这里可以传入需要的参数 double_cold_backup_service_driver.sh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash
#本机信息
mysql_username=root
backup_databases=school
backup_path=$HOME
/backup_data/
${backup_databases}.sql
#从机信息
slave_user=meizhaowei
slave_ip=172.20.10.14
slave_backup_path=backup_data
/doule_cold_backup_data/
${backup_databases}.sql
#执行写绝对路径
expect $HOME
/backup_script/double_cold_backup/double_cold_backup_service
.exp ${mysql_username} ${backup_databases} ${backup_path} ${slave_user} ${slave_ip} ${slave_backup_path}
|
(4)使用crontab周期执行驱动脚本 。
1
|
0 9 * * 1
bash
/home/hadoop/backup_script/double_cold_backup/double_cold_backup_driver
.sh
|
意思是:每周1早上9点执行一次备份 。
到此这篇关于linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解的文章就介绍到这了,更多相关mysql周期冷备份内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/lendsomething/article/details/109134810 。
最后此篇关于linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解的文章就讲到这里了,如果你想了解更多关于linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 CentO 上以 root 身份登录。 如果我这样做 crontab -e ,我有一个空文件。 如果我这样做 cat /etc/crontab ,我有一个包含命令的文件。 这怎么可能? 任何的想
我有以下 cron 作业命令: * * * * * /usr/bin/lynx -term=vt100 http://abc.com/dir1/di2/script.php?action=add&co
我最近要在crontab中执行docker-compose命令时遇到问题。 我有一个docker-compose YAML文件,该文件定义了我需要的所有服务,例如“docker-compose.yml
如果您有一个每 5 分钟运行一次的 crontab 作业,您如何确保它永远不会超限?也就是说,您如何确保 crontab 作业的前一次迭代在下一次运行之前完成? 最佳答案 在脚本的开头,在文件系统的某
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
或许还有另一种解决方案。我构建了一个网络应用程序,需要 5-10 个 cron 来保持它的维护和不同的间隔。我想将 crontab checkin 版本控制,以便轻松部署到其他服务器。 我希望能够在/
我有一个带两个参数的命令。 当我手动运行命令时,我是这样做的: cmd -i xyz.dat hit enter enter password in the prompt hit enter conf
我在树莓派上,使用 rasbpian ! 我正在尝试安装一个新的 crontab 来执行基本脚本。这将使用 vlc 从网络摄像头拍摄一张照片。 我想每分钟都这样做,但我无法编辑我的 crontab 用
我想通过在我的服务器中执行此操作来添加一个 crontab 计划: echo "30 * * * */home/my/var/dir/to/script/var/etc/etc/etc/"> cron
将文本通过管道传输到 crontab 与 crontab 之间有什么区别 - (我认为确认它使用标准输入)? 在我的 Linux 机器上,执行 cat "1 0 0 0 0 something" |
我有一个 crontab 设置为 execute the 0th minute of every 3rd hour every day crontab 的语法是: 0 */3 * * * perl t
我使用 GENTOO 发行版。 crontab -e 35 12 * * * root php5 /home/www/cron.php 当我手动运行时: php5 php5 /home/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
假设我有一个 crontab,它每 20 运行一次分钟,我有一个可以变化的小时范围,所以让我们说 a-b ,在一个例子中可能看起来像 */20 5-23 * * * /usr/bin/cool_pro
我在 Win7 中使用的是 cygwin 版本 2.3.1(0.291/5/3),并且已经尝试了几个小时让我的 crontab 计划作业运行。在我看来,可能成为问题的是我的 cron 进程和我的 cr
我想知道如果我将 crontab 添加到 /etc/crontab 或 crontab -e 是否重要? 我有一个 Ubuntu 17 和 Debian 9 VM 正在运行,我不知道哪个是正确的地方。
我尝试了以下命令,crontab 停止运行任何作业:echo "@reboot/bin/echo 'test' >/home/user/test.sh"|定时任务- 在 Linux 中将作业添加到 c
我想寻求有关 python-crontab 模块的帮助。我有一个简单的 shell 脚本,可以使用 curl 命令录制互联网广播流。我想通过在 crontab 中安排录制来提前安排录制。我找到了允许我
我将在这里扩展我的问题: 当包括 root 在内的每个用户都有自己的 crontab 时,系统 crontab 的需求是什么?系统 crontab 的存在似乎重复了功能。系统 crontab 是否更像
我想在我的 Capistrano 部署文件中包含 cron 任务,而不是使用以下命令手动编辑 crontab 文件: crontab -e [username] 是否有我可以在 Capistrano
我是一名优秀的程序员,十分优秀!