ينسخ هذا السكربت احتياطياً كل قواعد بيانات المستخدم على خادم MySQL/MariaDB، بملف مضغوط واحد لكل قاعدة. يقرأ بيانات الاعتماد من ملف خيارات MySQL (الافتراضي ~/.my.cnf) عبر --defaults-extra-file، فلا تظهر كلمة المرور أبداً في سطر الأوامر أو في مخرجات ps. بعد التحقق، يستعلم عبر SHOW DATABASES ويستبعد المخططات الداخلية مثل information_schema وmysql. ولكل قاعدة متبقية يشغّل mysqldump مع --single-transaction للحصول على لقطة متسقة دون أقفال لجداول InnoDB، إضافة إلى --routines و--triggers و--events لتضمين الشيفرة المخزّنة، ثم يمرّر المخرجات مباشرة عبر gzip. شغّله هكذا: ./mysql_backup.sh /backups/mysql. تسهّل الملفات المنفصلة لكل قاعدة عمليات الاستعادة الانتقائية بشكل كبير وتجعل إدارة النسخ أوضح.
نسخ احتياطي لكل قواعد بيانات MySQL باستخدام mysqldump
يُفرغ كل قاعدة بيانات MySQL في ملف SQL مضغوط مستقل.
2 مشاهدة
مشاركة
السكربت
تحميل .shbash
#!/usr/bin/env bash
#
# mysql_backup.sh - Dump every MySQL database into a separate compressed file.
#
# Credentials are read from a MySQL option file (~/.my.cnf or one you pass in)
# so passwords never appear on the command line or in the process list.
#
# Usage: ./mysql_backup.sh <output_dir> [defaults-extra-file]
#
set -euo pipefail
# --- Argument handling --------------------------------------------------------
if [[ $# -lt 1 || $# -gt 2 ]]; then
echo "Usage: $0 <output_dir> [defaults-extra-file]" >&2
exit 1
fi
OUT_DIR="$1"
DEFAULTS_FILE="${2:-$HOME/.my.cnf}"
[[ -r "$DEFAULTS_FILE" ]] || { echo "Error: cannot read credentials file '$DEFAULTS_FILE'." >&2; exit 1; }
mkdir -p "$OUT_DIR"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
MYSQL_AUTH=(--defaults-extra-file="$DEFAULTS_FILE")
# --- Enumerate databases, excluding internal schemas --------------------------
DATABASES="$(mysql "${MYSQL_AUTH[@]}" -N -e 'SHOW DATABASES;' \
| grep -Ev '^(information_schema|performance_schema|mysql|sys)$')"
# --- Dump each database -------------------------------------------------------
for DB in $DATABASES; do
OUTFILE="${OUT_DIR%/}/${DB}-${TIMESTAMP}.sql.gz"
echo "Dumping '$DB' -> $OUTFILE"
mysqldump "${MYSQL_AUTH[@]}" \
--single-transaction --quick --routines --triggers --events \
"$DB" | gzip -c > "$OUTFILE"
done
echo "All databases dumped to $OUT_DIR"كيفية التشغيل
راجع السكربت أولاً، ثم حمّله أو انسخه وشغّله في بيئتك.
قد يعجبك أيضاً
bashlinuxمتوسط
نسخ احتياطي لكل قواعد بيانات PostgreSQL باستخدام pg_dumpall
يُفرغ عنقود PostgreSQL كاملاً، مع الأدوار، في ملف مضغوط واحد.
bashlinuxمتوسط
مزامنة مجلد إلى مضيف بعيد عبر rsync فوق SSH
يطابق مجلداً محلياً مع خادم بعيد بأمان عبر SSH.
bashlinuxمتوسط
إعادة تسمية الملفات بالجملة وفق نمط
يعيد تسمية ملفات كثيرة دفعة واحدة عبر استبدال sed مع معاينة آمنة.