错误日志:mysqld服务运行错误过程中出现的cordump error exception
查询日志:记录所有的sql,包括增删改查,一般在调试的时候开启
1
mysql> show global variables like "%genera%";
二进制日志:数据恢复,主从复制。除select外
慢查询日志
相关日志
查看服务打开状态
1 | mysql> show variables like 'log_%'; |
打开my.ini或my.cnf,在后面加上上面的参数,保存后重启mysql服务就行了
1 | #Enter a name for the error log file. Otherwise a default name will be used. |
在linux root下重启mysqld服务:service mysqld restart
二进制日志
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言) 语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。 此日志对于灾难时的数据恢复起着极其重要的作用。
1、启用和配置二进制日志
要启用 binlog,需要在 MySQL 配置文件 my.cnf(或 my.ini)中添加以下配置:
1 | [mysqld] |
- log-bin:指定二进制日志文件的前缀名(例如
mysql-bin)。MySQL 会创建一系列带编号的文件,如mysql-bin.000001。 - server-id:在启用复制时,必须为每个 MySQL 实例设置唯一的 server-id。
- expire_logs_days:设置 binlog 文件的过期时间(以天为单位)。如设置为
7,那么超过 7 天的 binlog 会被自动删除。
2、二进制日志格式
MySQL 提供了三种 binlog 格式:
- STATEMENT(语句模式):记录 SQL 语句的执行,主服务器记录执行的 SQL 语句,从服务器重复执行这些 SQL 语句来保持同步。可能存在“SQL 语句不一致”的问题,尤其是有非确定性查询时。
- ROW(行模式):记录每一行数据的具体变化(例如哪个字段被修改、修改成了什么值)。该模式最为精确,能够保证主从一致性,但日志文件的体积较大。
- MIXED(混合模式):结合了 STATEMENT 和 ROW 模式。对于确定性语句(如没有副作用的
INSERT),使用 STATEMENT 模式;对于可能不一致的语句,则使用 ROW 模式。
可以在 MySQL 配置文件中设置 binlog 格式:
1 | [mysqld] |
3、查看二进制日志文件
1 | show binary logs; |
1 | mysql> show master logs; |
通过mysqlbinlog工具(mysql原生自带的工具)可以快速解析大量的binlog日志文件
1 | shell> mysqlbinlog mysql-bin.000001 |

可以看见,图片下面有个建表语句
1
2
3
4
5
6create table user(
id int unsigned primary key Auto_increment comment "id",
nikename varchar(50) unique not null comment "昵称",
age tinyint unsigned not null default 18,
sex enum('male','female')
)上面还有个at 810,810表示position,我们可以指定从哪个position开始恢复数据和结束数据
at 810下面是时间,我们同样可以指定时间开始恢复数据
4、数据恢复
1 | shell> mysqlbinlog --no-defaults --database=school --base64-output=decode-rows -v --start-datetime='2021-05-01 00:00:00' --stop-datetime='2021-05-10 00:00:00' mysql-bin.000001 | more |
例如:
1 | # at 612 |
我创建了一个testcc数据库,然后删除,我需要恢复这个数据库
1 | root@zjz-VMware-Virtual-Platform:~# mysqlbinlog --start-position=612 --stop-position=1301 /var/lib/mysql/binlog.000080 | mysql -u root -p |
5、数据备份
使用mysql自带的mysqldump工具导出数据
1 | root@zjz-VMware-Virtual-Platform:~# mysqldump |
备份testcc的user表
1 | mysqldump -u root -p testcc user > ~/user.sql |
1 | root@zjz-VMware-Virtual-Platform:~# mysqldump -u root -p testcc user > ~/user.sql |
还有常用的导出:
1 | mysql -u root -p -D school -e "select *from user where age>18" > ~/user.txt |
6、导入数据
加载数据,假设在zjz用户下有一份sql数据
1 | zjz@zjz-VMware-Virtual-Platform:~$ cat user.sql |
导入
1 | mysql> SOURCE /home/zjz/user.sql; |