MariaDB存储文件恢复数据&备份

MariaDB存储文件恢复数据&备份

前言

NAS升降级,MariaDB数据库出现异常(之前没有出现过),导致无法正常启动数据库。

没有进行定期导出备份.sql文件,只有映射了存储文件(.frm .ibd),引擎为innodb。
直接重新搭建mariadb服务并映射目录,服务依然不能正常启动。

需要替换一些文件才能恢复数据,并且这次作为警醒单是靠快照还不稳妥,需要定时导出备份数据库

准备工作

  • 正常运行的mariadb/mysql
  • 原数据库存储文件

恢复

linuxserver/mariadb镜像的目录是/config
官方mariadb镜像的目录是/var/lib/mysql

把原数据库存储文件复制到新的数据库database目录下

  • databases里面对应名的文件夹为该数据库的存储文件
  • ib_logfile0
  • ib_logfile1
    ib_logfile是innodb引擎中事物的日志记录,记录了所有数据更改操作;
  • ibdata1
    存放着innodb表的元数据

文件并非0、1、2都有,但至少各有有一个,有则复制。

停止服务,替换掉新的mariadb目录database下的文件,再开启
此时mariadb服务和数据库应该可以正常使用,如果还没能正常使用,可以试试ib_logfile文件都删除,再启动服务。


备份

备份脚本

mariadb容器映射一个backups目录,在这个目录上创建一个备份脚本backups_sql.sh

vi backups_sql.sh

修改并粘贴

#!/bin/bash

# 设置MariaDB连接的主机、用户名和密码
# 确保该用户拥有访问需要备份的数据库权限
MariaDB_HOST="localhost"
MariaDB_USER="username"
MariaDB_PASS="password"

# 要排除的数据库列表,用逗号分隔
EXCLUDE_DBS="database1,database2"

# 设置导出目录位置
EXPORT_DIR_BASE="/backups/auto_sql"

# 排除数据库字符串转换为数组
IFS=, read -ra EXCLUDED <<< "$EXCLUDE_DBS"

# 检测数据库连接
echo "Testing MariaDB database connection..."
if ! mysql -h ${MariaDB_HOST} -u ${MariaDB_USER} -p${MariaDB_PASS} -e ';' ; then
  echo "ERROR: Unable to connect to the MariaDB database! Check your credentials and try again."
  exit 1
fi

# 创建以当天日期命名的目录
EXPORT_DIR="${EXPORT_DIR_BASE}/$(date +%Y-%m-%d)"
mkdir -p "${EXPORT_DIR}"

echo "Exporting databases to directory: ${EXPORT_DIR}"

# 获取所有数据库名称
DATABASES=$(mysql -h ${MariaDB_HOST} -u ${MariaDB_USER} -p${MariaDB_PASS} -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)")

# 遍历数据库并导出sql文件
for db in $DATABASES; do
  if [[ " ${EXCLUDED[@]} " =~ " ${db} " ]]; then
    echo "Skipping excluded database: ${db}"
  else
    echo "Exporting database: ${db}"
    # 创建以数据库名称命名的导出文件
    export_file="${EXPORT_DIR}/${db}.sql"
    # 使用 mysqldump 导出sql文件
    mysqldump -h ${MariaDB_HOST} -u ${MariaDB_USER} -p${MariaDB_PASS} --databases ${db} > "${export_file}"
    echo "SQL file has been exported to: ${export_file}"
  fi
done

echo "$(date +%Y-%m-%d) All databases have been exported to: ${EXPORT_DIR}"

保存退出,添加执行权限

chmod +x backups_sql.sh

可以手动执行看看是否成功导出sql文件

设置定时运行

  • TrueNAS

Cron Jobs添加

image-20230508184346323

设置运行用户,和执行时间周期
command修改并填入(apps的应用名为mariadb)

k3s kubectl exec `k3s kubectl get pods -n ix-mariadb |grep 1/1 |awk '{print $1}'|head -n 1` -n ix-mariadb -- /bin/bash /backups/auto_sql/backups_sql.sh
  • 其它Linux系统方式

使用crontab进行配置

sudo vi /etc/crontab
或
crontab -e

添加

30 4 * * * root docker exec -u root 容器名或ID /bin/bash /backups/auto_sql/backups_sql.sh

完成


参考

MariaDB Error:1932 Table doesn’t exist in engine 的解决方法

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇