返回列表 发帖

CentOS6使用Python3脚本备份站点(Zabbix)+crontab计划任务

笺注:这是在 CentOS6.9编译安装Zabbix4.4.5 的基础上进行的。


登录MySQL:
mysql -u"root" -p"888"
图片1.png
2022-2-20 21:32



查看所有数据库用户及其主机信息:
select user,host from mysql.user;
图片2.png
2022-2-20 21:32



查看Zabbix所使用的数据库用户的信息及其权限:
mysql> show grants for zabbix@localhost;
+---------------------------------------------------------------------------------------------------------------+
| Grants for zabbix@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY PASSWORD '*DEEF4D7D88CD046ECA02A80393B7780A63E7E789' |
| GRANT ALL PRIVILEGES ON `zabbix`.* TO 'zabbix'@'localhost'                                                    |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.05 sec)

注释:数据库用户zabbix@localhost其实已经有备份库zabbix的权限了。



再创建一个数据库用户zhuohua@localhost,并赋权:
mysql> grant all on *.* to zhuohua@localhost identified by '168';
Query OK, 0 rows affected (0.02 sec)


查看数据库用户zhuohua@localhost的权限:
mysql> show grants for zhuohua@localhost;
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for zhuohua@localhost                                                                                            |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zhuohua'@'localhost' IDENTIFIED BY PASSWORD '*242E46A1E8D30FE06F7CE37B55BFC25BA981D70C' |
+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

注释:数据库用户zhuohua@localhost已经有完全管理库zabbix的权限了。



再次查看所有数据库用户及其主机信息:
图片3.png
2022-2-20 21:33



显示所有的库:
show databases;
图片4.png
2022-2-20 21:34



数据库的备份命令:
[root@Zabbix_server_01 ~]# which mysqldump
/usr/bin/mysqldump

Zabbix的站点目录:
[root@Zabbix_server_01 ~]# cd /home/wwwroot/
[root@Zabbix_server_01 wwwroot]# ls
default  zabbix.zhuohua.store

要先创建备份文件存放的目录:
[root@Zabbix_server_01 ~]# mkdir -p /home/backup/



备份脚本“backup_zabbix.py”的内容:
[root@Zabbix_server_01 ~]# cat backup_zabbix.py
#coding=utf-8
import os
import datetime

dt = datetime.datetime.now()

def func1():

        try:
                os.popen("/usr/bin/mysqldump -u'zhuohua' -p'168' zabbix > /zabbix.sql").read() #使用数据库用户zhuohua@localhost进行备份
               
                path1 = "/zabbix.sql"
                path2 = "/home/wwwroot/zabbix_" + dt.strftime('%Y%m%d') + ".sql"
                os.rename(path1,path2) #重命名文件

        except:
                print("数据库备份失败。")
               
        else:
                print("数据库备份成功。")

def func2():

        try:
                os.chdir("/home/wwwroot/") #切换工作目录               
                os.popen("tar -cjf /home/backup/zabbix.zhuohua.store.tar.bz2 zabbix.zhuohua.store *.sql").read() # 把站点目录和数据库文件都压缩到一个文件里
                 
                os.chdir("/home/backup/")
                path1 = "zabbix.zhuohua.store.tar.bz2"
                path2 = "zabbix.zhuohua.store_" + dt.strftime('%Y%m%d_%H%M%S') + ".tar.bz2"
               
                os.rename(path1,path2)
               
        except:
                print("站点目录备份失败。")
               
        else:
                print("站点目录备份成功。")
               
def func3():
        db_today = "/home/wwwroot/zabbix_" + dt.strftime('%Y%m%d') + ".sql"
        os.remove(db_today) #删除文件

if __name__ == '__main__':
        func1() #备份站点数据库zabbix
        func2() #备份站点目录
        func3() #删除当天的临时数据库文件
       

设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x backup_zabbix.py


脚本运行的效果:(备份Zabbix)
[root@Zabbix_server_01 ~]# python3 backup_zabbix.py
数据库备份成功。
站点目录备份成功。

[root@Zabbix_server_01 ~]#


备份成功:
[root@Zabbix_server_01 ~]# cd /home/backup/
[root@Zabbix_server_01 backup]# ls
zabbix.zhuohua.store_20200620_193120.tar.bz2
[root@Zabbix_server_01 backup]#
[root@Zabbix_server_01 backup]# ls -lh *.bz2
-rw-r--r-- 1 root root 14M 6月  20 19:31 zabbix.zhuohua.store_20200620_193120.tar.bz2
[root@Zabbix_server_01 backup]#



解压压缩文件到当前目录:
[root@Zabbix_server_01 backup]# tar -jxf zabbix.zhuohua.store_20200620_193120.tar.bz2
[root@Zabbix_server_01 backup]#


解压出来的站点目录和数据库文件:
[root@Zabbix_server_01 backup]# ls |grep -v *.bz2
zabbix_20200620.sql
zabbix.zhuohua.store

[root@Zabbix_server_01 backup]#
[root@Zabbix_server_01 backup]# ll |grep -v *.bz2
总用量 17180
-rw-r--r--  1 root root  3803039 6月  20 19:31 zabbix_20200620.sql
drwxr-xr-x 10 www  www      4096 2月   8 11:08 zabbix.zhuohua.store
[root@Zabbix_server_01 backup]#





######

还原Zabbix

删除旧的站点目录:
[root@Zabbix_server_01 ~]# rm -rf /home/wwwroot/zabbix.zhuohua.store


还原站点目录:
[root@Zabbix_server_01 ~]# cd /home/backup/
[root@Zabbix_server_01 backup]# tar -jxf zabbix.zhuohua.store_20200620_193120.tar.bz2 -C /home/wwwroot/


查看还原后站点目录:(站点目录还原成功;截图有省略)
[root@Zabbix_server_01 ~]# cd /home/wwwroot/zabbix.zhuohua.store
[root@Zabbix_server_01 zabbix.zhuohua.store]# ls
图片5.png
2022-2-20 21:38






还原站点数据库:

mysql> drop database zabbix;
Query OK, 149 rows affected (0.41 sec)

mysql> create database zabbix character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> use zabbix;
Database changed

mysql> source /home/wwwroot/zabbix_20200620.sql

站点数据库还原成功:
图片6.png
2022-2-20 21:39


笺注:实验中,Zabbix的备份和还原都是正常的。





############
############

Zabbix的数据库配置文件:
[root@Zabbix_server_01 ~]# find / -name "zabbix.conf.php"
/home/wwwroot/zabbix.zhuohua.store/conf/zabbix.conf.php
[root@Zabbix_server_01 ~]#

图片7.png
2022-2-20 21:40


注释:数据库用户的信息要与Zabbix的数据库配置文件的信息一致。


更改Zabbix的数据库配置文件里的数据库用户信息:(使用数据库用户zhuohua@localhost,更改即生效)
图片8.png
2022-2-20 21:40






############
############

使用crontab周期性计划任务运行Python3脚本,实现站点的自动备份


编辑crontab计划任务:
[root@Zabbix_server_01 ~]# crontab -e
-bash: crontab: command not found

解决方法:
[root@Zabbix_server_01 ~]# yum -y install vixie-cron


[root@Zabbix_server_01 ~]# which crontab
/usr/bin/crontab

启动crond:
[root@Zabbix_server_01 ~]# service crond start
正在启动 crond:[确定]

确认crond在运行中:
[root@Zabbix_server_01 ~]# ps -ef |grep crond |grep -v grep
root      17383      1  0 20:26 ?        00:00:00 crond

确认开机会自动启用crond:
[root@Zabbix_server_01 ~]# chkconfig --list crond
crond           0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭


给系统用户root创建一个crontab计划任务:( 6月20日23时18分自动运行脚本“backup_zabbix.py”;用户登不登录,任务都会执行 )
[root@Zabbix_server_01 ~]# crontab -e -u root
追加:
18 23 20 6 * /usr/local/bin/python3 /root/backup_zabbix.py


查看系统用户root的crontab计划任务:
[root@Zabbix_server_01 ~]# whoami
root
[root@Zabbix_server_01 ~]# crontab -l
18 23 20 6 * /usr/local/bin/python3 /root/backup_zabbix.py
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# crontab -l -u root
18 23 20 6 * /usr/local/bin/python3 /root/backup_zabbix.py
[root@Zabbix_server_01 ~]#


使用crontab计划任务备份出来的文件:(三种显示方式)
[root@Zabbix_server_01 backup]# pwd
/home/backup
[root@Zabbix_server_01 backup]# ll *.bz2
-rw-r--r-- 1 root root 13780413 6月  20 19:31 zabbix.zhuohua.store_20200620_193120.tar.bz2
-rw-r--r-- 1 root root 13781001 6月  20 23:18 zabbix.zhuohua.store_20200620_231801.tar.bz2

[root@Zabbix_server_01 backup]# ls -lh *.bz2
-rw-r--r-- 1 root root 14M 6月  20 19:31 zabbix.zhuohua.store_20200620_193120.tar.bz2
-rw-r--r-- 1 root root 14M 6月  20 23:18 zabbix.zhuohua.store_20200620_231801.tar.bz2

[root@Zabbix_server_01 backup]# du -ah *.bz2
14M     ./zabbix.zhuohua.store_20200620_193120.tar.bz2
14M     ./zabbix.zhuohua.store_20200620_231801.tar.bz2
[root@Zabbix_server_01 backup]#





######

使用crontab周期性计划任务运行Python3脚本,实现星期六那天,每隔2分钟就自动删除一次目录/home/backup/下的.bz2文件


再给系统用户root创建一个crontab计划任务:( 星期六那天,每隔2分钟就运行一次脚本“dd.py”;用户登不登录,任务都会执行)
[root@Zabbix_server_01 ~]# crontab -e -u root
追加:
*/2 * * * 6 /usr/local/bin/python3 /root/dd.py


再次查看系统用户root的crontab计划任务:
[root@Zabbix_server_01 ~]# crontab -l -u root
18 23 20 6 * /usr/local/bin/python3 /root/backup_zabbix.py
*/2 * * * 6 /usr/local/bin/python3 /root/dd.py


脚本“dd.py”的内容:(删除目录/home/backup/下的.bz2文件)
[root@Zabbix_server_01 ~]# cat dd.py
#coding=utf-8
import os

String_1 = "rm -r /home/backup/*.bz2"

Key_1 = os.popen(String_1).read()
print(Key_1)





######

清空系统用户root的所有crontab计划任务:
[root@Zabbix_server_01 ~]# crontab -r -u root
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# crontab -l -u root
no crontab for root




       
相关文章:
Linux常用命令(二)

Linux下MySQL的备份和还原
备份+还原Zabbix

CentOS6安装Python3
Python3调用Linux命令

Windows2012R2_UPUPW_网站的备份和还原(使用Python3脚本)

返回列表