当前位置: 首页 > news >正文

MySQL备份恢复

华子目录

  • MySQL日志管理
    • `为什么需要日志`
    • `日志作用`
    • `日志文件查看方法`
    • `错误日志`
    • `通用查询日志`
    • `慢查询日志`
      • 示例
    • `撤销日志`
    • `重做日志`
    • `二进制日志`---`重要`
    • `中继日志`
  • MySQL备份
    • 备份类型
    • 逻辑备份优缺点
    • 备份内容
    • 备份工具
    • 导入sql文件

MySQL日志管理

为什么需要日志

  • 用于排错
  • 用来做数据分析
  • 了解程序运行情况,了解MySQL性能

日志作用

  • 数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,就必须保证数据安全性完整性,则需要使用日志查看或者恢复数据

日志文件查看方法

  • 由于多种安装mysql方法可能导致文件存储位置名称不同,需要先通过mysql配置文件确定错误日志文件位置名称
[root@mysql ~]# cat /etc/my.cnf
log-error=/var/log/mysqld.log  #错误日志
  • 查看mysql数据目录中的日志文件
[root@mysql ~]# cat /etc/my.cnf
datadir=/var/lib/mysql

错误日志

错误日志记录以下信息:

  • 服务器启动关闭过程中的信息
  • 服务器运行过程中的错误信息
  • 事件调度器运行一个时间产生的信息
  • 从服务器上启动从服务器进程是产生的信息
#查看错误日志位置及文件名,一般以主机名.err方式命名
mysql> show variables like "log_error";
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |  #错误日志文件在主机中的存储位置
+---------------+---------------------+
  • 错误日志信息需要注意三类[System][Warning][Error]
  1. [System]

    • 描述[System] 级别的日志条目通常记录的是系统级信息,比如MySQL服务启动停止时间配置文件读取情况、系统变量设置等。
    • 用途:这些信息对于理解数据库服务器启动过程、配置文件的加载以及系统变量的最终设置状态非常有用。
  2. [Warning]

    • 描述[Warning] 级别的日志条目记录的是警告信息,这些信息表明数据库操作中存在潜在的问题不符合预期行为,但这些问题通常不会导致数据库立即停止工作数据丢失
    • 用途警告信息可以帮助数据库管理员DBA识别解决可能的问题源,从而避免未来可能出现的更严重问题。
  3. [Error]

    • 描述[Error] 级别的日志条目记录的是错误信息,这些信息表明数据库操作中遇到了严重问题,可能会导致数据库功能受限性能下降数据损坏
    • 用途错误信息对于快速定位解决问题至关重要。DBA应该立即关注这些条目,并根据错误信息进行故障排除修复

通用查询日志

  • 由于数据库一般有多条连接不一定本地连接,所以需要记录每个连接客户端所有操作,包括启动关闭MySQL服务更新语句查询语句等,从而产生查询日志
  • 查看设置状态
mysql> show global variables like "%general_log%";
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      |  #默认关闭
| general_log_file | /var/lib/mysql/mysql.log |  #通用日志文件存储位置
+------------------+--------------------------+
  • 启动通用查询日志
mysql> set global general_log=1;mysql> show global variables like "%general_log%";
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | ON                       |
| general_log_file | /var/lib/mysql/mysql.log |
+------------------+--------------------------+# 注意这是临时更改,若永久更改则在my.cnf中配置general-log=1,并重启服务
# 注意可以在my.cnf中设置  general_log_file=路径/文件名  的形式设置永久更改存储位置
  • 设置日志记录类型/文本文件/
mysql> show variables like "%log_output%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
#注意可以在my.cnf中设置log-output={TABLE|FILE|NONE}类型

注意

  • 要启用通用查询日志,需要至少配置general-log=1log-output={TABLE|FILE}
  • general_log_file如果没有指定默认名是:主机名.log
  • 默认通用查询日志不开启的,因为会消耗大量的磁盘空间CPU以及内存,所以当需要通过查询日志还原操作场景准确定位问题时可以短时间开启
# 可以通过下面的查询测试查询日志的文件变化
mysql> show variables like "%general_log%";
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | ON                       |
| general_log_file | /var/lib/mysql/mysql.log |
+------------------+--------------------------+mysql> use view;mysql> show tables;
+----------------+
| Tables_in_view |
+----------------+
| class          |
| student        |
| viewInfo_stu   |
| view_stu       |
| view_stu1      |
+----------------+mysql> select * from student;
+----+-------+-----+--------+--------------------+---------+
| id | name  | age | gender | address            | classid |
+----+-------+-----+--------+--------------------+---------+
|  1 ||  21 | M      | 陕西省西安市       |    1003 |
|  2 | rong  |  18 | F      | 陕西省榆林市       |    1001 |
|  3 | yuan  |  19 | M      | 陕西省西安市       |    1002 |
|  5 | hua   |  10 | M      | 山西省             |    1001 |
|  6 | huazi |   9 | M      | 山西省             |    1002 |
+----+-------+-----+--------+--------------------+---------+
[root@mysql ~]# cat /var/lib/mysql/mysql.log
/usr/sbin/mysqld, Version: 8.4.3 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
2024-11-30T07:52:20.060357Z        15 Init DB   view
2024-11-30T07:52:20.061025Z        15 Query     show databases
2024-11-30T07:52:20.061583Z        15 Query     show tables
2024-11-30T07:52:20.062232Z        15 Query     SELECT * FROM `class` LIMIT 0
2024-11-30T07:52:20.063133Z        15 Query     SELECT * FROM `student` LIMIT 0
2024-11-30T07:52:20.063937Z        15 Query     SELECT * FROM `viewInfo_stu` LIMIT 0
2024-11-30T07:52:20.064518Z        15 Query     SELECT * FROM `view_stu` LIMIT 0
2024-11-30T07:52:20.064896Z        15 Query     SELECT * FROM `view_stu1` LIMIT 0
2024-11-30T07:52:29.367548Z        15 Query     show tables
2024-11-30T07:52:43.639933Z        15 Query     select * from student
  • 关闭通用查询日志
mysql> set global general_log=0;
Query OK, 0 rows affected (0.00 sec)mysql> show variables like "%general_log%";
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      |
| general_log_file | /var/lib/mysql/mysql.log |
+------------------+--------------------------+

慢查询日志

  • 慢日志记录所有执行时间超过long_query_time秒所有查询不使用索引查询
  • 解释:若某条查询语句执行时间过长超过设定的阈值则就会记录慢日志中,可以对其进行后期select语句优化
  • 查看慢查询日志状态
mysql> show variables like "%slow_query_log%";
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log      | ON                            |  #开启状态
| slow_query_log_file | /var/lib/mysql/mysql-slow.log | #日志文件位置
+---------------------+-------------------------------+
  • 开启慢查询日志
mysql> set global slow_query_log=1;
# 注意:为了服务器调优,建议开启
  • 慢日志时间阈值
mysql> show variables like "%long_query_time%";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 10.00000 |  #默认为10秒,精度可以到微秒
+-----------------+----------+

示例

mysql> show variables like "%slow_query_log%";
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| slow_query_log      | OFF                              |
| slow_query_log_file | /data/mysql/mysql-node1-slow.log |
+---------------------+----------------------------------+mysql> show variables like "%long_query_time%";
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+mysql> set global slow_query_log=1;mysql> select sleep(11);
#等待11秒
[root@mysql-node1 ~]# cd /data/mysql/
[root@mysql-node1 mysql]# cat mysql-node1-slow.log
/usr/local/mysql/bin/mysqld, Version: 5.7.44-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /data/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2024-12-01T14:05:19.572448Z
# User@Host: root[root] @ localhost []  Id:     2
# Query_time: 11.008686  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
use db_hua;
SET timestamp=1733061919;
select sleep(11);

在这里插入图片描述

撤销日志

  • Undo-log日志:即撤销日志回滚日志Undo撤销的意思,在日常开发过程中,如果代码敲错了,一般会习惯性的按下Ctrl+Z撤销,而Undo-log的作用也是如此,但它是用来给MySQL撤销SQL操作的。
  • Undo-log日志记录内容:
    • 若是insert插入操作,则生成一个对应的delete操作。
    • 若是delete删除操作,InnoDB中会修改隐藏字段deleted_bit=1,则生成改为0的语句。
    • 若是update修改操作,如:将性别改成了,则就生成一个从改回操作
  • 可以理解为:当一条写入类型SQL执行时,都会在Undo-log日志中生成相应反SQL放入到Undo-log
#从mysql8.0.20版本开始存储位置
[root@mysql ~]# cd /var/lib/mysql/
[root@mysql mysql]# ls  #以undo开头的文件是撤销日志
undo_001  
undo_002

重做日志

  • InnoDB引擎设计时是基于磁盘存储数据的,当MySQL启动后就会在内存中创建一个BufferPool运行过程中会将大量操作汇集在内存进行,比如写入数据时,先写到内存中,然后由后台线程刷写磁盘
  • 虽然使用BufferPool提升了MySQL整体的读写性能,但它是基于内存的,也就意味着随着机器宕机重启,其中保存的数据消失,当向内存写入数据后,MySQL突然宕机了,则这条未刷写磁盘数据丢失,也正由于该原因redo-log应运而生
  • redo-log重做日志,是一种预写式日志,即在向内存写入数据前,会先写日志,当后续数据未被刷写磁盘MySQL崩溃时,就可以通过日志恢复数据,确保所有提交事务都会被持久化
  • mysql8Redo-log存储在/var/lib/mysql/#innodb_redo目录下,由32文件组成有两种类型redo log文件,一种是当前正在使用#ib_redoN;另一种是空闲的文件名#ib_redoN_tmp,多加了个_tmp后缀
mysql> select * from performance_schema.innodb_redo_log_files\G;
*************************** 1. row ***************************FILE_ID: 148FILE_NAME: ./#innodb_redo/#ib_redo148START_LSN: 484671488END_LSN: 487946240SIZE_IN_BYTES: 3276800IS_FULL: 0
CONSUMER_LEVEL: 0
mysql> show status like "%innodb%redo%";
+-------------------------------------+-----------+
| Variable_name                       | Value     |
+-------------------------------------+-----------+
| Innodb_redo_log_read_only           | OFF       |
| Innodb_redo_log_uuid                | 952782583 |
| Innodb_redo_log_checkpoint_lsn      | 486687544 |
| Innodb_redo_log_current_lsn         | 486687544 |
| Innodb_redo_log_flushed_to_disk_lsn | 486687544 |
| Innodb_redo_log_logical_size        | 512       |
| Innodb_redo_log_physical_size       | 3276800   |
| Innodb_redo_log_capacity_resized    | 104857600 |
| Innodb_redo_log_resize_status       | OK        |
| Innodb_redo_log_enabled             | ON        |
+-------------------------------------+-----------+

二进制日志重要

二进制日志作用:

  • 记录所有更改数据语句insert、update、delete等),不记录查询语句
  • 用于主从复制,因为从服务器需要到主服务器拷贝二进制日志,然后根据二进制日志内容去执行SQL语句,从而达到主从服务器里的数据一模一样
  • 用于恢复数据
  • 日志审计场景用户可以通过二进制日志中的信息来进行审计判断是否有对数据库进行注入攻击mysql注入攻击黑客可以提交一段数据库查询代码,根据程序返回的结果获得某些想要得到的数据
#开启二进制日志
[root@mysql ~]# vim /etc/my.cnf
log-bin=mysql-bin   #开启二进制日志
#二进制日志的位置
[root@mysql ~]# cd /var/lib/mysql/
[root@mysql mysql]# lsbinlog.000001binlog.000002binlog.000003binlog.000004binlog.000005binlog.000006binlog.000007binlog.000008binlog.000009
  • 查看二进制日志状态
mysql> show variables like "%log_bin%";
+---------------------------------+-----------------------------+
| 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                         |
| sql_log_bin                     | ON                          |
+---------------------------------+-----------------------------+
  • 日志查看
#查看有哪些二进制日志文件
mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     26826 | No        |
| binlog.000002 |       181 | No        |
| binlog.000003 |       158 | No        |
| binlog.000004 |       158 | No        |
| binlog.000005 |  83200151 | No        |
| binlog.000006 |     12162 | No        |
| binlog.000007 |       181 | No        |
| binlog.000008 |      2753 | No        |
| binlog.000009 |      2651 | No        |
+---------------+-----------+-----------+
#显示名称、容量单位字节、加密与否
# 查看当前正在使用的是哪一个二进制日志文件
mysql> show master status\G;
*************************** 1. row ***************************File: mysql-bin.000001Position: 154Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
#查看二进制日志内容
mysql> show binlog events in "binlog.000001";
  • 使用命令mysqlbinlog查看二进制日志内容
# 使用命令mysqlbinlog查看二进制日志内容
[root@mysql ~]# cd /var/lib/mysql/
[root@mysql mysql]# mysqlbinlog binlog.000001
  • 分割日志新的操作会记录的新的日志文件
    • 使用mysqladmin刷新日志
#每刷新一次,就会产生一个binlog日志
[root@mysql ~]# mysqladmin flush-logs -uroot -p
Enter password:[root@mysql ~]# mysql -uroot -p#新建数据库
mysql> create database mydb12_journal;
# 查看当前正在使用的是哪一个二进制日志文件
mysql> show master status;mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     26826 | No        |
| binlog.000002 |       181 | No        |
| binlog.000003 |       158 | No        |
| binlog.000004 |       158 | No        |
| binlog.000005 |  83200151 | No        |
| binlog.000006 |     12162 | No        |
| binlog.000007 |       181 | No        |
| binlog.000008 |      2753 | No        |
| binlog.000009 |      2695 | No        |
| binlog.000010 |       202 | No        |
+---------------+-----------+-----------+
[root@mysql mysql]# mysqlbinlog binlog.000010
......
create database mydb12_journal
......

日志刷新

  • 作用:通过刷新日志进行更新日志,对缓存数据进行磁盘I/O,并强制mysqld关闭重新打开日志文件(或者在某些情况下切换到一个新的日志
  • 由于日志记录不是直接写入磁盘上的日志文件中而是使用日志缓存方式,当频繁执行多条修改sql语句时,为了避免磁盘频繁I/O,会将日志记录写入到内存特殊空间日志缓存中,之后每隔一个固定时间间隔缓存的日志写入到磁盘文件

刷新日志命令格式

#每刷新一次,就会产生一个binlog文件
mysql> flush logs;
# 查看当前正在使用的是哪一个二进制日志文件
mysql> show master status;
#在shell中,通过mysqladmin命令执行日志刷新
[root@mysql ~]# mysqladmin flush-logs -uroot -p
Enter password:
#或,但是refresh会重置binlog文件,将之前的binlog文件全部删除,再新建一个binlog.00001文件
[root@mysql ~]# mysqladmin refresh -uroot -p
Enter password:

不小心删库后应该跑路吗?

  • 如果在线上真的删库了,哪就先别想着跑路你跑不掉!
  • bin-log日志中会记录执行SQL连接会话信息同时一般规模较大的企业,都会搭建完善的监控系统,会监控服务网络连接
  • 因此当你删库后,他们可以顺着bin-log → session → network-connection这条线确定执行删库SQLIP!如果你还未断开连接,直接通过MySQL命令就能定位到删库IP,因此基本上删库了,是可以定位责任人的
  • 因此当你删库后,可以直接本地Bin-log日志文件,然后拷贝出来一份,再打开最后一个文件,把里面删库记录手动移除,再利用mysqlbinlog工具导出xx.SQL文件,最后执行该SQL文件即可恢复删库前数据

中继日志

  • Relay-log中继日志,在单库中是见不到的,该类型日志仅存在主从架构中的从机

  • 主从架构中的从机,其数据基本上都是复制主机bin-log日志同步过来并放在relay-log日志中,中继日志作用就跟它的名字一样,仅仅只是作为主从同步数据的“中转站

MySQL备份

备份类型

  • 根据服务器状态,可以分为热备份温备份冷备份
    • 热备份读、写不受影响
    • 温备份可以执行读操作
    • 冷备份离线备份读、写操作均中止
  • 对象来分,可以分为物理备份逻辑备份
    • 物理备份复制数据文件
    • 逻辑备份:将数据导出至文本文件
  • 数据收集来分,可以完全备份增量备份差异备份
    • 完全备份备份全部数据
    • 增量备份仅备份上次完全备份增量备份以后变化的数据
    • 差异备份仅备份上次完全备份以来变化的数据

逻辑备份优缺点

  • 备份速度两种备份要取决于不同的存储引擎
  • 物理备份还原速度非常。但是物理备份最小粒度只能做到
  • 逻辑备份保存的结构通常都是纯ASCII的,所以我们可以使用文本处理工具处理
  • 逻辑备份有非常兼容性,而物理备份则对版本要求非常
  • 逻辑备份也对保持数据安全性保证
  • 逻辑备份缺点
    • 逻辑备份要对RDBMS产生额外的压力,而裸备份无压力
    • 逻辑备份结果可能要比源文件更大。所以很多人都对备份内容进行压缩
    • 逻辑备份可能会丢失浮点数精度信息

备份内容

  • 数据文件
  • 日志文件(比如事务日志二进制日志
  • 存储过程存储函数触发器
  • 配置文件十分重要各个配置文件都要备份
  • 用于实现数据库备份脚本数据库自身清理Crontab等……

备份工具

  • MySQL自带的备份工具mysqldump,是mysql数据库管理系统自带逻辑备份工具,支持完全备份+增加备份,速度相对较慢,适合中小型数据库支持所有引擎备份策略第一次完全备份每天一次增量备份每周再做一次完全备份,如此一直重复

完全备份语法

[root@mysql ~]# mysqldump -u用户名 --password=密码 -A > 绝对路径\备份文件.sql

备份语法

[root@mysql ~]# mysqldump -u用户名 --password=密码 -B 数据库名1 数据库名2 > 绝对路径\备份文件.sql

备份库中表语法

[root@mysql ~]# mysqldump -u用户名 --password=密码 数据库名 表1 表2 > 绝对路径\备份文件.sql
  • 示例1:使用mysqldump工具实现全量备份
# 原理:必须先做全量备份,使得数据库有一个基准还原点,在做增量备份,还原差异数据
[root@mysql ~]# mysqldump -uroot --password=123456 -A > back1.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
#警告表示将密码显示在屏幕上不安全,备份的盘符一定要和MySQL安装目录在同一个盘符中,要不然会提示:拒绝访问# 进入mysql中,删库
[root@mysql ~]# mysql -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| events             |
| huazi              |
| information_schema |
| mydb12_journal     |
| mydb13_indexdb     |
| mydb17_transcation |
| mysql              |
| performance_schema |
| sys                |
| view               |
+--------------------+mysql> drop database events;
mysql> drop database huazi;
......
mysql> drop database view;mysql> show databases;
+--------------------+
| Database           | #这3个库,root用户删不了
+--------------------+
| information_schema | 
| mysql              |
| performance_schema |
+--------------------+mysql> quit
Bye
[root@mysql ~]# mysql -uroot -p
Enter password:#全库恢复
mysql> source /root/back1.sql#发现没有对sys库做备份
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| events             |
| huazi              |
| information_schema |
| mydb12_journal     |
| mydb13_indexdb     |
| mydb17_transcation |
| mysql              |
| performance_schema |
| view               |
+--------------------+mysql> use view;mysql> show tables;
+----------------+
| Tables_in_view |
+----------------+
| class          |
| student        |
| viewInfo_stu   |
| view_stu       |
| view_stu1      |
+----------------+mysql> select * from student;
+----+-------+-----+--------+--------------------+---------+
| id | name  | age | gender | address            | classid |
+----+-------+-----+--------+--------------------+---------+
|  1 ||  21 | M      | 陕西省西安市       |    1003 |
|  2 | rong  |  18 | F      | 陕西省榆林市       |    1001 |
|  3 | yuan  |  19 | M      | 陕西省西安市       |    1002 |
|  5 | hua   |  10 | M      | 山西省             |    1001 |
|  6 | huazi |   9 | M      | 山西省             |    1002 |
+----+-------+-----+--------+--------------------+---------+
  • 示例2:局部备份恢复
#对view库做备份
[root@mysql ~]# mysqldump -uroot --password=123456 -B view > back2.sql[root@mysql ~]# mysql -uroot -p
Enter password:#删除view库
mysql> drop database view;#开始恢复
mysql> source /root/back2.sql#发现已经恢复
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| events             |
| huazi              |
| information_schema |
| mydb12_journal     |
| mydb13_indexdb     |
| mydb17_transcation |
| mysql              |
| performance_schema |
| view               |
+--------------------+mysql> use view;mysql> show tables;
+----------------+
| Tables_in_view |
+----------------+
| class          |
| student        |
| viewInfo_stu   |
| view_stu       |
| view_stu1      |
+----------------+mysql> select * from student;
+----+-------+-----+--------+--------------------+---------+
| id | name  | age | gender | address            | classid |
+----+-------+-----+--------+--------------------+---------+
|  1 ||  21 | M      | 陕西省西安市       |    1003 |
|  2 | rong  |  18 | F      | 陕西省榆林市       |    1001 |
|  3 | yuan  |  19 | M      | 陕西省西安市       |    1002 |
|  5 | hua   |  10 | M      | 山西省             |    1001 |
|  6 | huazi |   9 | M      | 山西省             |    1002 |
+----+-------+-----+--------+--------------------+---------+
  • 文件系统备份工具
    • cp命令冷备份,支持所有引擎复制命令只能实现冷备物理备份。使用归档工具cp命令,对其进行备份时,备份速度快还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差
    • lvm几乎是热备份,支持所有引擎基于快照(LVMZFS)的物理备份速度非常快几乎热备。只影响数据几秒钟而已。但是创建快照过程本身就影响到了数据库在线使用,所以备份速度比较恢复速度比较,没有什么弹性空间,而且LVM限制不能多个逻辑卷同一时间进行备份,所以数据文件事务日志各种文件必须放在同一个LVM上。而ZFS非常好的可以在多逻辑卷之间备份
  • 其它工具
    • ibbackup商业工具MyISAM温备份InnoDB热备份备份还原速度都很快这个软件它的服务器授权版本5000美元
    • xtrabackup开源工具MyISAM温备份InnoDB热备份 ,是ibbackup商业工具替代工具
    • mysqlbackup ORACLE公司也提供了针对企业备份软件MySQL Enterprise Backup简称:mysqlbackup

导入sql文件

  • 交互式
mysql> source sql文件路径
  • 非交互式
[root@mysql ~]# mysql -uroot -p123456 库名 < sql文件

相关文章:

MySQL备份恢复

华子目录 MySQL日志管理为什么需要日志日志作用日志文件查看方法错误日志通用查询日志慢查询日志示例 撤销日志重做日志二进制日志---重要中继日志 MySQL备份备份类型逻辑备份优缺点备份内容备份工具导入sql文件 MySQL日志管理 为什么需要日志 用于排错用来做数据分析了解程序…...

flask内存马的真谛!!!

flask内存马 1.概念 常用的Python框架有Django、Flask, 这两者都可能存在SSTI漏洞. Python 内存马利用Flask框架中SSTI注入来实现, Flask框架中在web应用模板渲染的过程中用到render_template_string进行渲染, 但未对用户传输的代码进行过滤导致用户可以通过注入恶意代码来实…...

【机器学习02--模型评估】

机器学习 --- 模型评估 你需要得到更好的模型&#xff0c;怎么判断模型更好呢&#xff1f;你需要先得到训练集和测试集&#xff0c;怎么划分它们呢&#xff1f;训练完模型之后&#xff0c;在验证集上测试的时候&#xff0c;用什么指标衡量好坏呢&#xff1f;云里雾里&#xff0…...

【人工智能】深入解析Python中的聚类算法:从K-Means到DBSCAN

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 聚类是一种无监督学习的核心技术,用于将数据点分组到不同的簇中,使得同一簇内的点相似度最大化,不同簇间的点差异性最大化。K-Means和DBSCAN是两种最常见的聚类算法,分别适用于密度驱动和形状复杂的数据分组需…...

【STM32 Modbus编程】-作为主设备读取线圈和输入

作为主设备读取线圈和输入 文章目录 作为主设备读取线圈和输入1、硬件准备与连接1.1 RS452模块介绍1.2 硬件配置与接线1.3 软件准备2、读取线圈2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读取输入4、结果本文将在前面文章的基础上,实现主设备通过ModBus协议对从…...

数据结构(栈Stack)

1.前言&#xff1a; 在计算机科学中&#xff0c;栈&#xff08;Stack&#xff09;是一种基础而存在的数据结构&#xff0c;它的核心特性是后进先出&#xff08;LIFO&#xff0c;Last In, First Out&#xff09;。想象一下&#xff0c;在现实生活中我们如何处理一堆托盘——我们…...

Maven 中scope 的provided、compile、runtime、test、system 含义

在 Maven 中&#xff0c;<scope> 定义了依赖的可见性和生命周期。不同的 scope 值指示 Maven 在编译、测试和运行时如何处理这些依赖。以下是 Maven 中的几种常用依赖范围及其详细说明&#xff1a; 1. <scope>provided</scope> 含义&#xff1a;provided 范…...

Nginx 负载均衡和反向代理

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器&#xff0c;广泛应用于负载均衡中。它的负载均衡功能支持多种策略&#xff0c;可以有效分配流量到后端服务器&#xff0c;提升系统的可靠性和可用性。 负载均衡 首先&#xff0c;Nginx 负载均衡配置是通过在 Nginx 配置文件…...

【网络安全】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 SecGPT 更新时间&#xff1a;2024-05-08 访问地址: GitHub 描述&#xff1a; SecGPT的愿景是将人工智能技术引入网络安全领域&#xff0c;以提高网络防御的效率和效果。其使命是推动…...

大数据(一)MaxCompute

一、引言 作者后面会使用MaxCompute&#xff0c;所以在进行学习研究&#xff0c;总会有一些疑问产生&#xff0c;这里讲讲作者的疑问和思路 二、介绍 MaxCompute&#xff08;原名 ODPS - Open Data Processing Service&#xff09;是阿里云提供的大数据处理平台&#xff0c;专…...

数据科学与大数据之间的区别

什么是数据科学&#xff1f; 数据科学是一个跨学科领域&#xff0c;它将统计学和计算方法相结合&#xff0c;旨在从数据中提取见解和知识。它涉及收集、处理、分析以及解读数据&#xff0c;以揭示可用于为决策过程提供依据并推动创新的模式、趋势和关系。 数据科学涵盖了广泛…...

IP 地理位置定位技术原理概述

本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用&#xff0c;随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议&#xff0…...

多进程multiprocessing通信multiprocessing.Queue

multiprocessing.Queue 通常只能在主模块&#xff08;即 if __name__ "__main__": 块&#xff09;中创建和使用。这是因为 multiprocessing 模块在 Windows 系统上需要通过 if __name__ "__main__": 块来避免递归导入问题。 from multiprocessing import…...

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为...

微信小程序4-内容溢出滚动条

感谢阅读&#xff0c;初学小白&#xff0c;有错指正。 一、功能描述 在前一篇文章的隐藏框页面的功能里&#xff08;《微信小程序3-显标记信息和弹框》&#xff09;&#xff0c;我想添加一个内容溢出的时候&#xff0c;可通过滑动滚动条&#xff0c;实现查看溢出部分的内容&a…...

python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250+个项目、26.6GB)

文章目录 源代码下载地址项目介绍预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250个项目、26.6GB) 预览 项目备注 1、该资源内项目代码都经过测试运行成功&#xff0c;功能ok的情…...

ProjectSend 身份认证绕过漏洞复现(CVE-2024-11680)

0x01 产品描述: ProjectSend 是一个开源文件共享网络应用程序,旨在促进服务器管理员和客户端之间的安全、私密文件传输。它是一款相当流行的应用程序,被更喜欢自托管解决方案而不是 Google Drive 和 Dropbox 等第三方服务的组织使用。0x02 漏洞描述: ProjectSend r1720 之前…...

算法训练-搜索

搜索 leetcode102. 二叉树的层序遍历 法一&#xff1a;广度优先遍历 leetcode103. 二叉树的锯齿形层序遍历 法一&#xff1a;双端队列 法二&#xff1a;倒序 法三&#xff1a;奇偶逻辑分离 leetcode236. 二叉树的最近公共祖先 法一&#xff1a;递归 leetcode230. 二叉…...

【C++】map和set

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 关联式容器2. 键值对3. set3.1 set的模板参数列表3.2 set的构造3.3 set的迭代器3.4 set的容量3.5 set修改操作3.6 multiset 4. map4.1 map的模板参数说明4.2 map的构造4.3 map的迭代器4.4 map的容量与元素访问4.5 …...

MongoDB安装|注意事项

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书&#xff0c;作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书&#xff0c;它是真正讲解Spring Boot的图书。Spring Boot的核心…...

使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错

使用playwright自动化测试时&#xff0c;npx playwright test --ui打开图形化界面时报错 1、错误描述&#xff1a;2、解决办法3、注意符号的转义 1、错误描述&#xff1a; 在运行playwright的自动化测试项目时&#xff0c;使用npm run test无头模式运行正常&#xff0c;但使用…...

Linux ufw 命令详解

简介 UFW(Uncomplicated Firewall) 简单防火墙是一款基于 iptables 构建的、用于管理防火墙规则的用户友好型工具。它简化了在 Linux 系统上配置防火墙的过程。 安装 在 Ubuntu/Debian 上安装 sudo apt update sudo apt install ufw在 CentOS/Red Hat 上安装 sudo yum ins…...

3248. 矩阵中的蛇

3248. 矩阵中的蛇 题目链接&#xff1a;3248. 矩阵中的蛇 代码如下&#xff1a; class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands){int i 0, j 0;for (string& command : commands){if (command "LEFT") { j…...

图片的懒加载

目录 懒加载的来源 事件监听 IntersectionObserver 懒加载的来源 图片的来加载其实就是延迟加载&#xff0c;我们知道浏览器的可视范围是有限的&#xff0c;现在网页的内容越来越丰富&#xff0c;一般网页的内容都是需要滚动才能完成浏览 如果网页有很多图片&#xff0c;然…...

网络脚本生成器

网络官网地址 网络配置生成工具 终端-接入-汇聚-核心-防火墙-互联网路由器 一 开局配置 华为设备配置命令 system-viewsysname SW-JR-Switchvlan 10 vlan 20 vlan 30 vlan 40 quitinterface Vlan-interface 40 ip address 192.168.40.1 255.255.255.0 quitip route-static 1…...

Kibana server is not ready yet

遇到“Kibana server is not ready yet”错误通常表示Kibana无法连接到Elasticsearch。以下是一些常见原因及其解决方案&#xff1a; 1.常见原因 1.1.Elasticsearch未运行&#xff1a; 确保Elasticsearch服务已启动并正常运行。您可以通过访问 http://localhost:9200 来检查…...

Git 高频命令及其功能、作用与使用场景

在软件开发的世界里&#xff0c;Git 已经成为了版本控制的代名词。无论你是开发小型项目还是参与大型团队协作&#xff0c;Git 都是你不可或缺的得力助手。今天我们来聊聊 Git 中的一些高频命令&#xff0c;了解它们的功能、作用以及常见的使用场景&#xff0c;帮助你在日常开发…...

将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式

文章目录 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式MathType安装问题MathType30天试用延期MathPage.wll文件找不到问题 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式 word自带公式编辑器编辑的公式格式&#xff1a; MathType编辑的格式&a…...

【HarmonyOS】Component组件引入报错 does not meet UI component syntax.

【HarmonyOS】Component组件引入报错 一、问题背景 有时会碰到引入组件时&#xff0c;无法import引入组件&#xff0c;导致引入的组件报错。 或者提示does not meet UI component syntax. &#xff08;不符合UI组件语法。&#xff09; 如下图所示&#xff0c;在引入组件时&a…...

力扣-图论-1【算法学习day.51】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

使用lumerical脚本语言创建定向耦合器并进行数据分析(纯代码实现)

本文使用lumerical脚本语言创建定向耦合器波导、计算定向耦合器的偶数和奇数模式、分析定向耦合器的波长依赖性、分析定向耦合器的间隙依赖性(代码均有注释详解)。 一、绘制定向耦合器波导 1.1 代码实现 # 这段代码主要实现了绘制定向耦合器波导几何结构的功能。通过定义各种…...

Java面试要点50 - List的线程安全实现:CopyOnWriteArrayList

文章目录 一、引入二、实现原理解析2.1 写时复制机制2.2 读写分离策略 三、性能测试分析四、应用场景分析4.1 事件监听器管理4.2 缓存实现 五、最佳实践建议5.1 性能优化技巧5.2 常见陷阱规避 总结 一、引入 在并发编程中,线程安全的集合类扮演着重要角色。CopyOnWriteArrayLi…...

python脚本实现csv中百度经纬度转84经纬度

数据准备 csv文件,带百度经纬度字段:bd09_x,bd09_y 目的 将百度经纬度转换为84经纬度,并在csv文件中添加两个字段:84_x,84_y python脚本 from ChangeCoordinate import ChangeCoordimport pandas as pd import numpy as npcoord = ChangeCoord()def bd09_to_wgs84...

Vue2和Vue3的区别

响应式系统 Vue 2 技术基础&#xff1a;使用 Object.defineProperty 实现响应式。局限性&#xff1a; 无法监听新增属性&#xff1a;如果在创建实例后添加新属性&#xff0c;这些属性不会自动成为响应式的。数组变更检测问题&#xff1a;直接通过索引设置值或长度不会触发更新…...

JavaEE-经典多线程样例

文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...

Android显示系统(04)- OpenGL ES - Shader绘制三角形

一、前言&#xff1a; OpenGL 1.0采用固定管线&#xff0c;OpenGL 2.0以上版本重要的改变就是采用了可编程管线&#xff0c;Shader 编程是指使用着色器&#xff08;Shader&#xff09;编写代码来控制图形渲染管线中特定阶段的处理过程。在图形渲染中&#xff0c;着色器是在 GP…...

PMP–一、二、三模、冲刺–分类–10.沟通管理

文章目录 技巧十、沟通管理 一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他们的项目方法中过于结构化和僵化。前军事成员认为其他团队成员更…...

flutter windows 使用c++、dll等实践记录

在flutter的windows平台引入dll文件 https://juejin.cn/post/7223676609794015287 google官方说法&#xff08;感觉不太实用&#xff09; https://groups.google.com/a/dartlang.org/g/misc/c/fyh2W38AEVo Using a C DLL in Flutter Windows desktop app&#xff08;未尝试&…...

JUnit介绍:单元测试

1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码&#xff08;Java 程序最小的功能单元是方法&#xff09;单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常&#xff1b; 如果修改了代码&#xff0c;只需要确保其对应的单元…...

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项...

【每日刷题】Day162

【每日刷题】Day162 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 3302. 字典序最小的合法序列 - 力扣&#xff08;LeetCode&#xff09; 2. 44. 通配符匹配 - 力扣&…...

使用 EasyExcel 实现高效的 Excel 读写操作

在日常开发中&#xff0c;Excel 文件的读写操作是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库&#xff0c;可以大幅提高处理 Excel 文件的效率。它通过事件驱动模型优化了大数据量 Excel 的读写性能&#xff0c;非常适合处理大文件或高并发场景…...

千益畅行,旅游卡有些什么优势?

千益畅行共享旅游卡是一种创新的旅游服务模式&#xff0c;旨在通过整合各类旅游资源&#xff0c;为用户提供一站式的旅游解决方案。这张旅游卡支持2至6人同行&#xff0c;涵盖了接机、酒店、用餐、大巴、导游、景区门票等服务&#xff0c;用户只需自行承担往返交通费用即可享受…...

Hive分区裁剪(Partition Pruning)详解

Hive分区裁剪是一种优化技术&#xff0c;旨在查询时只读取与条件匹配的分区&#xff0c;从而减少不必要的数据扫描。这种机制依赖于分区表的设计和查询优化器的工作&#xff0c;特别是在处理大规模数据时&#xff0c;分区裁剪可以显著提高查询性能。 1. 什么是分区裁剪&#xf…...

云原生数据库 PolarDB

PolarDB 是阿里云推出的一款云原生数据库&#xff0c;旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计&#xff0c;特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库&#xff08;RDS&#xff09;和分布式数据库特性的新型数据…...

数据库原理-期末基础知识

1、数据库管理系统有哪些功能&#xff1f; 数据定义功能、数据操作功能、数据库的运行管理、数据库的建立与维护。 2、数据库设计分哪几个阶段&#xff1f; 需求分析->概念设计->逻辑设计->物理设计->数据库实施->数据的运营与维护 3、简述三级封锁协议的内…...

Java版-速通数据结构-树基础知识

现在面试问mysql,红黑树好像都是必备问题了。动不动就让手写红黑树或者简单介绍下红黑树。然而&#xff0c;我们如果直接去看红黑树&#xff0c;可能会一下子蒙了。在看红黑树之前&#xff0c;需要先了解下树的基础知识&#xff0c;从简单到复杂&#xff0c;看看红黑树是在什么…...

量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于MT4/MT5平台介绍。 MetaT…...

Git 的基本概念和使用方式

Git是一个分布式版本控制系统&#xff0c;用于跟踪文件内容的变化和协作开发。 Git的主要概念包括&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;存储代码和历史记录的地方。可以是本地仓库&#xff08;Local Repository&#xff09;或远程仓库&#xff08…...

Conda-Pack打包:高效管理Python环境

在Python开发中&#xff0c;环境管理是一个不可忽视的重要环节。Conda是一个流行的包管理器和环境管理器&#xff0c;它允许用户创建隔离的环境&#xff0c;以避免不同项目之间的依赖冲突。Conda-pack是一个工具&#xff0c;可以帮助我们将一个conda环境打包成一个可移植文件&a…...