在企业中数据的价值至关重要,数据保障了企业业务的正常运行。因此,数据的安全性
及数据的可靠性是运维的重中之重,任何数据的丢失都可能对企业产生严重的后果。通常情
况下造成数据丢失的原因有如下几种:
mysqldump
或其他工具生成 SQL 脚本,这些脚本可以用来重建数据库。物理冷备份时需要在数据库处于关闭状态下,能够较好地保证数据库的完整性。物理冷备份一般用于非核心业务,这类业务一般都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的。通常通过直接打包数据库文件夹来实现备份
mysqldump
:这是一个常用的 MySQL 备份工具,可以创建逻辑备份。它支持完全备份、增量备份,并允许用户选择备份特定的数据库或表。
mysqldump -u username -p dbname > backup.sql
mysqlhotcopy
:这是一个非官方的工具,主要用于进行物理热备份。它依赖于 FLUSH TABLES WITH READ LOCK
命令来保证一致性。
mysqldump
进行初始完全备份。mysqlbinlog
工具来获取自上次备份以来的更改,并应用到最新的备份中以保持数据同步。停写操作:首先,需要确保在备份过程中没有新的数据写入数据库。可以通过执行 FLUSH TABLES WITH READ LOCK
命令来锁定所有的表,防止在备份过程中数据被修改。
FLUSH TABLES WITH READ LOCK;
备份数据文件:使用操作系统级别的工具(如 tar
或 cp
命令)来复制 MySQL 数据目录下的文件。例如,如果 MySQL 数据目录位于 /var/lib/mysql
,可以使用以下命令来备份:
tar -czf backup.tar.gz /var/lib/mysql
解锁表:完成备份后,解锁表以便其他进程可以继续写入数据。
UNLOCK TABLES;
备份二进制日志:如果你启用了二进制日志,还需要备份二进制日志文件。
cp /var/lib/mysql/mysql-bin.* .
记录备份信息:记录备份的时间点、备份文件的位置等信息,以便于恢复时使用。
停止 MySQL 服务:在恢复之前,需要先停止 MySQL 服务。
systemctl stop mysql
删除旧的数据目录:清空或移动旧的数据目录,以准备放置新的备份数据。
rm -rf /var/lib/mysql/*
恢复数据文件:使用之前备份的文件来恢复数据。
tar -xzvf backup.tar.gz -C /var/lib/mysql/
恢复二进制日志:如果之前备份了二进制日志,则需要将其恢复到正确的位置。
mv mysql-bin.* /var/lib/mysql/
启动 MySQL 服务:启动 MySQL 服务,并验证数据的完整性。
systemctl start mysql
验证数据:登录 MySQL 并检查数据是否完整且可用。
SELECT * FROM your_table LIMIT 10;
备份整个数据库:使用 mysqldump
命令来备份整个数据库或特定的数据库。
mysqldump -u root -p --all-databases > all_databases.sql
备份单个数据库:备份特定的数据库。
mysqldump -u root -p your_database > your_database.sql
备份单个表:备份特定数据库中的单个表。
mysqldump -u root -p your_database your_table > your_table.sql
使用压缩:可以使用 gzip 或 bzip2 压缩备份文件以节省存储空间。
mysqldump -u root -p your_database | gzip > your_database.sql.gz
检查备份文件的内容:使用文本编辑器或命令行工具查看备份文件的内容。
less all_databases.sql
解压备份文件:如果使用了压缩,可以先解压备份文件。
gunzip all_databases.sql.gz
停止 MySQL 服务:在恢复之前,需要先停止 MySQL 服务。
systemctl stop mysql
删除旧的数据文件:清空或移动旧的数据文件,以准备放置新的备份数据。
rm -rf /var/lib/mysql/*
创建数据库:创建需要恢复的数据库。
CREATE DATABASE your_database;
导入备份文件:使用 mysql
命令将备份文件导入到数据库中。
mysql -u root -p your_database < your_database.sql
启动 MySQL 服务:启动 MySQL 服务,并验证数据的完整性。
systemctl start mysql
验证数据:登录 MySQL 并检查数据是否完整且可用。
SELECT * FROM your_table LIMIT 10;
启用二进制日志:在 MySQL 中启用二进制日志功能,这是进行增量备份的基础。
my.cnf
或 my.ini
) 中添加如下配置: log_bin = /path/to/mysql-bin server_id = 1 binlog_format = ROW
初始完全备份:进行一次完全备份作为增量备份的基础。
记录备份时间点:记录每次备份的时间点,以便在恢复时确定需要应用哪些二进制日志文件。
进行完全备份:使用 mysqldump
或物理冷备份的方式进行完全备份。
mysqldump -u root -p --all-databases > all_databases.sql
记录二进制日志文件名:在进行完全备份后,记录当前的二进制日志文件名。
SHOW MASTER STATUS;
后续增量备份:当需要进行增量备份时,记录下自上次备份以来的二进制日志文件名和位置。
SHOW BINARY LOGS;
备份二进制日志文件:将自上次备份以来产生的二进制日志文件备份到指定的位置。
恢复完全备份:首先恢复完全备份文件。
mysql -u root -p < all_databases.sql
应用二进制日志:使用 mysqlbinlog
工具来读取并应用自上次备份以来的二进制日志文件。
mysqlbinlog --start-position=position --stop-position=position mysql-bin.000001 | mysql -u root -p
重复应用日志:如果存在多个二进制日志文件,需要按照时间顺序依次应用。
for file in $(ls -t /path/to/logfiles/*.log); do mysqlbinlog $file | mysql -u root -p done
验证数据:登录 MySQL 并检查数据是否完整且可用。
SELECT * FROM your_table LIMIT 10;
下一篇:现在有什么赛道可以干到退休?