MySQL备份和恢复
备份类型了解
**物理备份:** - 冷备份(脱机备份):*数据库处于关闭状态,直接打包数据库文件 特点:备份速度快,回复时简单 - 热备份(联机备份): 在数据库运行的情况下,采用archivelog mode方式备份数据库的方法 特点:如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息 - 温备份: 温备份一般是周期性开机,根据内容进行更新 **逻辑备份:** + 完全备份:从数据库安装到现在全部备份 + 差异备份:从上次备份到现在的这个部分备份 + 增量备份:上次备份上增加从上次到现在的备份备份MySQL方法
1.物理打包备份
打包备份数据库的date目录
mkdir /mysql_backup
tar zcf /mysql_backup/mysql-$(date +%Y%m%d%S).tar.gz /usr/local/mysql/date/*
2.mysqldump命令工具
命令工具备份不同库、表
#备份所有库:
mysqldump -uroot -p123456 --all-databases > /mysql_backup/mysql.sql
#备份指定库:
mysqldump -uroot -p123456 db_name > /mysql_backup/db_name.sql
#备份表:
mysqldump -uroot -p123456 dbname table_name > /mysql_backup/db_name.table_name.sql
命令选项介绍:
–all-databases:备份所有数据库(包含建库语句)
–databases:备份创建库的过程,还原会先创建,不加只备份数据
–add-drop-database:还原数据库的时候先删除库再创建库
–add-drop-table:还原数据表的时候先删除表再创建表
–single-transaction:备份过程中不锁表,适用于 InnoDB
-q,–quick:从服务器中读取数据,避免一次性把整张表读入客户端内存导致服务器内存占用过大
-R,–routines:可以包含存储过程和函数一起备份
–triggers:导出触发器(默认开启)
–default-character-set=utf8mb4:设置字符集,推荐使用 utf8mb4
备份脚本:
#!/bin/bash
MYSQL_CMD='/usr/bin/mysqldump'
MYSQL_BAK_DIR="/mysql_backup/`date +%Y%m%d`"
if [ ! -d $MYSQL_BAK_DIR ];then
mkdir -p $MYSQL_BAK_DIR
fi
$MYSQL_CMD -uroot -p'password' -P 3306 --databases db_name --add-drop-database > $MYSQL_BAK_DIR/db_name.sql
3.通过二进制日志
开启二进制日志
vim /etc/my.cnf
--------------------------
server_id = 2
#配置开启binlog日志, 日志的文件前缀为 mysqlbin
log_bin = /usr/local/mysql/logs/mysql-bin
#配置二进制日志的格式
binlog_format = ROW
#日志存活时间
expire_logs_days = 30
恢复MySQL方法
1.物理打包的数据恢复
直接解压备份的解压包到数据库数据目录
tar zxf /mysql_backup/mysql-$(date +%Y%m%d%S).tar.gz -C /usr/local/mysql/date/*
2.mysqldump备份的数据恢复
方法一:
先创建数据库,进入到该库(名字与需要恢复的库名字一样)
source /mysql_backup/db_name.sql
方法二:
先创建数据库,退出数据库(名字与需要恢复的库名字一样)
mysql -uroot -p123456 db_name < /mysqlbak/db_name.sql
3.通过二进制日志文件恢复
通过查看二进制文件如下图来查看时间节点或位置
使用编译安装自带的工具mysqlbinlog查看并恢复
1.查看二进制文件
mysqlbinlog mysql-bin.00001
基于时间节点的恢复(注意命令格式)
mysqlbinlog --stop-datetime='2020-03-06 15:28:26' /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p123456
基于位置的恢复(注意命令格式)
mysqlbinlog --stop-position='1935' /usr/local/mysql/data/mysql-bin.000001 |mysql -uroot -p123456