MySQL 数据备份是一个非常重要的工作,保证数据的安全性和可靠性。
常用方法:
一、使用 mysqldump 工具来备份 MySQL 数据库。
该工具可以生成 SQL 脚本文件,包含数据库中所有表和数据的语句。在终端中运行以下命令将 SQL 脚本文件导出到当前目录下:
mysqldump -u [username] -p [database_name] > [backup_file].sql
[username] 是 MySQL 用户名
[database_name] 是需要备份的数据库名称
[backup_file].sql 是备份的文件名
如果需要恢复之前备份的数据,可以运行以下命令将备份文件中的 SQL 语句执行,从而将数据恢复到指定的数据库中:
mysql -u [username] -p [database_name] < [backup_file].sql
[username] 是 MySQL 用户名
[database_name] 是需要恢复的数据库名称
[backup_file].sql 是备份的文件名
如果需要恢复半个月前的数据,可以选择备份文件中的某个时间点之前的数据,并使用以上方法进行恢复。
操作实例:
如果想要备份一个叫 ytt 的数据库,你可以在命令行窗口输入:
mysqldump -u 用户名 -p 密码 --database ytt > ytt.sql
这样就会生成一个包含 ytt 数据库所有数据的 SQL 文件。
如果你想要恢复这个文件到数据库中,你可以在命令行窗口输入:
mysql -u 用户名 -p 密码 < ytt.sql
或者
mysql -u 用户名 -p 密码 source ytt.sql
这样就会执行 SQL 文件中的语句,将数据还原到数据库中。
全备份和增量备份
全备份是指备份数据库中的所有数据,不管数据是否有变化。它的优点是恢复简单,不需要其他文件。它的缺点是占用空间大,耗时长,影响数据库性能。
增量备份是指只备份上次全备份或增量备份后发生变化的数据,需要开启 binlog 日志功能. 它的优点是占用空间小,耗时短,不影响数据库性能,它的缺点是恢复复杂,需要依赖 binlog 日志文件和全备份文件。
例如,如果你想要每天进行一次全备份和每小时进行一次增量备份,你可以使用 mysqldump 工具和 binlog 工具来实现。
首先,在 my.cnf 文件中开启 binlog 功能,并设置每天生成一个日志文件:
[mysqld] log-bin=/var/lib/mysql/mysql-bin expire-logs-days=7 max_binlog_size=100M
然后,在 crontab 中设置定时任务:
# 每天凌晨 0 点进行一次全备份 0 0 * * * mysqldump -u root -p password --all-databases > /backup/full_$(date +%Y%m%d).sql
每小时进行一次增量备份
0 * * * * mysqlbinlog --read-from-remote-server --host=localhost --user=root --password=password --stop-never-slave-server-id=10 mysql-bin.000001 > /backup/incremental_$(date +%Y%m%d%H).sql`
这样就可以在 /backup 目录下生成全备份和增量备份文件。
如果你想要恢复这些文件到数据库中,你需要先停止 MySQL 服务,并确保数据目录为空。然后按照以下步骤操作:
# 恢复最近一次的全备份文件
mysql -u root -p password < /backup/full_20230307.sql
恢复之后产生的所有增量备份文件
mysqlbinlog /backup/incremental_202302270*.sql | mysql -u root -p password`
请注意,在恢复之前需要确认 binlog 文件名和路径,并按照时间顺序恢复。
二、使用Shell脚本,定期备份MySQL数据库,并将备份文件压缩并上传到指定的远程服务器上。
*DB_USER:用户名 *DB_PASS:密码 *DB_NAME:库名 *BACKUP_DIR:备份目录 *REMOTE_SERVER:远程服务器 *REMOTE_DIR:远程目录
# 定义变量 DB_USER="root" DB_PASS="password" DB_NAME="database_name" BACKUP_DIR="/backup/mysql" REMOTE_SERVER="remote_server_address" REMOTE_DIR="/backup/mysql" # 创建备份目录 if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi # 备份数据库 mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql # 压缩备份文件 tar -czvf $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).tar.gz $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql # 上传备份文件到远程服务器 scp $BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).tar.gz $REMOTE_SERVER:$REMOTE_DIR # 删除过期备份文件 find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
标签:备份,Linux,DB,数据备份,sql,MySQL,backup,数据库,DIR From: https://www.cnblogs.com/Williamls/p/17187789.html