Linux上通过mysqldump命令实现自动备份

Linux上通过mysqldump命令实现自动备份

直接上代码

sql 复制代码
#!/bin/bash
mysql_user="root"
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8mb4"

backup_location=/home/mysql/mysql_back/sql
# 是否开始自动删除过期文件,过期时间10天
expire_backup_delete="ON"
expire_days=10

backup_time=$(date +%Y%m%d%H%M)
backup_dir=$backup_location

welcome_msg="Welcome to use MySQL backup tools!"
# 数据库密码文件
mysql_defaults_file="/home/mysql/mysql_back/.my.cnf"

# 检查MySQL实例是否正常运行
mysql_ps=$(ps -ef | grep mysql | wc -l)
mysql_listen=$(netstat -an | grep LISTEN | grep $mysql_port | wc -l)

if [ $mysql_ps -eq 0 ] || [ $mysql_listen -eq 0 ]; then
    echo "ERROR: MySQL is not running! Backup stopped!"
    exit 1
else
    echo $welcome_msg
fi

# 开始备份
/usr/local/mysql/bin/mysqldump --defaults-extra-file=$mysql_defaults_file --add-drop-table -h $mysql_host -P $mysql_port --default-character-set=$mysql_charset --hex-blob dflow_client --single-transaction --routines --events | gzip > $backup_dir/dflow_client-$backup_time.sql.gz
flag=$?
if [ $flag -eq 0 ]; then
    echo "Database backup success. Backup saved to $backup_dir/dflow-$backup_time.sql.gz"
else
    echo "Database backup failed!"
    exit 1
fi

# 删除过期数据
if [ "$expire_backup_delete" == "ON" ] && [ "$backup_location" != "" ]; then
    expired_file_prefix="dflow-$(date -d "-$expire_days days" +%Y%m%d)"
    find $backup_location/ -type f -name "$expired_file_prefix*.sql.gz" -delete
    echo "Expired backup data deleted!"
fi

说明:

文件备份输出目录:backup_location=/home/mysql/mysql_back/sql

数据库信息文件: mysql_defaults_file="/home/mysql/mysql_back/.my.cnf"

my.cnf文件
sql 复制代码
[client]
user=root
password=1223
设置定时任务
powershell 复制代码
#查看任务
crontab -l
#进入任务编辑
crontab -e
#设置凌晨一点执行,并且输出日志
00 01 * * * sh /home/mysql/mysql_back/dflow_bak.sh >> /home/mysql/mysql_back/crontabLog/info.log 2>>/home/mysql/mysql_back/crontabLog/err.log


脚本目录:/home/mysql/mysql_back

日志输出目录:/home/mysql/mysql_back/crontabLog

这个备份一个数据库,备份多个使用这个

powershell 复制代码
/usr/local/mysql/bin/mysqldump --defaults-extra-file=$mysql_defaults_file --add-drop-table -h $mysql_host -P $mysql_port --default-character-set=$mysql_charset --hex-blob --single-transaction --routines --events --databases db1 db2 db3 | gzip > $backup_dir/databases-$backup_time.sql.gz

db1 db2 db3 是数据库名称

相关命令说明: mysqldump指令

相关推荐
Light_It4 分钟前
Linux 内核参数 pci-stub.ids=
linux·kernel
RisunJan39 分钟前
Linux命令-scriptreplay(终端会话回放)
linux·运维·chrome
spencer_tseng1 小时前
[kylin & linux] install docker
linux·docker·kylin
灯澜忆梦2 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
x²+(y-√³x²)²=12 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
柒号华仔2 小时前
「速通Shell」聚砖成墙,Shell函数封装之道
linux·ssh·bash
程序员与背包客_CoderZ2 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_properties_iterate调用流程与实战(六十五)
linux·运维·服务器·音频进阶·pipewire音频进阶
lv__pf3 小时前
spring之整合mybatis【TL spring 12】
mysql·spring·mybatis
jason.zeng@15022075 小时前
linux的top命令
java·linux·服务器