1.用于记录 mysql 启动、停止或运行时产生的错误信息
2.可通过一下字段进行更新:
log-error=/usr/local/mysql/data/mysql_error.log(指定日志的保存位置和文件名)
1.用来记录mysql的所有连接和语句,默认是关闭的
2.开启方式:
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
1.二进制日志,用来记录所有更新的数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认开启
2.开启方式:
log-bin=mysql-bin 或者 log_bin=mysql-bin
1.慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化
2.开启方式:
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log (指定文件路径和名称)
long_query_time=5 (设置执行超过5秒的语句会被记录,缺省时默认为10秒)
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;
数据库的备份可以采用很多种方式,如直接打包数据库文件(物理冷备份)、专用备份工具(mysqldump)、二进制日志增量备份、第三方工具备份等
如果进行增量备份(包含自上次完全备份或增量备份以来发生的数据修改) ,需要刷新二进制日志
第三方工具Percona xtraBackup是一个免费的MysQL热备份软件
use gxd;
create table if not exists gxd03 (
id int(4) not null auto_increment,
name varchar(10) not null,
primary key (id));
insert into gxd03 values(1,'zhangsan');
insert into gxd03 values(2,'lisi');
InnoDB存储引擎的数据库在磁盘上存储成三个文件:db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)
systemctl stop mysqld
yum -y install xz # xz为一种压缩工具
压缩备份
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
解压恢复
tar Jxvf /opt/mysql_all_2021-08-31.tar.xz -C /usr/local/mysql/data/
1.完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -uroot -p[密码] --databases 库名 > /备份路径/备份文件名.sql
导出的就是数据库脚本文件
如:
mysqldump -uroot -p264196 --databases gxd > /opt/gxd.sql
mysqldump -uroot -p264196 --databases gxd gxd03 > /opt/gxd-gxd03.sql
mysqldump -uroot -p[密码] --all-databases > /备份路径/备份文件名.sql
如:
mysqldump -uroot -p[密码] --all-databases > /备份路径/all.sql
3.完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
如:
mysqldump -uroot -p264196 [-d] gxd gxd03 > /opt/gxd-gxd03.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份
grep -v "^--" /opt/gxd-gxd03.sql | grep -v "^/" | grep -v "^$"
先删除库
mysql -uroot -p264196 -e 'drop database gxd;'
#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出
查看库
mysql -uroot -p264196 -e 'show databases;'
进行恢复操作
mysql -uroot -p264196 < /opt/gxd.sql
mysql -uroot -p264196 -e 'show databases;'
先删除表
mysql -uroot -p264196 -e 'drop table gxd.gxd03;'
查看库中的表
mysql -uroot -p264196 -e 'show tables from gxd;'
进行恢复操作
mysql -uroot -p264196 gxd < /opt/gxd-gxd03.sql
mysql -uroot -p264196 -e 'show tables from gxd;'
systemctl stop mysqld
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED (可选项)
server-id = 1
systemctl restart mysqld
日志格式 | 说明 |
---|---|
STATEMENT(基于sql语句,默认) | 每一条涉及到被修改的 sql 都会记录在binlog中。日志量过大,如函数、主从复制等构架记录日志时会出现问题 |
ROW(基于行) | 只记录变动的记录,不记录sql的上下文。如果遇到 updata…set…where true,那么日志数据量就会很大 |
MIXED(混合模式) | 一般语句使用 STATEMENT,函数使用ROW。推荐使用 |
先完成完全备份(在创建好表和库的基础上)
mysqldump -uroot -p264196 gxd gxd03 > /opt/gxd-gxd03-$(date +%F).sql
mysqldump -uroot -p264196 --all-databases gxd > /opt/gxd-$(date +%F).sql
生成新的二进制文件(可每天进行增量备份操作)
mysqladmin -uroot -p264196 flush-logs
use gxd;
insert into gxd03 values(3,'wangwu');
insert into gxd03 values (4,'zhaoliu');
select * from gxd03;
cp /usr/local/mysql/data/mysql-bin.000005 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000005
#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容
注:这边我们解析的bin.000005,因为05才是新添加备份数据的文件,06是刷新后的新文件,是个空文件
#模拟删除
use gxd;
delete from gxd03 where id=3;
delete from gxd03 where id=4;
exit;
#模拟恢复
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
mysqlbinlog --no-defaults /opt/mysql-bin.000005 | mysql -uroot -p264196
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
use gxd;
drop table gxd03;
mysql -uroot -p264196 gxd < /opt/gxd-2021-08-31.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000005 | mysql -uroot -p264196
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000005
# at 296
#210901 14:35:01 server id 1 end_log_pos 404 CRC32 0x26c85983 Query thread_id=4 exec_time=0 error_code=0
use `gxd`/*!*/;
SET TIMESTAMP=1630478101/*!*/;
insert into gxd03 values(3,'wangwu')
# at 577
#210901 14:35:09 server id 1 end_log_pos 686 CRC32 0x8b913da9 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1630478109/*!*/;
insert into gxd03 values(4,'zhaoliu')
#模拟删除
use gxd;
delete from gxd03 where id=3;
delete from gxd03 where id=4;
exit;
#模拟恢复
1.恢复id=3的数据,基于的位置就要在id=4的位置前终止
1)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
2)mysqlbinlog --no-defaults --stop-position='577' /opt/mysql-bin.000005 | mysql -uroot -p264196
3)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
2.恢复id=4的数据,基于的位置就要在id=4的位置后开始
1)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
2)mysqlbinlog --no-defaults --start-position='577' /opt/mysql-bin.000005 | mysql -uroot -p264196
3)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
3.恢复id=3/4的数据,基于的位置就要在id=3的位置前开始,id=4的下一个位置为终止
1)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
2)mysqlbinlog --no-defaults --start-position='296' --stop-position='717' /opt/mysql-bin.000005 | mysql -uroot -p264196
3)mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
同理:
1.恢复id=3的数据,基于的位置就要在id=4的时间点前终止
mysqlbinlog --no-defaults --stop-datatime='2021-09-01 14:35:09' /opt/mysql-bin.000005 | mysql -uroot -p264196
2.恢复id=4的数据,基于的位置就要在id=4的时间点后开始
mysqlbinlog --no-defaults --start-datatime='2021-09-01 14:35:09' /opt/mysql-bin.000005 | mysql -uroot -p264196
systemctl stop mysqld
yum -y install xz
压缩备份
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
解压恢复
tar Jxvf /opt/mysql_all_2021-08-31.tar.xz -C /usr/local/mysql/data/
备份某库
mysqldump -uroot -p[密码] --databases 库名 > /备份路径/备份文件名.sql
备份所有的库
mysqldump -uroot -p[密码] --all-databases > /备份路径/备份文件名.sql
完全备份指定库中的部分表
mysqldump -u root -p[密码] [-d] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
恢复库
mysql -uroot -p264196 < /备份路径/备份文件名.sql
回复表
mysql -uroot -p264196 库名 < /备份路径/备份文件名.sql
1.开启二进制日志功能,设置MIXED
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED
2.一次完全备份,每周备份一次,crontab -e
mysqldump -uroot -p264196 gxd gxd03 > /opt/gxd-gxd03-$(date +%F).sql
mysqldump -uroot -p264196 --all-databases gxd > /opt/gxd-$(date +%F).sql
3.生成新的二进制文件(可每天进行增量备份操作)
mysqladmin -uroot -p264196 flush-logs
4.进行简单的数据插入,并增量备份
use 库;
insert into 表 ....
5.再刷新一次,进行增量备份与恢复
mysqladmin -uroot -p264196 flush-logs
6.查看新生成的日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v 刷新前的二进制文件
7.删除再恢复
1)模拟丢失更改的数据并恢复
#模拟删除
use gxd;
delete from gxd03 where id=1;
delete from gxd03 where id=2;
exit;
#模拟恢复
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
mysqlbinlog --no-defaults /opt/mysql-bin.000005 | mysql -uroot -p264196
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'
2)模拟丢失所有数据并恢复
use gxd;
drop table gxd03;
mysql -uroot -p264196 gxd < /opt/gxd-2021-08-31.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000005 | mysql -uroot -p264196
mysql -uroot -p264196 -e 'select * from gxd.gxd03;'