CentOS 备份 MySQL 数据库
背景介绍
在现代数据管理中,数据库的备份是不可或缺的一部分,尤其是对于像 MySQL 这样的流行数据库系统,无论是出于安全考虑还是数据恢复的需要,定期备份数据库至关重要,本文将详细介绍如何在 CentOS 上备份 MySQL 数据库,以及相关的代码示例。
备份类型及方法
物理备份与逻辑备份
物理备份:直接复制数据库文件,适用于数据库关闭时。
逻辑备份:使用 mysqldump 工具导出 SQL 脚本,适用于数据库运行时。
完全备份、差异备份和增量备份
完全备份:每次都备份完整的数据库。
差异备份:只备份上一次完全备份之后的更新数据。
增量备份:每次备份只备份上一次完全备份或增量备份之后的更新数据。
备份策略
选择合适的备份策略可以确保数据的安全性和完整性,常见的备份策略包括:
每日完全备份:适用于数据量较小的情况下。
每周完全备份 + 每日增量备份:适用于数据量大且变化频繁的情况。
备份工具
mysqldump
mysqldump
是 MySQL 提供的命令行工具,适用于导出数据库,它支持多种选项,可以根据需要选择不同的备份方式。
安装 MySQL
确保已经在 CentOS 上安装了 MySQL,如果没有,可以使用以下命令进行安装:
sudo yum install mysqlserver sudo systemctl start mysqld sudo systemctl enable mysqld
使用mysqldump
进行备份
完整备份一个或者多个完整的数据库(包含其中的表)
mysqldump u root p[密码] databases 库名1 [库名2] … > /备份路径/备份文件名.sql
mysqldump u root ppassword databases exam_system > /usr/local/src/mysqlbackup/exam_system.sql
遇到的问题:mysqldump: [Warning] Using a password on the command line interface can be insecure
解决办法:在my.cnf中添加
[mysqldump] user=root password=password
然后不需要使用账号密码即可进行备份:
mysqldump databases exam_system > /usr/local/src/mysqlbackup/exam_system.sql
如果不加databases
,只备份库中的表,不会备份库:
mysqldump u root p[密码] 库名 > /备份路径/备份文件名.sql
备份整个数据库
mysqldump u root p[密码] alldatabases > /备份路径/备份文件名.sql
mysqldump alldatabases > /usr/local/src/mysqlbackup/all.sql
备份指定库中的部分表
mysqldump u root p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
mysqldump exam_system answer question > /usr/local/src/mysqlbackup/answerAndquestion.sql
XtraBackup
Percona XtraBackup 是一个开源的热备份工具,适用于大规模的数据库备份,它支持热备份和增量备份,业务影响小,停机时间短。
恢复备份
通过 `source` 命令恢复
登录备份主机的 MySQL,执行以下命令:
mysql uroot p mysql> source /usr/local/src/mysql/exam_system.sql;
通过 `mysql` 命令恢复
mysql u 用户名 p[密码] < 库备份脚本的路径
mysql uroot ppassword < /usr/local/src/mysql/exam_system.sql
当备份的 SQL 中只包含表的备份,而不是库的备份时,恢复的时候需要指定数据库,并且目标库必须存在:
mysql uroot ppassword exam_system < /usr/local/src/mysqlbackup/answerAndquestion.sql
增量备份与恢复(使用二进制日志)
开启二进制日志功能
编辑my.cnf
文件:
[mysqld] logbin=mysqlbin binlog_format = MIXED # 可选,指定二进制日志(binlog)的记录格式为 MIXED serverid = 1 # 确保服务器 ID 唯一
重启 MySQL 服务:
sudo systemctl restart mysqld
刷新二进制日志文件实现增量备份
mysqladmin flushlogs
查看二进制文件内容:
mysqlbinlog nodefaults base64output=decoderows v /var/lib/mysql/binlog.000001
进行增量备份操作
1、对数据库exam_system
中的answer
表做完全备份:
mysqldump exam_system answer > /usr/local/src/mysqlbackup/answer.sql
2、在answer
中添加新数据。
3、再次刷新二进制日志文件:
mysqladmin flushlogs
4、新增数据后,再次刷新二进制日志文件。
5、进行备份,备份的是倒数第二个二进制日志文件,不是最新的那个:
mv f /var/lib/mysql/binlog.000012 /usr/local/src/mysqlbackup/binlog.000012_backup
6、将其拷贝到目的主机上:
scp /usr/local/src/mysqlbackup/binlog.000012_backup user@192.168.222.213:/path/to/destination/
在 CentOS 上备份 MySQL 数据库是一个非常重要的操作,能为您的数据安全提供保障,通过本文的讲解,我们探讨了备份的必要性、使用mysqldump
备份数据库的基本步骤、备份的恢复方法及备份的多种类型,定期备份数据库,不仅有助于防止数据丢失,还能提高整个系统的稳定性与可靠性,希望您能将这些方法付诸实践,确保您数据库的安全性,无论是个人使用还是企业环境,掌握正确的备份策略都是非常有必要的。