Linux实现Mysql定时自动化备份(并传输到指定服务器)
一、脚本实现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'为指定传输到服务器密码
rsync 比 scp 更稳固,本次利用 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 * * * 脚本绝对位置
然后保存即可!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]