- 错误日志:mysqld服务运行错误过程中出现的cordump error exception
查询日志:记录所有的sql,包括增删改查,一般在调试的时候开启
mysql> show global variables like "%genera%";
- 二进制日志:数据恢复,主从复制。除select外
- 慢查询日志
相关日志
查看服务打开状态
mysql> show variables like 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | /var/log/mysql/error.log |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_raw | OFF |
| log_replica_updates | ON |
| log_slave_updates | ON |
| log_slow_admin_statements | OFF |
| log_slow_extra | OFF |
| log_slow_replica_statements | OFF |
| log_slow_slave_statements | OFF |
| log_statements_unsafe_for_binlog | ON |
| log_throttle_queries_not_using_indexes | 0 |
| log_timestamps | UTC |
+----------------------------------------+----------------------------------------+
21 rows in set (0.21 sec)
打开my.ini或my.cnf,在后面加上上面的参数,保存后重启mysql服务就行了
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=err.log
#Enter a name for the query log file. Otherwise a default name will be used.
#log=
#Enter a name for the slow query log file. Otherwise a default name will be
used.
#log-slow-queries=
#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
在linux root下重启mysqld服务:service mysqld restart
二进制日志
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言) 语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。 此日志对于灾难时的数据恢复起着极其重要的作用。
1、启用和配置二进制日志
要启用 binlog,需要在 MySQL 配置文件 my.cnf
(或 my.ini
)中添加以下配置:
[mysqld]
log-bin=mysql-bin
- 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 格式:
[mysqld]
binlog_format = ROW
3、查看二进制日志文件
show binary logs;
show master logs;
mysql> show master logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000021 | 157 | No |
| binlog.000022 | 157 | No |
| binlog.000023 | 157 | No |
| binlog.000024 | 201 | No |
| binlog.000025 | 157 | No |
| binlog.000026 | 157 | No |
| binlog.000027 | 24566 | No |
| binlog.000028 | 2991 | No |
| binlog.000029 | 6672 | No |
| binlog.000030 | 180 | No |
| binlog.000031 | 180 | No |
| binlog.000032 | 2028 | No |
| binlog.000033 | 854 | No |
| binlog.000034 | 2992 | No |
| binlog.000035 | 104857809 | No |
| binlog.000036 | 104857839 | No |
| binlog.000037 | 104858229 | No |
| binlog.000038 | 104858037 | No |
| binlog.000039 | 104858047 | No |
| binlog.000040 | 104858047 | No |
| binlog.000041 | 104858057 | No |
| binlog.000042 | 104858061 | No |
| binlog.000043 | 104858277 | No |
| binlog.000044 | 104858121 | No |
| binlog.000045 | 104857801 | No |
| binlog.000046 | 104857801 | No |
| binlog.000047 | 82853815 | No |
| binlog.000048 | 5534 | No |
| binlog.000049 | 157 | No |
| binlog.000050 | 504 | No |
| binlog.000051 | 180 | No |
| binlog.000052 | 180 | No |
| binlog.000053 | 826 | No |
| binlog.000054 | 201 | No |
| binlog.000055 | 157 | No |
| binlog.000056 | 1791 | No |
| binlog.000057 | 201 | No |
| binlog.000058 | 157 | No |
| binlog.000059 | 971 | No |
| binlog.000060 | 201 | No |
| binlog.000061 | 2140 | No |
| binlog.000062 | 201 | No |
| binlog.000063 | 157 | No |
| binlog.000064 | 551 | No |
| binlog.000065 | 157 | No |
| binlog.000066 | 599 | No |
| binlog.000067 | 157 | No |
| binlog.000068 | 157 | No |
| binlog.000069 | 157 | No |
| binlog.000070 | 201 | No |
| binlog.000071 | 460 | No |
| binlog.000072 | 157 | No |
| binlog.000073 | 201 | No |
| binlog.000074 | 157 | No |
| binlog.000075 | 157 | No |
| binlog.000076 | 201 | No |
| binlog.000077 | 157 | No |
| binlog.000078 | 201 | No |
| binlog.000079 | 201 | No |
| binlog.000080 | 157 | No |
+---------------+-----------+-----------+
60 rows in set (0.01 sec)
通过mysqlbinlog工具(mysql原生自带的工具)可以快速解析大量的binlog日志文件
shell> mysqlbinlog mysql-bin.000001
可以看见,图片下面有个建表语句
create 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、数据恢复
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
shell> mysqlbinlog --start-position=775 --stop-position=1410 mysql-bin.000003 |mysql -u root -p
例如:
# at 612
#241204 17:46:14 server id 1 end_log_pos 726 CRC32 0x274047b7 Query thread_id=15 exec_time=0 error_code=0 Xid = 63
SET TIMESTAMP=1733305574/*!*/;
/*!80016 SET @@session.default_table_encryption=0*//*!*/;
create database testcc
/*!*/;
# at 726
#241204 17:46:56 server id 1 end_log_pos 803 CRC32 0xa2f57962 Anonymous_GTID last_committed=3 sequence_number=4 rbr_only=no original_committed_timestamp=1733305617157030 immediate_commit_timestamp=1733305617157030 transaction_length=204
# original_commit_timestamp=1733305617157030 (2024-12-04 17:46:57.157030 CST)
# immediate_commit_timestamp=1733305617157030 (2024-12-04 17:46:57.157030 CST)
/*!80001 SET @@session.original_commit_timestamp=1733305617157030*//*!*/;
/*!80014 SET @@session.original_server_version=80040*//*!*/;
/*!80014 SET @@session.immediate_server_version=80040*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 803
#241204 17:46:56 server id 1 end_log_pos 930 CRC32 0x07dd25eb Query thread_id=15 exec_time=1 error_code=0 Xid = 68
use `testcc`/*!*/;
SET TIMESTAMP=1733305616/*!*/;
/*!80013 SET @@session.sql_require_primary_key=0*//*!*/;
create table user(name varchar(20))
/*!*/;
# at 930
#241204 17:47:17 server id 1 end_log_pos 1009 CRC32 0x57b8a615 Anonymous_GTID last_committed=4 sequence_number=5 rbr_only=yesoriginal_committed_timestamp=1733305637724198 immediate_commit_timestamp=1733305637724198 transaction_length=294
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1733305637724198 (2024-12-04 17:47:17.724198 CST)
# immediate_commit_timestamp=1733305637724198 (2024-12-04 17:47:17.724198 CST)
/*!80001 SET @@session.original_commit_timestamp=1733305637724198*//*!*/;
/*!80014 SET @@session.original_server_version=80040*//*!*/;
/*!80014 SET @@session.immediate_server_version=80040*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1009
#241204 17:47:17 server id 1 end_log_pos 1086 CRC32 0xafff30b0 Query thread_id=15 exec_time=0 error_code=0
SET TIMESTAMP=1733305637/*!*/;
BEGIN
/*!*/;
# at 1086
#241204 17:47:17 server id 1 end_log_pos 1142 CRC32 0xb84eb2b4 Table_map: `testcc`.`user` mapped to number 97
# has_generated_invisible_primary_key=0
# at 1142
#241204 17:47:17 server id 1 end_log_pos 1193 CRC32 0x9bd9ee20 Write_rows: table id 97 flags: STMT_END_F
BINLOG '
JSVQZxMBAAAAOAAAAHYEAAAAAGEAAAAAAAEABnRlc3RjYwAEdXNlcgABDwJQAAECA/z/ALSyTrg=
JSVQZx4BAAAAMwAAAKkEAAAAAGEAAAAAAAEAAgAB/wAIemhhbmdzYW4ABGxpc2kg7tmb
'/*!*/;
# at 1193
#241204 17:47:17 server id 1 end_log_pos 1224 CRC32 0x7ffbc10c Xid = 69
COMMIT/*!*/;
# at 1224
#241204 17:48:41 server id 1 end_log_pos 1301 CRC32 0x055f777d Anonymous_GTID last_committed=5 sequence_number=6 rbr_only=nooriginal_committed_timestamp=1733305721708032 immediate_commit_timestamp=1733305721708032 transaction_length=187
# original_commit_timestamp=1733305721708032 (2024-12-04 17:48:41.708032 CST)
# immediate_commit_timestamp=1733305721708032 (2024-12-04 17:48:41.708032 CST)
/*!80001 SET @@session.original_commit_timestamp=1733305721708032*//*!*/;
/*!80014 SET @@session.original_server_version=80040*//*!*/;
/*!80014 SET @@session.immediate_server_version=80040*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1301
#241204 17:48:41 server id 1 end_log_pos 1411 CRC32 0x7d2caeb7 Query thread_id=15 exec_time=0 error_code=0 Xid = 73
SET TIMESTAMP=1733305721/*!*/;
drop database testcc
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
我创建了一个testcc数据库,然后删除,我需要恢复这个数据库
root@zjz-VMware-Virtual-Platform:~# mysqlbinlog --start-position=612 --stop-position=1301 /var/lib/mysql/binlog.000080 | mysql -u root -p
Enter password:
5、数据备份
使用mysql自带的mysqldump工具导出数据
root@zjz-VMware-Virtual-Platform:~# mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
root@zjz-VMware-Virtual-Platform:~#
备份testcc的user表
mysqldump -u root -p testcc user > ~/user.sql
root@zjz-VMware-Virtual-Platform:~# mysqldump -u root -p testcc user > ~/user.sql
Enter password:
root@zjz-VMware-Virtual-Platform:~# ls
snap user.sql
root@zjz-VMware-Virtual-Platform:~# cat user.sql
-- MySQL dump 10.13 Distrib 8.0.40, for Linux (x86_64)
--
-- Host: localhost Database: testcc
-- ------------------------------------------------------
-- Server version 8.0.40-0ubuntu0.24.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES ('zhangsan'),('lisi');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-12-04 17:55:54
root@zjz-VMware-Virtual-Platform:~#
还有常用的导出:
mysql -u root -p -D school -e "select *from user where age>18" > ~/user.txt
6、导入数据
加载数据,假设在zjz用户下有一份sql数据
zjz@zjz-VMware-Virtual-Platform:~$ cat user.sql
-- MySQL dump 10.13 Distrib 8.0.40, for Linux (x86_64)
--
-- Host: localhost Database: testcc
-- ------------------------------------------------------
-- Server version 8.0.40-0ubuntu0.24.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `user`
--
create database testcc;
use testcc;
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES ('zhangsan'),('lisi');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-12-04 17:55:54
zjz@zjz-VMware-Virtual-Platform:~$
导入
mysql> SOURCE /home/zjz/user.sql;
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.04 sec)
Database changed
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.08 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| chat |
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
| test |
| testcc |
+--------------------+
8 rows in set (0.00 sec)
mysql>
4ii6ul