MariaDB备份主要分为逻辑备份(生成SQL语句文件,可跨版本/平台恢复)和物理备份(直接复制数据文件,速度快、效率高)两类,以下是常用工具的具体操作:
mariadb-dump)mariadb-dump是MariaDB自带的逻辑备份工具,适用于需要跨版本迁移或灵活恢复的场景。
mariadb-dump -u [用户名] -p[密码] --databases [数据库名] > /path/to/backup.sql
示例:备份mydb数据库到/home/user/backups/mydb_backup.sql:mariadb-dump -u root -pMySecretPassword --databases mydb > /home/user/backups/mydb_backup.sql
mariadb-dump -u [用户名] -p[密码] --all-databases > /path/to/all_databases_backup.sql
gzip /path/to/backup.sql # 生成backup.sql.gz
mariadb-dump -u [用户名] -p[密码] [数据库名] [表1] [表2] > /path/to/table_backup.sql
mariabackup,官方推荐)mariabackup是MariaDB官方提供的物理备份工具,支持热备份(不停机)、增量备份,适用于InnoDB/XtraDB引擎,恢复速度快。
sudo apt install mariadb-backup
sudo yum install mariadb-backup
mariabackup --user=[用户名] --password=[密码] --backup --target-dir=/path/to/full_backup
示例:全量备份到/var/backups/mariadb/full:mariabackup --user=root --password=MySecretPassword --backup --target-dir=/var/backups/mariadb/full
mariabackup --user=[用户名] --password=[密码] --backup --target-dir=/path/to/incremental_backup --incremental-basedir=/path/to/last_backup
示例:基于/var/backups/mariadb/full做增量备份到/var/backups/mariadb/inc1:mariabackup --user=root --password=MySecretPassword --backup --target-dir=/var/backups/mariadb/inc1 --incremental-basedir=/var/backups/mariadb/full
若数据库较小或允许停机,可直接复制数据目录(默认/var/lib/mysql):
sudo systemctl stop mariadb # 停止服务
sudo rsync -a /var/lib/mysql /path/to/backup/mysql_backup # 复制数据目录
sudo systemctl start mariadb # 启动服务
恢复流程需根据备份类型(逻辑/物理)选择对应方法,以下是常见场景的操作:
mariadb-dump生成的SQL文件)逻辑备份恢复适用于跨版本、跨平台或需要选择性恢复的场景。
mysql -u [用户名] -p[密码] [目标数据库名] < /path/to/backup.sql
示例:恢复mydb_backup.sql到mydb数据库:mysql -u root -pMySecretPassword mydb < /home/user/backups/mydb_backup.sql
mysql -u [用户名] -p[密码] < /path/to/all_databases_backup.sql
mysql --host=[远程IP] -u [用户名] -p[密码] < /path/to/backup.sql
mariabackup生成的文件)物理备份恢复适用于快速恢复大型数据库,需按全量→增量顺序操作。
mariabackup --prepare --target-dir=/path/to/full_backup
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
sudo rsync -aP /path/to/full_backup/ /var/lib/mysql/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb
mariabackup --prepare --target-dir=/path/to/full_backup --incremental-dir=/path/to/incremental_backup
sudo rsync -aP /path/to/incremental_backup/ /var/lib/mysql/
若备份文件为.gz或.xbstream格式,需先解压再恢复:
.gz文件:gunzip -c /path/to/backup.sql.gz | mysql -u [用户名] -p[密码] [目标数据库名]
.xbstream文件(Percona XtraBackup格式):mbstream -x -C /path/to/backup < /path/to/backup.xbstream
解压后按物理备份恢复流程操作。若数据库无法正常启动或数据损坏,可尝试以下方法:
mysqlcheck --all-databases --check --auto-repair -u root -p
/etc/my.cnf(或/etc/mysql/my.cnf),添加:[mysqld]
innodb_force_recovery = 1
重启MariaDB,逐步增加innodb_force_recovery的值(1-6),直到能启动并导出数据。pt-table-checksum(Percona Toolkit)或第三方数据恢复服务。mysql:mysql),避免未授权访问。ib_logfile0、ib_logfile1)异常,可删除并重启MariaDB重新生成。