Ubuntu 上 MariaDB 的备份与恢复
一 备份与恢复总览
二 使用 mysqldump 进行逻辑备份与恢复
mysqldump -u root -p 数据库名 > 备份.sqlmysqldump -u root -p --databases 库1 库2 > 多库.sqlmysqldump -u root -p --all-databases > 全库.sqlmysqldump -u root -p 数据库名 | gzip > 备份.sql.gz--single-transaction(InnoDB 一致性快照,避免全表锁)--routines --triggers --events(含存储过程、触发器、事件)--hex-blob(二进制字段安全导出)mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS 数据库名;"mysql -u root -p 数据库名 < 备份.sqlmysql -u root -p < 多库.sql 或 mysql -u root -p < 全库.sqlscp 备份.sql.gz 用户@主机:/路径/ 或 rsync -avz 备份.sql.gz 用户@主机:/路径/0 2 * * * mysqldump -u root -p'密码' --single-transaction --routines --triggers --events 数据库名 | gzip > /backup/mariadb/数据库_$(date +\%F).sql.gz0 3 * * * find /backup/mariadb -name "*.sql.gz" -mtime +7 -delete三 使用 Mariabackup 进行物理热备与恢复
sudo apt install mariadb-backup -ysudo mkdir -p /var/backups/mariadbsudo mariabackup --backup --target-dir=/var/backups/mariadb/full-$(date +%F) --user=root --password='密码'sudo mariabackup --prepare --target-dir=/var/backups/mariadb/full-$(date +%F)sudo systemctl stop mariadbsudo mv /var/lib/mysql /var/lib/mysql.baksudo mariabackup --copy-back --target-dir=/var/backups/mariadb/full-$(date +%F)sudo mariabackup --move-back --target-dir=/var/backups/mariadb/full-$(date +%F)sudo chown -R mysql:mysql /var/lib/mysqlsudo systemctl start mariadb--prepare;恢复会覆盖现有数据目录。四 迁移与时间点恢复
mysqldump → 传输到目标 → 目标库 mysql 导入;适合跨版本与跨平台。mariabackup 全量 → 目标库停库 → --copy-back → 启动;适合大体量、快速拉起。/etc/mysql/mariadb.conf.d/50-server.cnf,在 [mysqld] 加入
log_bin = /var/log/mysql/mysql-bin.logsudo systemctl restart mariadbmysqlbinlog 回放全量之后的二进制日志到指定时间点:
mysqlbinlog --start-datetime="2025-12-02 10:00:00" --stop-datetime="2025-12-02 10:15:00" /var/log/mysql/mysql-bin.000001 | mysql -u root -p五 实践建议与注意事项
--single-transaction;MyISAM 或需强一致时可用 --lock-all-tables(会锁库)。~/.my.cnf 凭据文件(权限 600)。scp/rsync 同步至异地;定期校验与演练恢复流程。