用shell脚本,批量备份MySQL中所有数据库,并批量还原

✍️Auth:star皆空       Date:2024/09/14       Cat:MySQL       👁️:25 次浏览

1,环境介绍

生产环境通常只有一个数据库,但是其他环境,测试可能不止一个数据库。需要换数据库时,就需要一个一个的备份,一两个还好,多的话就有点繁琐。

如果说直接备份整个数据库,可能将原来的系统数据库也备份过去了,而用不需要原来的系统数据库(’information_schema’, ‘mysql’, ‘performance_schema’, ‘sys’),这是用脚本就方便多了。

2,批量备份数据库脚本

#!/bin/bash

# MySQL 连接配置
USER="root"
PASSWORD="qwe123456"
HOST="192.168.200.101"
#备份路径
OUTPUT_DIR="/home/ubuntu/backup"

# 获取非系统数据库的列表
DATABASES=$(mysql -u $USER -p$PASSWORD -h $HOST -e "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');" -s --skip-column-names)

# 备份每个数据库
for DB in $DATABASES; do
    echo "Backing up database: $DB"
    mysqldump -u $USER -p$PASSWORD -h $HOST --set-gtid-purged=OFF --databases $DB > "$OUTPUT_DIR/$DB.sql"
done

echo "Backup completed!

上面备份命令,按需求添加参数,如这里用的–set-gtid-purged=OFF 不需要原来的GTID(全局事务标识符),我这里如果不加这个参数,还原报错。

ERROR 3546 (HY000) at line 24: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED

所以加了–set-gtid-purged=OFF参数就行了。

mysqldump -u $USER -p$PASSWORD -h $HOST --set-gtid-purged=OFF --databases

3,还原数据库脚本

还原数据库,第一步,还是需要在新收据开手动创建数据库。

CREATE DATABASE your_database_name;

还原数据库脚本

#!/bin/bash

# MySQL 连接配置
USER="your_username"
PASSWORD="your_password"
HOST="localhost"
#备份sql的文件路径
INPUT_DIR="/path/to/backup/"

# 遍历备份目录中的所有 .sql 文件并导入
for FILE in $INPUT_DIR/*.sql; do
    DB_NAME=$(basename "$FILE" .sql)
    echo "Restoring database: $DB_NAME from $FILE"
    mysql -u $USER -p$PASSWORD -h $HOST $DB_NAME < "$FILE"
done

echo "Restoration completed!"

以上还原命令,也可以根据实际情况来修改参数

mysql -u $USER -p$PASSWORD -h $HOST $DB_NAME
打赏作者

发表评论