当前位置: 首页 > 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日志管理 为什么需要日志 用于排错用来做数据分析了解程序…...

鲲鹏麒麟安装离线版MySQL5.7

最近有项目需求&#xff0c;需要在鲲鹏ARM服务器上安装数据库MySQL5.7&#xff0c;服务器为鲲鹏920&#xff0c;操作系统Kylin Linux Advanced Server release V10 (Tercel) 安装包 下载地址&#xff1a;https://cloud.189.cn/t/JRVnmeEvMRZ3&#xff08;访问码&#xff1a;t…...

【不稳定的BUG】__scrt_is_managed_app()中断

【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能&#xff0c;仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...

MyBatis 详解

MyBatis 是一个优秀的 持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射&#xff0c;能够很好地降低 Java 应用程序对数据库操作的复杂性。以下是对 MyBatis 的详细解析&#xff1a; 1. MyBatis 简介 MyBatis 是 Apache 的一款开源框架&#xff0c;其核心特性是…...

Cursor+Devbox AI开发快速入门

1. 前言 今天无意间了解到 Cursor 和 Devbox 两大开发神器,初步尝试以后发现确实能够大幅度提升开发效率,特此想要整理成博客以供大家快速入门. 简单理解 Cursor 就是一款结合AI大模型的代码编辑器,你可以将自己的思路告诉AI,剩下的目录结构的搭建以及项目代码的实现均由AI帮…...

编写按层次顺序(同一层自左至右)遍历二叉树的算法。或:按层次输出二叉树中所有结点;

解&#xff1a;思路&#xff1a;既然要求从上到下&#xff0c;从左到右&#xff0c;则利用队列存放各子树结点的指针是个好办法。 这是一个循环算法&#xff0c;用while语句不断循环&#xff0c;直到队空之后自然退出该函数。 技巧之处&#xff1a;当根结点入队后&#xff0c;会…...

docker 安装mysql8.0.29

docker 安装mysql8.0.29 1、拉取镜像 docker pull mysql:8.0.292、启动容器 docker run -p 3306:3306 --name mysql8.0.29 -e MYSQL_ROOT_PASSWORDroot -d mysql:8.0.29-p 将本地主机的端口映射到docker容器端口(因为本机的3306端口已被其它版本占用&#xff0c;所以使用330…...

vue深入理解输入框字符限制的优化设计

文章目录 深入理解输入框字符限制的优化设计背景与挑战输入框限制的重要性常见需求 多种实现方法解析方法一&#xff1a;基于实时过滤的字符限制方法二&#xff1a;借助正则验证方法三&#xff1a;提交时二次校验 性能优化无障碍设计延伸场景与最佳实践1. 多语言国际化支持2. 动…...

完整指南:在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK

完整指南&#xff1a;在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK 要在Ubuntu 20.04系统中使用ROS 1环境配置和使用Orbbec SDK&#xff0c;可以遵循以下详细且系统化的步骤。这些步骤将引导您从下载必要的工具和SDK到学习如何使用这些资源&#xff0c;确保您能有效地利用…...

【Leetcode Top 100】138. 随机链表的复制

问题背景 给你一个长度为 n n n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 r a n d o m random random&#xff0c;该指针可以指向链表中的任何节点或空节。 构造这个链表的 深拷贝。 深拷贝应该正好由 n n n 个 全新 节点组成&#xff0c;其中每个新节点的值…...

2024年12月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同 更新时间&#xff1a;2024年12月3日 这是基础认证题库&#xff0c;不是高级认证题库注意看清楚标…...

Flink问题总结

目录 1、Flink 的四大特征(基石) 2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法) 3、什么是侧道输出流,有什么用途 4、Flink 中两个流如何合并为一个流 5、Flink 中两个流如何 join 6、Flink 中都有哪些 window,什么是滑动,滚动窗口 7、flink 中都有哪些…...

Day17 C++ vector 容器

2024.12.3 C vector 容器 C vector 容器 类比成数组 C 中的 vector 是一种序列容器&#xff0c;它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构&#xff0c;但它可以自动管理内存&#xff0c;这意味着你不需要手动分配和释放内存。 与 C 数组相比&a…...

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…...

AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理

文章目录 问题目前解决效果 v1思路 目前解决效果 v0思路 代码V1 问题 自己封装的 AgGrid 如何自定义传递 icon &#xff0c;以及点击事件的处理&#xff1f; 目前解决效果 v1 思路 目前解决效果 v0 思路 一张图片说明一下 代码 V1 父组件使用 <template><MyPageL…...

vb.net常用命名空间

.NET的命名空间分为两个主要部分。一个是与微软程序语言相关的microsoft,一个是与操作系统相关的system,其中system主要分为应用程序类的命名空间和WEB程序类的命名空间两部分。 下面是常见的命名空间&#xff1a; Microsoft.VisualBasic 包含VB.NET的RUNTIME和编译运行VB程序…...

Netty面试内容整理-Netty 工作原理

Netty 的工作原理主要基于异步、事件驱动的 I/O 模型,结合 Reactor 多线程模式和高效内存管理来实现高并发网络通信。以下是 Netty 的工作原理详细解析: Reactor 线程模型 Netty 基于 Reactor 模式 来处理并发连接和 I/O 操作,主要分为 单线程模型、多线程模型 和 主从多线程…...

CMD 介绍

CMD 介绍 CMD 是 Windows 操作系统中的命令提示符&#xff08;Command Prompt&#xff09;程序&#xff0c;它是一种命令行工具&#xff0c;可以让用户通过键入命令来与计算机进行交互。 DOS: disk operating system, 磁盘操作系统. 是利用命令行来操作计算机. DOS 不是 CMD…...

【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器

对于生命&#xff0c;你不妨大胆一点&#xff0c; 因为我们始终要失去它。 --- 尼采 --- ✨✨✨项目地址在这里 ✨✨✨ ✨✨✨https://gitee.com/penggli_2_0/TcpServer✨✨✨ 仿mudou的高并发服务器 1 前言2 Util工具类3 HTTP协议3.1 HTTP请求3.2 HTTP应答 4 上下文解析模块…...

Android 使用TabLayout + ViewPager2 实现标签页的视图切换

学习笔记 步骤概览 添加依赖创建布局文件创建 ViewPager2 适配器设置 TabLayout 和 ViewPager2 的联动自定义每个页面内容&#xff08;Fragment&#xff09;自定义 TabLayout 样式&#xff08;可选&#xff09; 1. 添加依赖 首先&#xff0c;你需要在 build.gradle 文件中添…...

vue 项目实现阻止浏览器记住密码

​在各个浏览器中&#xff0c;登录输入密码一般都会弹出是否记住密码的功能&#xff0c;如果记住之后&#xff0c;会在各个密码框自动填充记住的密码&#xff0c;这无疑是一种不安全的操作&#xff0c;所以要实现禁用阻止浏览器记住密码的行为 查阅资料&#xff0c;也得到很多…...

7. 一分钟读懂“单例模式”

7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统&#xff0c;无论有多少员工提交打印任务&#xff0c;大家的请求都汇总到唯一的打印管理中心&#xff0c;按顺序排队输出。这个中心必须全局唯一&#xff0c;避免多个队列出现资源冲突&#xff0c;保证打印任务井然有序。…...

28个炫酷的纯CSS特效动画示例(含源代码)

CSS是网页的三驾马车之一&#xff0c;是对页面布局的总管家&#xff0c;2024年了&#xff0c;这里列出28个超级炫酷的纯CSS动画示例&#xff0c;让您的网站更加炫目多彩。 文章目录 1. 涌动的弹簧效果2. 超逼真的3D篮球弹跳&#xff0c;含挤压弹起模态3. 鼠标放div上&#xff0…...

百问FB网络编程 - 主要函数介绍

6.3 网络编程主要函数介绍 下面全部函数的头文件都是 #include <sys/types.h> #include <sys/socket.h>6.3.1 socket函数 int socket(int domain, int type,int protocol);此函数用于创建一个套接字。 domain是网络程序所在的主机采用的通讯协族(AF_UNIX和AF_I…...

Unity类银河战士恶魔城学习总结(P155 More example on audio effects更多的音效细节)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节添加了更多的音效细节 音频管理器 AudioManager.cs 使得多个音效可以同时播放&#xff0c;注释掉以下代码 public void PlaySFX(in…...

【题解】—— LeetCode一周小结48

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结47 25.网络延迟时间 题目链接&#xff1a;743. 网络延迟时间 …...

040集——CAD中放烟花(CAD—C#二次开发入门)

效果如下&#xff1a; 单一颜色的烟花&#xff1a; 渐变色的火花&#xff1a; namespace AcTools {public class HH{public static TransientManager tm TransientManager.CurrentTransientManager;public static Random rand new Random();public static Vector3D G new V…...

一文理解多模态大语言模型——下

作者&#xff1a;Sebastian Raschka 博士&#xff0c; 翻译&#xff1a;张晶&#xff0c;Linux Fundation APAC Open Source Evangelist 编者按&#xff1a;本文并不是逐字逐句翻译&#xff0c;而是以更有利于中文读者理解的目标&#xff0c;做了删减、重构和意译&#xff0c…...

ROS2创建 base 包用于其他模块的参数配置和头文件依赖

Demo 背景 ROS2项目开发中存在以下需求&#xff1a;有多个包需要读取一些共同的配置项(以txt或者yaml形式存在&#xff09;&#xff0c;且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...

自然语言处理期末试题汇总

建议自己做&#xff0c;写完再来对答案。答案可能存在极小部分错误&#xff0c;不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …...