下面是详细讲解如何使用shell脚本实现MySQL数据库双机定时备份的方法的完整攻略。
1. 安装mysql-client软件包
在备份机器上,需要安装mysql-client软件包来连接MySQL主机并执行备份操作。可以使用以下命令在Ubuntu/Debian上安装:
sudo apt-get update
sudo apt-get install mysql-client
2. 创建备份脚本
我们需要编写shell脚本来实现定时备份。在备份机器上创建一个shell脚本,例如backup_mysql.sh
,并将以下内容添加到脚本中:
#!/bin/bash
db_host="192.168.1.1" # MySQL主机IP地址
db_user="username" # MySQL用户名
db_pass="password" # MySQL密码
db_name="database" # 要备份的数据库名称
backup_dir="/mnt/backup/mysql" # 备份文件存放路径
backup_file="${backup_dir}/${db_name}-$(date +%Y%m%d-%H%M%S).sql.gz" # 备份文件名称
# 连接MySQL数据库并执行备份命令
echo "Starting backup ${db_name}..."
ssh ${db_host} "mysqldump -u${db_user} -p${db_pass} --single-transaction --routines ${db_name} | gzip -9 > ${backup_file}"
echo "Backup successfully completed."
在这个脚本中,我们定义了MySQL主机的IP地址、用户名、密码和数据库名称,以及备份文件的存放路径和文件名。我们使用ssh命令连接到MySQL主机,执行mysqldump
命令备份数据库,并使用管道将备份结果压缩成gzip格式,最终将备份文件存放在备份机器的指定目录下。
3. 配置定时任务
为了定时执行备份脚本,我们需要使用cron服务。使用以下命令打开cron编辑器:
crontab -e
在编辑器中添加以下内容:
0 0 * * * /path/to/backup_mysql.sh
这将在每天凌晨12点执行备份脚本。你可以根据自己的需求调整cron表达式来更改备份时间。
4. 添加多个MySQL主机备份支持
如果你需要备份多个MySQL主机,你可以修改脚本并添加多个备份命令。例如,在backup_mysql.sh
脚本中添加第二个MySQL数据库备份的代码:
#!/bin/bash
db_host1="192.168.1.1" # MySQL主机1 IP地址
db_user1="username" # MySQL主机1 用户名
db_pass1="password" # MySQL主机1 密码
db_name1="database1" # 要备份的数据库名称
db_host2="192.168.1.2" # MySQL主机2 IP地址
db_user2="username" # MySQL主机2 用户名
db_pass2="password" # MySQL主机2 密码
db_name2="database2" # 要备份的数据库名称
backup_dir="/mnt/backup/mysql" # 备份文件存放路径
backup_file1="${backup_dir}/${db_name1}-$(date +%Y%m%d-%H%M%S).sql.gz" # MySQL主机1 备份文件名称
backup_file2="${backup_dir}/${db_name2}-$(date +%Y%m%d-%H%M%S).sql.gz" # MySQL主机2 备份文件名称
# 连接MySQL主机1并执行备份命令
echo "Starting backup ${db_name1}..."
ssh ${db_host1} "mysqldump -u${db_user1} -p${db_pass1} --single-transaction --routines ${db_name1} | gzip -9 > ${backup_file1}"
echo "Backup ${db_name1} successfully completed."
# 连接MySQL主机2并执行备份命令
echo "Starting backup ${db_name2}..."
ssh ${db_host2} "mysqldump -u${db_user2} -p${db_pass2} --single-transaction --routines ${db_name2} | gzip -9 > ${backup_file2}"
echo "Backup ${db_name2} successfully completed."
在这个修改后的脚本中,我们定义了两个MySQL主机,db_host1
和db_host2
,以及它们的用户名、密码、要备份的数据库名称和备份文件的名称。我们使用ssh命令连接到每个MySQL主机,分别执行mysqldump
命令备份数据库到备份机器的指定目录下。
请注意,这个修改后的脚本仅提供了一种备份多个MySQL主机的方法。你也可以继续修改和扩展这个脚本,以满足你自己的备份需求。
示例说明
示例1:备份单个MySQL主机
假设我们有一个MySQL主机IP地址为192.168.1.1
,用户名为root
,密码为examplepassword
,要备份的数据库名称为mydatabase
,且备份文件要存放在/mnt/backup/mysql
目录下。
我们可以使用以下命令来创建一个新的备份脚本backup_mysql.sh
,并将以下内容添加到它里面:
#!/bin/bash
db_host="192.168.1.1" # MySQL主机IP地址
db_user="root" # MySQL用户名
db_pass="examplepassword" # MySQL密码
db_name="mydatabase" # 要备份的数据库名称
backup_dir="/mnt/backup/mysql" # 备份文件存放路径
backup_file="${backup_dir}/${db_name}-$(date +%Y%m%d-%H%M%S).sql.gz" # 备份文件名称
# 连接MySQL数据库并执行备份命令
echo "Starting backup ${db_name}..."
ssh ${db_host} "mysqldump -u${db_user} -p${db_pass} --single-transaction --routines ${db_name} | gzip -9 > ${backup_file}"
echo "Backup successfully completed."
保存并退出备份脚本。
接下来,我们需要使用以下命令为备份脚本设置执行权限:
chmod +x backup_mysql.sh
现在,我们可以使用cron服务定期执行备份脚本。使用以下命令打开cron编辑器:
crontab -e
这将打开cron编辑器。在编辑器中添加以下内容来定期执行备份脚本:
0 0 * * * /path/to/backup_mysql.sh
这将在每天凌晨12点执行备份脚本。你可以根据自己的需求调整cron表达式来更改备份时间。
示例2:备份多个MySQL主机
假设我们有两个MySQL主机,分别是192.168.1.1
和192.168.1.2
,用户名分别为root1
和root2
,密码分别为examplepassword1
和examplepassword2
,要备份的数据库分别是mydatabase1
和mydatabase2
,备份文件要存放在/mnt/backup/mysql
目录下。
我们可以使用以下命令来创建一个新的备份脚本backup_mysql.sh
,并将以下内容添加到它里面:
#!/bin/bash
db_host1="192.168.1.1" # MySQL主机1 IP地址
db_user1="root1" # MySQL主机1 用户名
db_pass1="examplepassword1" # MySQL主机1 密码
db_name1="mydatabase1" # 要备份的数据库名称
db_host2="192.168.1.2" # MySQL主机2 IP地址
db_user2="root2" # MySQL主机2 用户名
db_pass2="examplepassword2" # MySQL主机2 密码
db_name2="mydatabase2" # 要备份的数据库名称
backup_dir="/mnt/backup/mysql" # 备份文件存放路径
backup_file1="${backup_dir}/${db_name1}-$(date +%Y%m%d-%H%M%S).sql.gz" # MySQL主机1 备份文件名称
backup_file2="${backup_dir}/${db_name2}-$(date +%Y%m%d-%H%M%S).sql.gz" # MySQL主机2 备份文件名称
# 连接MySQL主机1并执行备份命令
echo "Starting backup ${db_name1}..."
ssh ${db_host1} "mysqldump -u${db_user1} -p${db_pass1} --single-transaction --routines ${db_name1} | gzip -9 > ${backup_file1}"
echo "Backup ${db_name1} successfully completed."
# 连接MySQL主机2并执行备份命令
echo "Starting backup ${db_name2}..."
ssh ${db_host2} "mysqldump -u${db_user2} -p${db_pass2} --single-transaction --routines ${db_name2} | gzip -9 > ${backup_file2}"
echo "Backup ${db_name2} successfully completed."
保存并退出备份脚本。
现在,我们可以按照上述步骤来设置权限并定期执行备份脚本。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shell脚本实现mysql数据库双机定时备份的方法 - Python技术站