主页 > 手机  > 

shell脚本备份mysql数据库和库下表

shell脚本备份mysql数据库和库下表

目录

注意:

一.脚本内容

二.执行效果

三.创建定时任务


注意: 以下为对mysql5.7.42版本数据库备份shell脚本参考运行备份的机器请确认mysqldump版本>5.7,否则备份参数--set-gtid-purged=OFF无效,考虑到一般数据库节点和备份节点不为同一节点,以下链接为mysql5.7.43的rpm安装包,解压后"yum localinstall -y mysql-community* 即可"

通过网盘分享的文件:mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar 链接: pan.baidu /s/1C1dK_zeS0-p7ePih1ff4tg?pwd=cer9 提取码: cer9

该脚本目前是对于整库、库下各表都做了备份,若不需要对各表进行备份,去除关于备表的for循环即可。 一.脚本内容 #!/bin/bash # 定义连接mysql的用户、密码、地址、端口 mysql_user="root" mysql_pass="SLBmysql2025" mysql_host="192.168.2.199" mysql_port="20307" # 定义排除数据库变量 exdbname='information_schema|performance_schema|sys|mysql' date="$(date +"%Y-%m-%d")" # 定义备份路径变量 bak_path="/data/mysql/back" # 定义日志保留天数 retain_days=7 # 定义备份参数 dump_opts='--set-gtid-purged=OFF --single-transaction --no-autocommit' # 检查备份路径是否存在,不存在则创建 if [ ! -d "$bak_path" ]; then mkdir -p "$bak_path" fi # 获取数据库列表,排除指定数据库 #db_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -e 'SHOW DATABASES;' 2>/dev/null | sed '1d' | grep -Ev "^($exdbname)$") db_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -Bse 'SHOW DATABASES;' 2>/dev/null | grep -Ev "^($exdbname)$") # 检查是否获取到数据库列表 if [ -z "$db_list" ]; then echo "未获取到有效的数据库列表,请检查 MySQL 连接和权限。" exit 1 fi # 对每个数据库进行操作 for db in $db_list; do # 创建数据库对应的备份目录 db_backup_dir="$bak_path/$date/$db" SIZE=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port --silent --skip-column-names -e "SELECT ROUND(SUM(data_length) / 1024 / 1024, 0) FROM information_schema.TABLES WHERE table_schema=\"$db\";") if [ ! -d "$db_backup_dir" ]; then mkdir -p "$db_backup_dir" fi # 备份整个数据库 mysqldump -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port $dump_opts -B "$db" 2>/dev/null | gzip > "$db_backup_dir/${db}_$(date +%F).sql.gz" if [ $? -ne 0 ]; then echo "备份数据库 $db 失败。" else echo "数据库 $db 备份成功,存放路径 $db_backup_dir/${db}_$(date +%F).sql.gz,大小为 $SIZE M" fi # 获取数据库中的表列表 tb_list=$(mysql -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port -N -e "SHOW TABLES FROM $db" 2>/dev/null) # 检查是否获取到表列表 if [ -z "$tb_list" ]; then echo "未获取到数据库 $db 中的表列表。" continue fi # 对每个表进行操作 for tb in $tb_list; do # 备份单个表 mysqldump -u$mysql_user -p$mysql_pass -h$mysql_host -P$mysql_port $dump_opts "$db" "$tb" 2>/dev/null | gzip > "$db_backup_dir/${db}_${tb}_$(date +%F).sql.gz" if [ $? -ne 0 ]; then echo "备份表 $db.$tb 失败。" else echo "表 $db.$tb 备份成功,存放路径 $db_backup_dir/${db}_${tb}_$(date +%F).sql.gz" fi done done find $bak_path -mtime +$retain_days -exec rm -f {} \; 二.执行效果 [root@master01 mysql]# bash sh/backup.sh mysql: [Warning] Using a password on the command line interface can be insecure. 数据库 slb 备份成功,存放路径 /data/mysql/back/2025-02-16/slb/slb_2025-02-16.sql.gz,大小为 0 M 表 slb.students 备份成功,存放路径 /data/mysql/back/2025-02-16/slb/slb_students_2025-02-16.sql.gz mysql: [Warning] Using a password on the command line interface can be insecure. 数据库 test 备份成功,存放路径 /data/mysql/back/2025-02-16/test/test_2025-02-16.sql.gz,大小为 0 M 表 test.employees 备份成功,存放路径 /data/mysql/back/2025-02-16/test/test_employees_2025-02-16.sql.gz 三.创建定时任务 [root@master01 sh]# tail -1 /etc/crontab 0 2 * * * root /usr/bin/bash /data/mysql/sh/mysql_backup.sh
标签:

shell脚本备份mysql数据库和库下表由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“shell脚本备份mysql数据库和库下表