MySQL的日志默认保存 /usr/local/mysql/data
vim /etc/my.cnf
[mysqld]
...
#错误日志路径
log-error=/usr/local/mysql/data/mysq1_error.log #指定日志的保存位置和文件名
#通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#二进制日志
log-bin=mysql-bin
#慢查询日子
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 #设置超过5秒执行的语句被记录,缺省时为10秒
进入MySQL查看
mysql -u root -p
show variables like ‘general%’;
show variables like ‘log_bin%’;
show variables like ‘%slow%’;
show variables like ‘long_query_time’;
set global slow_query_log=ON;
备份的主要目的为灾难恢复,在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果
物理备份
对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
逻辑备份
对数据库逻辑组件(表等数据库对象)的备份
完全备份:每次对数据库进行完整的备份
差异备份:备份自从上次完全备份后被修改过的文件
增量备份:只有在上次完全备份或增量备份后被修改的文件才会备份
物理冷备
专用工具
二进制日志增量备份
进行增量备份,需要刷新二进制日志
优点
备份和恢复操作简单
缺点
# 关闭服务
systemctl stop mysqld.service
# 安装第三种压缩解压缩工具 XZ
yum -y install xz
# 压缩数据库文件
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
# 解压缩恢复至原目录
tar Jxvf /opt/mysql_all_2021-06-25.tar.xz -C /usr/local/mysql/data
完全备份一个或多个完整的库(包括所有的表)
mysqldump -u root -p --databases dcc > /opt/dcc.sql
完全备份MySQL中所有的库
mysqldump -u root -p --all-databases > /opt/all.sql
完全备份指定库中的选定表
mysqldump -u root -p 库名 表名 > /备份路径/备份文件名.sql
mysqldump -u root -p dcc cc01 > /opt/cc01.sql
注:-d 选项可以只保存数据库的表结构,不加-d 则对表数据也备份
查看备份文件
grep -v "^--" /opt/cc01.sql | grep -v "^/" | grep -v "^$"
恢复数据库
mysql -u root -p -e 'drop database dcc;'
mysql -u root -p -e 'show databases;'
-e 选项表示连接MySQL后执行的命令,命令执行完自动退出
mysql -u root -p < /opt/dcc.sql
恢复数据表
当备份文件只包含表的备份,不包含创建的库的语句时,执行导入操作必须指定库名,并且这个库要存在
# 导入cc01表
mysqldump -u root -p dcc < /opt/cc01.sql
# 查看
mysql -u root -p -e 'show tables from dcc;'
Enter password:
+---------------+
| Tables_in_dcc |
+---------------+
| cc01 |
+---------------+
开启二进制日志功能
vim /etc/my.cnf
#二进制日志
log-bin=mysql-bin
binlog_format = MIXED # 可选可不选,指定二进制日志的记录格式为 MIXED
server-id = 1
二进制日志(binlog)有三种不同的记录格式
STATEMENT(基于SQL语句)(默认格式)
ROW(基于行)
MIXED(混合模式)
每周对数据库或表进行完全备份
mysqldump -u root -p dcc cc01 > /opt/dcc_cc01_$(date +%F).sql
mysqldump -u root -p --all-databases dcc > /opt/dcc_$(date +%F).sql
每天进行增量备份操作,生成新的二进制日志文件
自行插入新数据,以模拟数据的增加或变更
use dcc;
insert into cc01 values(7,'杨记','桃酥');
再次生成新的二进制日志文件
mysqladmin -u root -P flush- logs
#之前的步骤4的数据库操作会保存到mysq1-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.000003文件中
查看二进制日志文件的内容
cp /usr/local/mysql/data/mysql-bin.000002 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
#--base64-output=decode - rows:使用64位编码机制去解码并按行读取
#-V:显示详细内容
模拟丢失更改的数据的恢复步骤
# 删除记录
use dcc;
delete from cc01 where id=3;
#恢复
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p
模拟丢失所有数据的恢复步骤
use dcc;
drop table cc01;
mysql -u root -P dcc < /opt/dcc_cc01_2021-06-25.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p
mysqlbinlog --no-defaults --stop-position='2971' /opt/mysql-bin.000002 | mysql -u root -p
mysqlbinlog --no-defaults --stop-position='2021-06-25 22:14:20' /opt/mysql-bin.000002 | mysql -u root -p