数据库进阶之MySQL 程序
1.目标
1> 了解mysqlId服务端程序
2> 掌握mysql客户端程序的使用
3> 了解工具包中的其他程序
2. MySQL程序简介
本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法(如:mysql -uroot -p)。 对常⽤程序进⾏详细的讲解(实用工具的使用方法),包括它们的选项。
MySQL安装完成通常会包含如下程序:
• Linux系统程序(工具类程序)⼀般在 /usr/bin⽬录下,可以通过命令查看:ll /usr/bin/mysql*
然后还有一个:ll /usr/sbin/mysql* 命令,执行如下
• windows系统⽬录:你的安装路径\MySQL Server 8.0\bin,可以通过命令查看:dir "D:\mysql\mysql-8.3.0-winx64\bin\*.exe"
每个 MySQL 程序都有许多不同的选项。⼤多数程序都提供⼀个 --help 选项,可以使⽤该选项
来获取程序不同选项的描述。例如: mysql --help,可以通过在命令⾏或配置⽂件中指定选项来覆
盖 MySQL 程序的默认选项值
后续会详细学习以下MySQL程序
注意: 除了mysqlIds是服务端程序,后面的都是客户端工具
程序名 | 作⽤ |
mysqld(d表示daemon 表示后台程序) | MySQL的守护进程即 MySQL 服务器,要使⽤MySQL 服务器 mysqld 必须正在运⾏状态 |
mysql | MySQL客⼾端程序,⽤于交互式输⼊ SQL 语句或以批处理模式从⽂件执⾏SQL的命令⾏⼯具(登录数据库服务,输入sql语句,展示响应结果) |
mysqlcheck | ⽤于检查、修复、分析和优化表的表维护客⼾端 |
mysqldump | 将 MySQL 数据库转储到 SQL、⽂本或 XML ⽂件中的客⼾端(便于在不同的系统之间来回传输) |
mysqlimport | 将⽂本⽂件导⼊到表的客⼾端⼯具(备份和恢复再介绍) |
mysqladmin | 执⾏管理操作的客⼾端,例如创建或删除数据库、重新加载授权表、将表刷新到磁盘以及重新打开⽇志⽂件。Mysqladmin还可以⽤于从服务器检索版本、进程和状态信息。 |
mysqlshow | 显⽰数据库、表、列和索引信息的客⼾端(和mysql执行的show语法效果一样,区别是不需要登录,直接发送请求即可) |
mysqldumpslow | ⽤于读取和汇总慢速查询⽇志内容的实⽤程序(慢查询: 查询时间超过阈值,然后记录下来) |
mysqlbinlog | 从⼆进制⽇志中读取SQL语句的实⽤程序(处理二进制日志)。mysqlbinlog ⽂件中包含的已执⾏SQL语句的⽇志,可⽤于从崩溃中恢复数据。 |
mysqlslap | 客⼾端负载⼯具,模拟多个客⼾端同时访问MySQL服务器,并报告每个阶段的使⽤时间。 |
其他程序可以去官方网站看:MySQL :: MySQL 8.4 Reference Manual :: 6.5.1 mysql — The MySQL Command-Line Client
3. mysqlId - MySQL 服务器(介绍)
• mysqlId也被称为MySQL服务器(是一个服务器程序), 是⼀个多线程程序,对数据目录(mysql主要的工作目录)进⾏访问管理(包含数据库和表)。数据⽬录也是其他信息(如⽇志⽂件和状态⽂件)的默认存储位置。
• 当 MySQL 服务器启动时,会侦听指定的端⼝、处理来⾃客⼾端程序的⽹络连接,并管理不同客户
端对数据库的访问
• mysqlId 程序又很多选项可以在启动的时候指定, 可以运行下面命令进行查看
mysqld --verbose --help 注意这里不需要连接mysql服务器的
4. mysql-MySQL 命令行客户端
mysql 客户端简介
mysql 是一个简单的sql shell, 可以输入命令和执行sql语句, 当执行sql语句的时候, 查询结果以ASCII表格式显示
mysql的基本使用命令,比如连接
短选项格式
mysql -uroot -p [db_name] 最后这个参数是指定连接的是哪个数据库
我们不加mysql参数显示的结果
当我输入 mysql -uroot -p mysql 加了参数, 输入密码. 然后查看选择的数据库, 发现就是mysql数据库
相当于不加参数后, 再执行 use mysql 这个命令
另一种连接方式
长选项格式:
mysql --user=root --password [db_name]
mysql 客户端选项
指定选项的方式
• 在mysql后面的命令行列出路径 刚刚上面的长选项短选项格式就是这个
• 在mysql后面指定配置文件的路径, 以便在程序启动的时候读取配置文件中的选项, 并解析对应程序选项的值, 并应用在启动参数中
我们打开我们的MySQL客户端的路径, 然后去看它的属性
具体是这个样子
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" "-uroot" "-p" "--default-character-set=utf8mb4"
下面是解析
• 使用环境变量种的选项(不介绍)
mysql 客户端命令常用选项
选项--长格式 | 短格式 | 说明 |
--host | -h | --host = host_name,-hhost_name 连接到指定主机上的 MySQL 服务(默认的地址127.0.0.1 localhost) |
--port | -P(大写p) | --port=port_num, -pport_num TCP/IP 连接使用的端口号(默认是3306) |
user | -u | --user=user_name , -uuser_name ⽤于连接到MySQL 服务器的⽤⼾名 |
--password | -p(小写p) | --password[=password] , -p[password] ⽤于连接到MySQL 服务器的密码。可选,如果没有给出, 会提⽰⽤⼾输⼊ |
--defaults-file | --defaults-file=file_name使⽤指定的选项⽂件。如果该⽂件不存在,则会发⽣错误。 | |
--default-characterset | --default-character-set=charset_namecharset_name 将作为客户端和当前连接的默认字符集,例: utf8mb4 | |
--database | -D | --database=db_name , -Ddb_name 指定要使⽤的数据库 |
--compress | -C | --compress , -C 如果可能,压缩客户端和服务器之间传输的所有信息 |
--reconnect | --reconnect 如果客户端与服务器的连接丢失,⾃动尝试重新连接(丢失重连) | |
--quick | -q | --quick , -q 不缓存查询结果,收到⼀⾏打印⼀⾏,如果输出被挂起,可能会降低服务器速度(谨慎使用) |
--protocol | --protocol={TCP|SOCKET|PIPE|MEMORY}⽤于连接到服务器的传输协议, 默认为TCP | |
--delimiter | --delimiter=str 设置SQL语句分隔符(标记sql语句结束的字符)。默认值为分号 ( ; ) | |
--execute | -e | --execute=statement , -estatement 执⾏指定的SQL语句并退出。 直接在mysql客户端直接执行sql语句,并且直接退出, 连接成功之后, 读取execute后的sql语句,直接就会把结果返回, 不用先登录,然后写sql,然后等待结果,最后退出,直接可以通过这个参数一步搞定 |
--version | -V | --version , -V 显示版本信息并退出。 |
--help | -? | --help , -? 显示帮助信息并退出。 |
注意: 如果选项的值中包含空格,那么值需要包含在双引号中
在命令行中使用选项
规则:
1> -- 表示长格式, -表示短格式. 例如:-?和 --help 都表示MySQL 程序显示他的帮助消息
2> 选项名称区分大小写. -v 和 -V 都是合法的,但是含义不同, 他们分别是 --verbose(尽可能详细显示结果) 和 --version(显示mysql版本号) 选项的相应缩写格式
3> 在某些选项后面需要指定一个值, 比如: 长格式:mysql -h 127.0.0.1 或mysql --host=127.0.0.1 表示向客户端程序指定MySQL 服务器主机
4> 对于带值的长格式选项,使用 = 分割选项名和值, 对于短格式, 选项值就直接跟在选项之后, 也可以用空格分开. 如: 长格式: --host=127.0.0.1, 段格式: -h127.0.0.1 和-h 127.0.0.1; 但是指定密码选项的短格式,选项和值不能有空格:
mysql -ptest test是表示密码,但是没有指定要访问的数据库
mysql -p test test 表示的是指定访问的数据库, 但是没有指定密码
注意: 在命令⾏中,第⼀个不带破折号 - 的值被解析为要访问的数据库名, 选项+值是一组
5> 在选项名称中, - 和 _ 大多情况下可以互换, 但是前导破折号不能转为下划线
如: --skip-grant-tables 和 --skin_grant_tables 是等价的 但是不能写成 __skin_grant_tables
6> 对于采用数值的选项, 值的后缀可以带有K,M,G表示乘数 1024、1024^2或 1024^3(指定缓冲区大小)如: mysqladmin --count=1K --sleep=3 ping -uroot -p 告诉 mysqladmin对服务器执⾏ 1024 次 ping,每次 ping 之间休眠 3 秒
7> 在命令行中包含空格的选项值, 必须用"" 引起来, 比如我们使用 --execute/-e选项和mysql一起使用的时候, 表示把一个或多个sql语句发送给服务器执行并显示结果
没使用execute之前
使用execute后: mysql -u root -p -e "select version();select now();"
直接就返回结果
选项(配置)文件
大多数MySQL程序都可以从选项文件(配置文件)中读取启动选项. 可以在选项文件中指定常用选项, 这样就不用再每次创建程序的时候, 在命令行里面输入它们. 大部分的选项文件都是纯文本格式, 可以用文本编辑器进行创建(vscode)
使用方法
选项 --defaults-file 可以指定要使用的选项文件, 客户端程序会读取并应用选项文件中的配置
Linux
mysql --defaults-file=/etc/mysql/my.cnf -uroot -p
conf.d
mysql.conf.d/ mysql服务端
虽然把客户端和服务器的配置文件做了区分, 但是一般不会分别在对应的配置文件中配置, 而是把所有的配置都写在默认的配置文件中, 便于维护和管理
windows
mysql "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" -uroot -p 这一段是windows下默认的配置文件路径
注意, 每次修改配置之前,必须要先进行备份
如果在使用mysql程序的时候(客户端/服务端), 没有指定配置文件的路径, 那么就会自动读取默认路径下的配置文件. 下面介绍默认配置文件地址和加载顺序
选项文件位置以及加载顺序
在 Windows 系统读取选项⽂件
mysql 按照下面顺序查找并读取选项/配置 文件. 如果文件不存在则需要手动创建. 读取的顺序从上到下, 后读取的文件中配置的选项优先级越高.
⽂件名 | 说明 |
%WINDIR%\my.ini , %WINDIR%\my.cnf | 全局 |
C:\my.ini , C:\my.cnf | 全局 |
BASEDIR\my.ini , BASEDIR\my.cnf | 全局 |
defaults-extra-file | 如果存在其他选项⽂件可以通过 --defaults-extra-file选项指定 |
%APPDATA%\MySQL\.mylogin.cnf | 登录路径选项(仅限客⼾端)针对客户端的配置文件 |
DATADIR\mysqld-auto.cnf | 系统变量 (仅限服务器) 这个是放我们的数据库表的目录,实现持久化存储 |
优先级和读取顺序(注意一下)
对每个配置文件进行逐一的解释
%WINDIR%\my.ini , %WINDIR%\my.cnf
先去c盘下的windows去查看有没有my.ini, 如果有就加载并读取相应的选项值, 如果没有就继续往下找
BASEDIR\my.ini , BASEDIR\my.cnf BASEDIR这个是代表安装路径
defaults-extra-file 后面讲linux会说区别
%APPDATA%\MySQL\.mylogin.cnf 针对客户端的配置文件
DATADIR\mysqld-auto.cnf DATADIR 这个是放我们的数据库表的目录,实现持久化存储(仅用于服务器)
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini 这个默认配置文件是在上面几个执行的中间位置, 不固定. 这个路径是我们常用的操作配置文件的路径
在 Unix 和 Linux 系统上读取的选项⽂件
⽂件名 | 说明 |
/etc/my.cnf | 全局 |
/etc/mysql/my.cnf | 全局 |
$MYSQL_HOME/my.cnf | 服务器特定选项(仅限服务器) |
defaults-extra-file | 如果存在其他选项⽂件可以通过 --defaults-extra-file 选项指定 |
~/.my.cnf | ⽤⼾特定选项 |
~/.mylogin.cnf | ⽤⼾特定的登录路径选项(仅限客⼾端) |
DATADIR/mysqld-auto.cnf | 系统变量 (仅限服务器) |
读取顺序和优先级
后读取的会把前读取的覆盖掉(相同的选项值, 后面的覆盖前面的选项值). 对于俩个配置文件中配置 了相同的选项, 那么优先级高的文件就会覆盖掉优先级低的文件中的选项
对每个配置文件进行逐一的解释
/etc/my.cnf 默认是没有的
defaults-extra-file
我们去官方文档进行查看: MySQL :: MySQL 8.0 Reference Manual :: 6.5.1.1 mysql Client Options
总结: 在widows 系统中配置文件的后缀名为 .ini 或 .conf. 在Linux 系统中配置文件的后缀名为.cnf
选项文件语法
1> 任何长选项都可以在选项文件中指定. 获取选项列表可以使用下面指令
mysql --help
2> 选项文件中指定选项时, 省略俩个前导破折号, 并且每一行表示一个选项
例子: --quick 和 --host=127.0.0.1 在选项⽂件中应表⽰成 quick 和 host=127.0.0.1 (并且需要换行)
quick
host=127.0.0.1
3> 注释: 通常时以 # 或 ; 开头
4> [group] 结点, 名称不区分大小写. 也就是当选项名称和程序名称相同, 则需要使用[]来区分时客户端还是服务器的
[mysqlId]和[mysql] 组就分别适用于mysqlId服务程序和mysql客户端程序(分开对每一个程序进行配置, 而不会影响到其他组)
5> opt_name = value (选项名和值)如: host=127.0.0.1
选项名对应的值,可以使⽤转义序列 \b , \t , \n , \r , \\ 和 \s 来表⽰退格符、制表符、换⾏符、回⻋符、反斜杠和空格字符
例子:
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
6> [client] MySQL发⾏版中所有客⼾端程序(mysql,mysqkcheck,mysqkdump....)都会读取并应⽤这个组下的选项(除了mysqld)配置的公共信息,在这个组下可以指定适⽤于所有客⼾端程序的通⽤选项,例如配置⽤⼾名和密码(但要确保只有⾃⼰才可以访问这个⽂件以防⽌密码泄漏)也就是所有客户端程序都会读取client这个结点下配置的公共信息(客户端的公共信息都可以写到[client]里面
例子:
# 在当前⽤⼾的home⽬录下创建.my.cnf,并在[client]写⼊公共配置
# 这⾥主要设置⽤了主机、端⼝、⽤⼾名、密码
输入 vim mysql.cnf
然后我们打开编辑模式按i,然后把下面的内容粘贴进去,编辑完成按Esc 退出编辑模式, 然后输入:wq退出并保存
[client]
host=127.0.0.1
port=3306
user=root
password=12345
然后我们就可以不输入密码就进入mysql了
7>可以通过 [客⼾端程序名] 的形式为不同的客⼾端程序指定选项(自定义化的配置),例如 [mysql] ,当运⾏mysql程序时会读取并应⽤该组下的配置,如果选项名与 [client] 重复, [client] 中的
选项将会被覆盖([客⼾端程序名]结点的优先级高于[client]
# 设置为必须输⼊密码
[mysql]
password
输入mysql之后就需要输入密码了
8> 为特定 MySQL 版本设置选项可以使⽤ [mysqld-5.7] 、 [mysqld-8.0] 的组名(使用不同版本的mysqlId)
9> 在选项⽂件中使⽤ !include 指令来包含其他选项⽂件,例如: !include/home/mydir/myopt.cnf
这里面的cnf是具体的配置文件
10> 在选项⽂件中使⽤ !includedir 指令来搜索指定⽬录中的其他选项⽂件,例如: !include /home/mydir (这里面的mydir是一个指定的目录) 但不保证⽬录中选项⽂件的读取顺序(先扫描到谁, 加载谁)
注意:
1. !includedir 在 Unix和Linux 操作系统中会搜索指定⽬录下任何以 .cnf 为后缀的⽂件.在 Windows 中,会搜索指定⽬录下任何以 .ini 或 .cnf 为后缀的⽂件
2. 只会读取包含⽂件中当前客⼾端的组配置,例如当前运⾏的是mysql程序,那么只会读取[mysql]组中的选项配置
11> 在 Windows中请确保在配置⽂件的最后⼀⾏加⼀个换⾏符,否则该⾏将被忽略
例子: 设置客户端全局编码格式
输入命令: vim /etc/mysql/my.cnf
设置编码集
[client] # 所有客⼾端程序者会读取这个节点下的配置信息
default-character-set=utf8mb4 # 指定编码格式为utf8mb4
注意每次对配置文件进行修改, 我们都需要备份
cp mysql.cnf mysql.cnf.bak
mysql 客户端命令
mysql客户端命令的作用:
1> 执行sql语句
2> 执行指令
使⽤mysql客⼾端程序连接到数据库服务器之后,可以发送SQL语句到服务器执⾏,并以 ";"(分
号)、\g 或 \G结束(结束标识符)
1. ; 与 \g 结束表⽰以表格形式展⽰结果
2. \G 结束表⽰以⾏形式展⽰结果
3. 如果当前已经输⼊了⼀部分SQL 语句想重新输⼊可以输⼊Control+C中断当前输⼊
在当前模式下,mysql还有⼀组⾃⼰的命令,可以输⼊ help or \h 查看命令列表
help/ \? 查看命令列表
clear/ \c 清除当前语句(写错了,想取消命令可以用这个)
connect/ \r 重新连接服务器
status/ \s 查看服务器状态(里面包含线程情况, 服务器版本, 字符集...)
delimiter/ \d (英文: delimiter 是定界符的意思) 可以设置mysql语句的结束标识符
exit \q | quit \q 这俩个指令都是退出mysql
tee/ \T 把执行的结果保存在一个指定的目录文件中(相当于日志)
创建文件/root/rs.txt
使用tee指令把指定txt文件作为mysql指令结果记录目录
执行mysql 语句 结果会保存在刚刚指定的路径
查看指定的 rs.txt文件 发现都是我们执行的mysql语句结果集
notee/ -t 执行结果不再写入文件
prompt/ \R 修改提示符
这个就是提示符
source/ \. 加载并执行指定的.sql脚本(把我们本机的sql语句搞到一个文件里面,然后在服务器通过这个命令把文件进行引用,然后进行执行即可)(后续会演示)
system/ \! 在mysql上执行系统命令, 非常危险
甚至可以查看密码, 十分的危险
use/ \u 使用数据库
warnings/ \W 显示警告信息
nowarning/ \w 不显示警告信息
help contents 获取服务端的帮助(集成了官方文档)
我们查看 Data Types 里面 BIT 类型的详细解释信息
从sql文件执行SQL语句
使用场景: 开发环境-->测试环境-->生产环境
使用 source命令进行导入
有时候我们需要从.sql 文件执行⼀些SQL语句,比如要把⼀个数据库从⼀台服务器A复制到另⼀台服务器B上,那么可以先从服务器A导出数据到.sql⽂件,然后在服务器B执行这个.sql⽂件,在刚刚我们学习了,用help命令查看命令列表,可以看到有⼀个source 命令如下所示:
\. sql文件的绝对路径
我们进行演示
1. 准备要执行的.sql⽂件,名为test_db.sql,内容如下:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;DROP DATABASE IF EXISTS `test_db`;
CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;USE `test_db`;-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`desc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES (1, '计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法');
INSERT INTO `classes` VALUES (2, '中文系2019级3班', '学习了中国传统文学');
INSERT INTO `classes` VALUES (3, '自动化2019级5班', '学习了机械自动化');-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'Java');
INSERT INTO `course` VALUES (2, '中国传统文化');
INSERT INTO `course` VALUES (3, '计算机原理');
INSERT INTO `course` VALUES (4, '语文');
INSERT INTO `course` VALUES (5, '高阶数学');
INSERT INTO `course` VALUES (6, '英文');-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (`score` decimal(3, 1) NULL DEFAULT NULL,`student_id` int(11) NULL DEFAULT NULL,`course_id` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (70.5, 1, 1);
INSERT INTO `score` VALUES (98.5, 1, 3);
INSERT INTO `score` VALUES (33.0, 1, 5);
INSERT INTO `score` VALUES (98.0, 1, 6);
INSERT INTO `score` VALUES (60.0, 2, 1);
INSERT INTO `score` VALUES (59.5, 2, 5);
INSERT INTO `score` VALUES (33.0, 3, 1);
INSERT INTO `score` VALUES (68.0, 3, 3);
INSERT INTO `score` VALUES (99.0, 3, 5);
INSERT INTO `score` VALUES (67.0, 4, 1);
INSERT INTO `score` VALUES (23.0, 4, 3);
INSERT INTO `score` VALUES (56.0, 4, 5);
INSERT INTO `score` VALUES (72.0, 4, 6);
INSERT INTO `score` VALUES (81.0, 5, 1);
INSERT INTO `score` VALUES (37.0, 5, 5);-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` int(11) PRIMARY KEY AUTO_INCREMENT,`sn` int(11) NOT NULL COMMENT '学号',`name` varchar(20) NOT NULL COMMENT '姓名',`mail` varchar(20) COMMENT 'QQ邮箱'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 50001, '张三', 'zs@bit.com');
INSERT INTO `student` VALUES (2, 50002, '李四', 'ls@bit.com');
INSERT INTO `student` VALUES (3, 50003, '王五', 'ww@bit.com');
INSERT INTO `student` VALUES (4, 50004, '赵六', 'zl@bit.com');
INSERT INTO `student` VALUES (5, 50005, '钱七', 'qq@bit.com');SET FOREIGN_KEY_CHECKS = 1;
把上面的sql语句保存在test_db.sql文件里面,然后传到你的服务器里面
删除 .txt文件后缀
查看当前有没有这个数据库
执行外部sql文件
查看数据库: 发现确实创建了这个数据库
注意, 执行的时候可能没有权限, 我们要切换成root用户
使⽤mysql客户端导入
不需要登录mysql而是直接在我们linux终端来执行
mysql < test_db.sql -u root -p
执行结果, 发现确实是有数据库和表
注意:
mysql db_name < text_file # 在指定的数据库下执⾏SQL,前提是数据库必须提前建⽴好
mysql < text_file # 不指定数据库.sql中必须有USE [database_name],来指定要操作的数据库
5. 工具包中其他程序的使用
程序名 | 作⽤ |
mysqld(d表示daemon 表示后台程序) | MySQL的守护进程即 MySQL 服务器,要使⽤MySQL 服务器 mysqld 必须正在运⾏状态 |
mysql | MySQL客⼾端程序,⽤于交互式输⼊ SQL 语句或以批处理模式从⽂件执⾏SQL的命令⾏⼯具(登录数据库服务,输入sql语句,展示响应结果) |
mysqlcheck | ⽤于检查、修复、分析和优化表的表维护客⼾端 |
mysqldump | 将 MySQL 数据库转储到 SQL、⽂本或 XML ⽂件中的客⼾端(便于在不同的系统之间来回传输) |
mysqlimport | 将⽂本⽂件导⼊到表的客⼾端⼯具(备份和恢复再介绍) |
mysqladmin | 执⾏管理操作的客⼾端,例如创建或删除数据库、重新加载授权表、将表刷新到磁盘以及重新打开⽇志⽂件。Mysqladmin还可以⽤于从服务器检索版本、进程和状态信息。 |
mysqlshow | 显⽰数据库、表、列和索引信息的客⼾端(和mysql执行的show语法效果一样,区别是不需要登录,直接发送请求即可) |
mysqldumpslow | ⽤于读取和汇总慢速查询⽇志内容的实⽤程序(慢查询: 查询时间超过阈值,然后记录下来) |
mysqlbinlog | 从⼆进制⽇志中读取SQL语句的实⽤程序(处理二进制日志)。mysqlbinlog ⽂件中包含的已执⾏SQL语句的⽇志,可⽤于从崩溃中恢复数据。 |
mysqlslap | 客⼾端负载⼯具,模拟多个客⼾端同时访问MySQL服务器,并报告每个阶段的使⽤时间。 |
在命令⾏中使⽤MySQL发⾏版中的其他⼯具时,⼀些选项是公共的,⽐如⽤⼾名和密码,使⽤⽅法和mysql相同,在这⾥统⼀列出,后⾯我们在介绍不同的⼯具时,只讨论个性的选项及作⽤,公共选项如下所⽰:
选项--⻓格式 | 短格式 | 说明 |
--host | -h | --host=host_name , -h host_name 连接到指定主机上的 MySQL 服务 |
--port | -P | --port=port_num , -P port_num TCP/IP 连接使⽤的端⼝号 |
--user | -u | --user=user_name , -u user_name ⽤于连接到MySQL 服务器的⽤⼾名 |
--password | -p | --password[=password] , -p[password] ⽤于连接到MySQL 服务器的密码。可选,如果没有给出, 会提⽰⽤⼾输⼊ |
--defaults-file | --defaults-file=dile_name 使用指定的选项文件, 如果该文件不存在, 则会发生错误 | |
--compress | -C | --compress,-C 如果可能, 压缩客户端和服务器之间传输的所有信息 |
--protocol | --protocol={TCP|SOCKET|PIPE|MEMORY} | |
--version | -V | --version, -V 显示版本信息并退出 |
--help | -? | --help,-? 显示帮助信息并退出 |
mysqlcheck - 表维护程序
作用
mysql客户端主要执行表维护, 可以对表进行: 分析, 检查, 优化或回复操作
• 分析的作⽤是查看表的关键字分布(定义了哪些二级索引,通过哪些where条件可以查询到),能够让 sql ⽣成正确的执⾏计划(⽀持 InnoDB,MyISAM,NDB)
• 检查的作⽤是检查表的完整性以及数据库表和索引是否损坏(当意外断电的时候,写数据有没有写完,返回错误..)(⽀持 InnoDB,MyISAM,ARCHIVE,CSV)
• 优化的作⽤是回收空间、减少碎⽚(整理磁盘碎片)、提⾼I/O(⽀持 InnoDB,MyISAM,ARCHIVE)
• 修复的作⽤是修复可能已经损坏的表(⽀持 MyISAM,ARCHIVE,CSV)
注意事项:
1. 当使⽤mysqlcheck⼯具时,MySQL服务器必须在运⾏状态
2. 执⾏过程中相应的表将会被锁定,所以其他的操作将会被挂起
3. 并不是所有的存储引擎都⽀持以上四种操作,如果遇到不⽀持的引擎会报出相应的错误
4. 执⾏表修复操作之前对表进⾏备份(修改数据库的时候觉得备份),在某些情况下可能会导致数据丢失。
使用方法:
使用三种方式来使用mysqlcheck
mysqlcheck [options] db_name [tbl_name ...] 指定数据库名,表名
mysqlcheck [options] --databases db_name ... 多个数据库mysqlcheck [options] --all-databases 2 所有的数据库
常用选项
mysqlcheck有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlcheck] 和 [client] 组进⾏指定
选项 | 说明 |
--analyze,-a | 分析表 |
--auto-repair | 如果检查的表有损坏,则⾃动修复它。所有表都检查过之后才进⾏必要的修复(自动修复) |
--check,-c | 检查表中的错误。mysqlcheck的默认操作 |
--check-only-changed,- C | 仅检查⾃上次检查以来更改过的表, 没有修改的表会被忽略 |
--databases,-B | 多个数据库名⽤空格隔开 处理指定数据库中的所有表 |
--force, -f | 即使发⽣SQL错误也要继续 |
--optimize,-o | 优化表 |
--repair,-r | 执⾏可能进⾏的任务修复操作,除了唯⼀键 |
--skip-database | --skip-database=db_name不需要执⾏检查的数据库名(区分⼤⼩写)(跳过哪些数据库) |
--tables | --tables=table_name 多个表名⽤空格隔开 在选项之后的所有名称参数都被视为表名。 |
--use-frm | 对于MyISAM表的修复操作 |
分析表: mysqlcheck -a 数据库名称 -u root -p
检查表: mysqlcheck --check 数据库名称 -uroot -p
修复表: mysqlcheck --repair 数据库名称 -uroot -p
注意: 修复不支持InnoDB存储引擎, 如果要修复InnoB存储引擎的数据, 要把InnoDB存储引擎的表转化成Mylsam存储引擎
优化表: mysqlcheck --optimize 数据库名 -uroot -p
注意:
1> InnoDB在优化过程中执行的是一个重建的操作
2> 官网建议不要经常取执行优化操作(一天,一小时算经常, 大表一个月优化一次, 小表可以不优化)
mysqlcheck的特殊使用
mysqlcheck程序的默认功能是对数据表进⾏ 检查 操作(相当于指定选项 --check ),如果想要对表进⾏修复操作,可以通过复制原来的mysqlcheck程序,并重命名为mysqlrepair,并运⾏mysqlrepair即可,还可以创建mysqlcheck的快捷⽅式,并把快捷⽅式命名为mysqlrepair然后
直接运⾏,这时就执⾏的是修复操作,通过下表所⽰的命名⽅式可以改变mysqlcheck的默认⾏为
好处: 不需要指定对应的操作选项, 只要指定数据库/表
程序名 | 说明 |
mysqlrepair | 默认⾏为是修复,相当于选项 --repair |
mysqlanalyze | 默认⾏为是修复,相当于分析 --analyze |
mysqloptimize | 默认⾏为是修复,相当于优化 --optimize |
Mysqldump - 数据库备份程序
作用: mysqldump客户端程序可以执行逻辑备份并且生成一组SQL语句, 其中包含原始数据库和表的定义以及表中的数据, 以便实现对数据库的简单备份或复制, mysqldump可以生成,.sql,csv或xml格式文件
注意事项:
1. 转储表时必须要有 SELECT 权限(查询)
2. 转储视图时必须要有 SHOW VIEW 权限
3. 转储触发器时必须要有 TRIGGER 权限
4. 如果没有使⽤ --single-transaction 选项时必须要有 LOCK TABLES 权限
5. 如果没有使⽤ --no-tablespaces 选项时必须要有 PROCESS 权限
6. 重新导⼊转储⽂件时,也需要有相应的权限(delete,update...
7. 由于mysqldump是逐⾏转储数据,所以不适⽤于⼤数据量的转储与导⼊
使用方法:
mysqldump的⽅法通常有以下使⽤,可以转储⼀个或多个表或数据库,如下所⽰:
mysqldump [options] db_name [tbl_name ...] 指定一个数据库(表名)
mysqldump [options] --databases db_name ... 指定多个数据库
mysqldump [options] --all-databases 所有的数据库
常用选项:
mysqldump有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqldump] 和[client] 组进⾏指定
选项 | 说明 |
--add-drop-database | 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句 ( 相当于 每次创建数据库 前面 drop database if exists 数据库名字) |
--add-drop-table | 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句(相当于 每次创建表 前面drop table if exists 数据表名) |
--add-drop-trigger | 在每个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句(创建触发器同上) |
--add-locks | ⽤ LOCK TABLES 和 UNLOCK TABLES 语句包裹每个表转储(锁起来, 让别的操作不要影响当下执行的操作) |
--all-databases,-A | 转储所有数据库中的所有表 |
--databases,-B | --databases=db_name 多个数据库名⽤空格隔开 将参数解释为数据库名称并转储所有的表 |
--comments,-i | 添加注释到转储⽂件 添加注释 |
--compact | 紧凑格式输出 给表添加值的时候, 一口气添加一组, 而不是一个一个添加 |
--compatible=ansi | ⽣成与其他数据库或旧MySQL服务器更兼容的输出 |
--complete-insert,-c | 使⽤包含列名的完整INSERT语句 |
--events,-E | 从转储数据库中转储事件 |
--extended-insert,-e | 使⽤多⾏INSERT语法 |
--flush-logs,-F | 在开始转储前刷新⽇志 |
--flush-privileges | 在转储后刷新权限 |
--force,-f | 转储期间发⽣了SQL错误,也要继续 |
--hex-blob | 使⽤⼗六进制表⽰法转储⼆进制列 |
--ignore-table | --ignore-table=db_name,table_name 多个表⽤空格隔开 不转储给定的表 哪些表是不需要导入的 |
--lock-all-tables,-x | 锁定所有数据库中的所有表 |
--lock-tables,-l | 在转储之前锁定指定要转储的表 |
--no-autocommot | --databases=db_name --ignore-table=db_name.table_name |
--no-create-db,-n | 不要⽣成 CREATE DATABASE 语句 不会出现drop database if exists 数据库名字 语句, 和上面相反 |
--no-create-info,-t | 不要为每个转储的表⽣成 CREATE TABLE 语句 |
--no-data,-d | 不转储表内容(不会生成 insert 语句) 默认是生成的 |
--skip-add-drop-table | 在每个 CREATE TABLE 语句之前不添加 DROP TABLE 语句 |
--skip-add-locks | 不要添加锁 |
--skip-comments | 转储⽂件中不添加注释 |
--skip-compact | 不使⽤紧凑格式 |
--skip-triggers | 不转储触发器 |
--tables | --tables=table_name 多个表名⽤空格隔开 在选项之后的所有名称参数都被视为表名。 需要转储哪些表 |
--triggers | 转储每个表中的触发器 |
--xml,-X | 以XML格式输出 指定输出格式 |
导出mysql语句: mysqldump 数据库名 > 指定的目录.sql -uroot -p 把我们的数据库以文字的形式存在文件里面(具体的数据库和表->sql语句)
查看我们转储的文件
导出单个数据库
导出所有数据库, 添加drop if exsist语句, 删除insert语句
mysqldump -A --add-drop-database --no-data > /root/dumpAll.sql -uroot -p
mysqladmin -MySQL 服务器管理程序
作用: 是一个执行管理操作的客户端. 可以用来检查服务器的配置和当前状态, 以及创建和删除数据库等(配合使用mysqladmin的用户必须具备管理员权限)
使用方法:
mysqladmin可以使用下面的语法
mysqladmin [options] command [command-arg] [command [command-arg]] ...
常用选项:
可以使用[mysqladmin]和[client]进行指定
支持的命令:
语法中的command 表⽰命令,有些命令后⾯需要跟上⼀个参数,如下列出了mysqladmin 的常⽤命令
1. version
显示服务器的版本信息: mysqladmin version -uroot -p (当前mysql的版本是多少, 协议版本,..)
2. status
查看服务器状态: mysqladmin status -uroot -p (线程数...)
参数含义
Uptime MySQL 服务器已运⾏的秒数。
Threads 活动线程(客⼾端)的数量。
Questions ⾃服务器启动以来客⼾端的问题(查询)数。
Slow queries 慢SQL的查询数。
Opens 服务器已打开的表数。
Flush tables 服务器已执⾏flush-*、refresh和reload命令的数量。
Open tables 当前打开的表数。
3. create db_name
创建一个数据库名为 db_name 的数据库: mysqladmin create 数据库名 -uroot -p
注意: 创建数据库使用的编码集是选项文件中配置的编码集, 如果没有指定那么就使用当前MySQL版本默认的编码集
4. drop db_name
删除数据库名为 db_name 的数据库: mysqladmin drop 数据库名 -uroot -p
5. extended-status
显示服务器状态变量的值 描述系统的工作状态
6. flush-hosts
刷新主机缓存中的所有信息
7. flus-logs[log_type...]
刷新所有日志, log_type 中可以提供下一种或多种日志类型binary,engine,error,general,relay,slow,多个类型之间用空格分割
8. flush-privilages
重新加载授权表
9. flush-tables
刷新所有表
10. flush-threads
刷新线程缓存
11. password new_password
设置新密码
• 如果密码中有空格必须⽤双引号把密码包裹起来
• password 后可以省略新密码,mysqladmin会在之后提⽰输⼊新密码
• password 做为最后⼀个command 时才可以省略密码值,否则下⼀个参数将作为密码被设置
12. ping
检查服务器是否可用(不断的发送请求)
13. processlist
显示活动服务器线程的列表: mysqladmin processlist -u root -p
为什么要查进程列表, 当我们服务器的可用连接占满了之后,我们需要让他自动去释放, Mysql默认可用维护150个活动连接, 如果连接被使用完, 那么就可以通过kill指令手动释放那些睡眠时间很长的连接(很多情况是死锁了不释放)
14. kill id, id,...
终止服务器线程, 如果给出了多个线程ID值, 则列表中不能有空格
此时杀死后,我们再执行杀死的那个连接, 发现进行了重新连接
15. reload
重新加载授权表
16. refresh
刷新所有表
17. shutdown
停止服务器
18. start-replica
在副本服务器上开始复制. Mysql 8.0.26后的版本开始使用
19. start-slave
在副本服务器上开始复制. 同18
20. stop-replica
停止副本服务器上的复制. MySQL 8.0.26及以后的版本使⽤此命令。
21. stop-slave
停止副本服务器上的服务.MySQL 8.0.26 之前使⽤此命令
22. variables
显示服务器系统变量及其值: mysqladmin variables -uroot -p123456
mysqlshow - 显示数据库, 表和列信息
作用:
客户端可用于快速查看哪些数据库, 数据库中的表和表中的列或索引(和show databases;返回结果一样)
注意事项:
具体可用看看官方文档: https://dev.mysql.com/doc/refman/8.0/en/show.html
使用方法:
mysqlshow [options] [db_name [tbl_name [col_name]]]
• db_name tbl_name col_name 可以使⽤通配符 * 、 ? 、 % 或 _
• 如果没有指定数据库,则显⽰所有数据库名称列表。
• 如果没有指定表,则显⽰数据库中所有匹配的表。
• 如果没有指定列,则显⽰表中所有匹配的列和列类型。
• 输出仅显⽰当前权限可以访问的数据库、表或列的名称。
常用选项:
显示指定数据库中的表: mysqlshow 数据库名 -uroot -p123456
显示表中所有的列: mysqlshow 数据库 数据表 -uroot -p123456
显示某个表中的某一列: mysqlshow 数据库 数据表 表里面的字段 -uroot -p123456
mysqldumpslow - 总结慢查询日志文件
作用:
在使用MySOL数据库的时候, 经常进行查询操作, 当某些查询语句执行的时间非常长, 超过了设定的阈值, 则称之为慢查询, 慢查询的相关信息被记录成一个日志叫做慢查询日志, mysqldumpslow 可用解析慢查询日志文件并汇总其内容, 有关慢查询日志的内容在服务器配置进行详细解析
进行慢查询对应的SQL优化的依据
我们先使用 mysqladmin status -u root -p123456 查看是否有慢查询语句
再通过 show variables like '%query%' 可用查看系统变量, 其中 long_query_time 是设置的慢查询的指定阈值,此时为10s, 默认的慢查询日志文件是 slow_query_log_file, 此时还涉及一个开关, slow_query_log (默认是off 不记录日志)
注意事项:
通常情况下,mysqldumpslow 会将相似的查询分组并显⽰摘要输出,⼀般会把数字和字符串⽤ N和 "S" 代替,要想显⽰真实的值可以使⽤ -a 和 -n 选项
使用方法:
语法: mysqldumpslow [options] [log_file ...] log_file是具体的慢日志保存路径
参数解释
count: 执行的次数
Time: 单次的耗时
Lock: 申请与释放锁使用的时间
Rows 获取数据所用的时间
mysqldumpslow常用选项
选项 | 说明 |
-a | 不⽤ N 和 'S' 代替numbers和String |
-n N | 在名称中包含N个以上的数字⽤ N 代替 |
-g pattern | 仅考虑与指定模式匹配(字符串匹配操作)的慢查询 |
--help | 显⽰帮助信息并退出 |
-h host_name | 与*-slow.log⽂件名对应的MySQL服务器主机名。 可以包含通配符。默认值是*(匹配所有)。 如: /var/lib/mysql/iZ7xv6ge3eb3kvqovp1jw7Z(主机名)-slow.log 把所有集群里面慢日志都集中在一台机器上 主机级别 |
-i name | 服务器实例的名称 mysql级别 |
-l | 不要从总时间中减去锁占⽤的时间 |
-r | 倒序顺列 |
-s sort_type | 如何对输出进⾏排序 |
-t N | 显⽰输出中的前N个查询 分析前n条数据 |
--verbose , -v | 打印有关程序功能的更多信息 |
-s sort_type sort_type可选的值如下所示:
t , at : 按查询时间或平均查询时间排序,默认排序l , al : 按锁占⽤时间或平均锁占⽤时间排序
r , ar : 按发送的⾏数或平均发送的⾏数排序
c : 按计数排序
mysqlbinlog - 处理二进制日志文件
什么是二进制日志文件:
我们平时对数据库的修改,包括对数据的增删改,都会被描述成⼀个"事件",每个"事件"都会以⼆进制的形式记录在⼀个⽂件⾥,这个⽂件就是服务器的⼆进制⽇志⽂件,称为Binary Log或binlog 关于⼆进制⽇志⽂件的具体格式与使⽤场景我们在MySQL 主从复制(集群部署的时候,数据库的查询比写使用更加频繁, 此时就会把集群分为主节点和若干个从结点,主结点写入,从结点查询,写入的数据(修改数据)会把这个操作作为一个事件保存在binglog里面(某一行,某一个字符做了哪些修改),从结点会定时读取整个binglog,把里面的二进制解析成sql语句然后执行一次, 这就是主从同步)专题 讲解
作用:
mysqlbinlog 能够以⽂本格式显⽰⼆进制⽇志⽂件中的内容。
注意事项
• binlog的默认保存路径是数据⽬录:
◦ Linux下默认⽬录:/var/lib/mysql
◦ Windows下默认⽬录:C:\ProgramData\MySQL\MySQL Server 8.0\Data
• binlog是以 .00000n 结尾命名的⽂件,n不断递增
# binlog的名字可以在选项⽂件⾥配置,我这⾥默认的是
binlog开头root@guangchen-vm:/var/lib/mysql# ll binlog*
mysqlbinlog使用方法
mysqlbinlog [options] log_file ...
先把字符集注解掉: vim /etc/mysql/my.cnf
然后我们输入这个指令查看二进制文件: mysqlbinlog binlog.000001
我们介绍一下一个事件
binlog.000010 的输出内容中包含各种事件,事件信息包括 SQL 语句、执⾏语句的服务器 ID、语
句执⾏时的时间戳、花费的时间等等。⽇志的具体格式我们这⾥先不做讨论。
选项文件
mysqlbinlog 有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlbinlog] 和 [client] 组进⾏指定
mysqlslap - 负载仿真客户端
作用: mysqlslap是一个诊断程序, 用于模拟MySQL服务器的客户端负载(模拟很多客户端同时连接服务器,执行很多次查询,查看服务器的负载情况,每个查询执行的时间是多少), 并报告每个阶段的时间, 就好比多个客户端正在访问服务器一样.
使用方法: mysqlslap [options]
注意事项:
1. 可以通过 --create 或 --query 选项,指定包含SQL语句的字符串或包含SQL语句的⽂件
2. 如果指定⼀个包含SQL语句的⽂件,默认情况下每⾏必须包含⼀条语句(也就是说,隐式语句分隔符是换⾏符)
3. 如果要把⼀条语句分为多⾏书写,可以使⽤ --delimiter 选项指定不同的分隔符
4. 不能在⽂件中包含注释,因为mysqlslap不能解析注释。
5. mysqlslap运⾏分为三个阶段:
a. 创建测试数据阶段:创建⽤于测试的库、表或数据,这个阶段使⽤单个客⼾端连接
b. 运⾏负载测试阶段,这个阶段可以使⽤许多客⼾端连接
c. 清理阶段:执⾏删除表,断开连接等操作,这个阶段使⽤单个客⼾端连接
示例:
1. 提供⾃定义的创建和查询语句,创建50个客⼾端连接,每个客⼾端进⾏200次 select 查询(在⼀⾏内输⼊命令)
mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);" --query="SELECT * FROM a" --concurrency=50 --iterations=200 -u root -p
然后会执行一段时间, 会生成测试报告
2. 让mysqlslap⽤包含两个 INT 列和三个 VARCHAR 列的表⾃动构建查询的SQL语句。使⽤5个客⼾端,每个客⼾端查询20次。
mysqlslap --concurrency=5 --iterations=20 --number-int-cols=2 --number-chat -uroot -p
3. 从指定的⽂件中加载创建、插⼊和查询SQL语句。SQL⽂件中的语句以 ";" 分隔。使⽤5个客⼾
端,每个客⼾端查询5次。(自己后面执行一下)
mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";" -uroot -p
常用选项:
mysqlslap 有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlslap] 和[client] 组进⾏指定
相关文章:
数据库进阶之MySQL 程序
1.目标 1> 了解mysqlId服务端程序 2> 掌握mysql客户端程序的使用 3> 了解工具包中的其他程序 2. MySQL程序简介 本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法(如:mysql -uroot -p)。 对常⽤程序进⾏详细的讲解(实用工具的使用方法)…...
细说STM32单片机FreeRTOS信号量和互斥量及二值信号量的应用实例
目录 一、信号量和互斥量概述 1、二值信号量 2、计数信号量 3、互斥量 4、递归互斥量 5、相关函数概述 (1) 负责创建的函数 (2) 负责释放和获取的函数 (3)负责返回数据的函数 二、二值信号量使用…...
云原生之认识DDD
一、DDD是什么? 领域驱动设计(DDD) 做为一种软件工程的方法论,它可以帮助我们设计高质量的软件,或者说任何工程的设计都需要方法论,不论是城市设计、建筑设计、室内设计。 比如没有方法论的情况下楼是可以盖起来的,或许整个楼道和窗户上挂满了电话线、闭路线、电线?下水…...
Kingbase 数据库物理备份与恢复操作手册
版本环境:KingbaseES V8R6 适用对象:DBA / 运维工程师 / 技术支持人员 目标用途:生产环境灾备保障、全量迁移、异地容灾恢复 一、物理备份操作流程 物理备份是指直接对数据库实例的物理文件进行复制,具备完整性强、恢复速度快等特…...
高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第四章 不定积分同步测试卷 A卷
第四章 不定积分同步测试卷 A卷 一、单项选择题(本大题共5小题,每小题3分,总计15分) 1. 2. 3. 4. 5. 二、填空题(本大题共5小题,每小题3分,总计15 分) 6. 7. 8. 9. 10. 三、求解下列各题(本大题共5小题,每小题6分,总计30…...
【刷题Day25】用户态和内核态、Reactor、虚拟内存(浅)
什么是用户态和内核态? 用户态(User Mode)和内核态(Kernel Mode)是操作系统中的两种运行模式,用于区分应用程序与操作系统内核的操作权限。 两者区别在于权限级别: 用户态:应用程…...
使用Qt Quick Controls创建自定义日历组件
目录 引言相关阅读1. DayOfWeekRow2. MonthGrid3. WeekNumberColumn 项目结构及实现工程结构图代码实现及解析1. 组件封装2. 主界面实现 运行效果 总结下载链接 引言 Qt6 Quick框架提供了一套丰富的日历相关组件,包括 MonthGrid、DayOfWeekRow 和 WeekNumberColumn…...
Java 富文本转word
前言: 本文的目的是将传入的富文本内容(html标签,图片)并且分页导出为word文档。 所使用的为docx4j 一、依赖导入 <!-- 富文本转word --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId&…...
基于 Spring Boot 瑞吉外卖系统开发(七)
基于 Spring Boot 瑞吉外卖系统开发(七) 新增菜品页面 菜品管理页面提供了一个“新增菜品”按钮,单击该按钮时,会打开新增菜品页面。 菜品分类列表 首先要获取分类列表数据。 请求路径/category/list,请求方法GE…...
react 子组件暴露,父组件接收
// Child.jsx import React, { forwardRef, useImperativeHandle, useState } from react; import { Form, Input } from antd;const Child forwardRef((props, ref) > {const [form] Form.useForm();const [customState, setCustomState] useState(默认值);useImperativ…...
如何在Spring Boot中配置自定义端口运行应用程序
Spring Boot 应用程序默认在端口 8080 上运行嵌入式 Web 服务器(如 Tomcat、Jetty 或 Undertow)。然而,在开发、测试或生产环境中,开发者可能需要将应用程序配置为在自定义端口上运行,例如避免端口冲突、适配微服务架构…...
5.第五章:数据分类的方法论
文章目录 5.1 传统分类方法5.1.1 基于规则的分类方法5.1.2 基于统计的分类方法5.1.3 传统分类方法的局限性 5.2 现代分类技术5.2.1 神经网络分类模型5.2.2 深度学习分类方法5.2.3 现代分类技术的优势 5.3 创新分类方法5.3.1 小样本学习方法5.3.2 零样本学习方法5.3.3 主动学习方…...
如何在 Unity 中导入 gltf /glb 文件
遗憾的是,默认情况下,Unity 无法导入 gltf 文件。 我们有 个好消息要告诉你 gltf,有一种方法可以将 glb 文件格式导入 Unity! 看完这篇文章后,让我们将 “gltf, glb” 文件放入 Unity 中,并将其…...
Docker部署一款开源的极简服务器监控工具Ward内网穿透远程使用
文章目录 前言1.关于Ward2.Docker部署3.简单使用ward4.安装cpolar内网穿透5. 配置ward公网地址6. 配置固定公网地址总结 前言 各位小伙伴们,你们是不是也遇到过这样的情况:每次打开服务器管理界面,密密麻麻的数据和图表看得你眼花缭乱&#…...
Day11(回溯法)——LeetCode79.单词搜索
1 前言 今天主要刷了一道热题榜中回溯法的题,现在的计划是先刷热题榜专题吧,感觉还是这样见效比较快。因此本文主要介绍LeetCode79。 2 LeetCode79.单词搜索(LeetCode79) OK题目描述及相关示例如下: 2.1 题目分析解决及优化 感觉回溯的方…...
数据结构-图
一、图的定义与基本术语 图(Graph)是一种非线性数据结构,由顶点(Vertex)和边(Edge)组成。它包含以下基本术语: 顶点(Vertex) :是图中的数据元素。…...
数据结构-选择排序(Python)
目录 选择排序算法思想 选择排序算法步骤 选择排序代码实现 选择排序算法分析 选择排序算法思想 选择排序(Selection Sort)基本思想: 将数组分为两个区间:左侧为已排序区间,右侧为未排序区间。每趟从未排序区间中…...
[特殊字符] 分布式定时任务调度实战:XXL-JOB工作原理与路由策略详解
在微服务架构中,定时任务往往面临多实例重复执行、任务冲突等挑战。为了解决这一问题,企业级调度框架 XXL-JOB 提供了强大的任务统一调度与执行机制,特别适合在分布式系统中使用。 本文将从 XXL-JOB 的核心架构入手,详细讲解其调…...
【前端】基于 Promise 的 HTTP 客户端工具Axios 详解
Axios 详解 1. 简介 定义:Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 环境,简化 HTTP 请求的发送和处理。核心特点: 支持 Promise API,可链式调用。自动转换 JSON 数据。支持请求/响应拦截。可取…...
React Native 安卓端 android Image 播放gif webp 动态图
React Native 安卓端 android Image 播放gif webp 动态图 RN项目是0.78.2 React是19.0 基本介绍 Image 是 React Native 中用于显示各种类型图片的核心组件,支持显示网络图片、静态资源、本地图片以及 base64 编码的图片。在 Android 端,Image 组件还可…...
【mysql】windows mysql命令
终端配置环境变量,找到mysql地址放入环境变量-系统变量中 例如: C:\Program Files\MySQL\MySQL Server 8.0\bin win键R输入 sysdm.cpl 快速打开电脑变量-高级-环境变量 连接命令 mysql -u root -p 查看所有数据库 show databases; 选中数据库 …...
uniappx 打包配置32位64位x86安装包
{"app": {"distribute": {"android": {"abiFilters": ["armeabi-v7a","arm64-v8a","x86","x86_64"]}}} }...
【C++ 类和数据抽象】static 类成员
目录 一、static 类成员的基本概念 1.1 静态成员的定义 1.2 静态数据成员 1.3 静态成员函数 1.4 内存布局 1.5 访问控制 1.6 性能分析 1.7 C标准演进 二、static 类成员的特点 2.1 共享性 2.2 不依赖于对象 2.3 无 this 指针 三、静态成员的初始化规则 3.1 初始化…...
深入了解递归、堆与栈:C#中的内存管理与函数调用
在编程中,理解如何有效地管理内存以及如何控制程序的执行流程是每个开发者必须掌握的基本概念。C#作为一种高级编程语言,其内存管理和函数调用机制包括递归、堆与栈。本文将详细讲解这三者的工作原理、用途以及它们在C#中的实现和应用。 1. 递归 (Recur…...
声音分离人声和配乐-从头设计数字生命第5课, demucs——仙盟创梦IDE
demucs 伴奏提取人声分离技术具有多方面的重大意义,主要体现在以下几个领域: 音乐创作与制作 创作便利性提升:创作者能轻易获取无伴奏的人声轨道,便于对人声进行单独处理,如调整音准、音色、添加特效等,…...
基于PHP+Uniapp的互联网医院源码:电子处方功能落地方案
随着“互联网医疗”政策红利持续释放,互联网医院已成为推动医疗数字化转型的重要方向。在这一趋势下,电子处方功能模块作为核心环节,不仅直接关系到线上问诊闭环的实现,也成为系统开发中技术难度较高、业务逻辑最为复杂的一部分。…...
Linux 基础命令入门指南
在 Linux 系统中,命令行是高效操作和管理系统的核心方式。掌握一些基础命令,能够让我们更便捷地完成文件操作、系统监控、文本处理等任务。本文将为大家介绍常用的 Linux 基础命令,帮助新手快速入门。 一、文件和目录操作命令 1. ls&#x…...
(done) 吴恩达版提示词工程 3. 迭代 (控制输出长度、提取特定细节、输出 HTML 格式)
url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p3 别人的笔记 url: https://zhuanlan.zhihu.com/p/626966526 3. 迭代(Iterative) 当我使用大语言模型…...
学员答题pk知识竞赛小程序怎么做
制作学员答题PK知识竞赛小程序,主要有以下步骤: 一、规划设计 明确需求:确定小程序的使用场景是校园知识竞赛、培训机构考核还是企业内部培训等。答题功能,规定答题的具体规则,包括题目类型(单选、多选、…...
P1217 [USACO1.5] 回文质数 Prime Palindromes【python】
P1217 [USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 151 是回文质数。 写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 …...
搭建私人网站
第一章 阿里云服务器选购与配置 1.1 注册与实名认证 注册账号 访问阿里云官网,点击右上角"免费注册",填写邮箱/手机号,完成人机验证后获取验证码。 注意:企业用户需选择"企业实名认证",个人用…...
Nacos简介—1.Nacos使用简介
大纲 1.Nacos的在服务注册中心 配置中心中的应用 2.Nacos 2.x最新版本下载与目录结构 3.Nacos 2.x的数据库存储与日志存储 4.Nacos 2.x服务端的startup.sh启动脚本 5.Dubbo Nacos微服务RPC调用开发示例 6.Nacos对临时与持久化服务实例的健康检查机制 7.Nacos保护阈值机…...
【工具】使用 MCP Inspector 调试服务的完全指南
Model Context Protocol (MCP) Inspector 是一个交互式开发工具,专为测试和调试 MCP 服务器而设计。本文将详细介绍如何使用 Inspector 工具有效地调试和测试 MCP 服务。 1. MCP Inspector 简介 MCP Inspector 提供了直观的界面,让开发者能够ÿ…...
架构-项目管理
一、盈亏平衡分析 核心知识点: 基本公式 正常情况:销售额 固定成本 可变成本 税费 利润盈亏平衡时:销售额 固定成本 可变成本 税费(利润为0,即不赚不亏的临界点) 公式推导:利润 销售额…...
域控重命名导致无法登录
问题描述:公司新买了一个服务器用于替换旧服务器,旧服务器名称为server3为域控,降级后新装的服务器升级为了新域控。然后旧服务器更名为server5,新服务器server6更名为server3.重启新服务器后服务器无法登录。但是服务器相关功能都…...
C++内存管理那些事
一、C/C内存分布 【说明】: 栈又叫堆栈,是非静态局部变量、函数参数、返回值存放的区域,栈向下增长内存映射段是高效的IO映射方式,用于装载一个共享的动态内存库。用户可以使用系统接口创建共享内存,做进程间的通信堆…...
C++多态(实现部分)(一)
目录 1.多态的概念 1.1运行时多态 1.2 编译时多态 2.多态的定义以及实现 2.1 多态构成的条件 2.2 虚函数 2.3 虚函数的重写/覆盖 2.3.1 虚函数重写的两个例外 1.协变 2.析构函数的重写 2.4 override 和final关键字 2.5 重载/重写/隐藏的对比 编辑 3. 抽象类 和…...
HOW - Code Review 流程自动化
文章目录 前言流程自动化落地一、自动发起 MR(Merge Request)macOS 安装 glab方式一:使用 Homebrew(推荐) 其他平台安装方法Linux (apt)Windows(scoop 或 chocolatey) 使用示例:自动…...
自动化标注软件解析
关于PyQt5信号槽机制的解析 信号槽机制是 Qt 框架中用于对象间通信的核心机制,它基于发布-订阅模式,能够实现松耦合的组件交互。 1. 信号槽机制的基本概念 信号(Signal) 信号是对象发出的一种通知,表示某个事件发生…...
机器人结构认知与安装
机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件: OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座:包含控制主板、安全接口板、监测保护电路单元,支持外接急停开关,采用光耦…...
SQLMesh 模型选择指南:优化大型项目的模型更新
在处理大型 SQLMesh 项目时,模型之间的依赖关系可能会变得非常复杂。为了更有效地管理这些项目,SQLMesh 提供了一种模型选择机制,允许用户有针对性地选择需要更新的模型。本文将详细介绍如何使用 SQLMesh 的模型选择功能来优化项目更新过程。…...
linux:启动后,ubuntu屏幕变成红色了
屏幕启动后变成 红色背景 通常说明 显卡驱动出了问题,或者是 图形界面加载失败 使用了 fallback 模式。这种现象在 NVIDIA 驱动安装失败或显卡与驱动不兼容时常见。 🎯 先给你几个快速修复选项 ✅ 1. 进入 TTY 命令行界面 按下:Ctrl Alt …...
抖音的逆向工程获取弹幕(websocket和protobuf解析)
目录 声明前言第一节 获取room_id和ttwid值第二节 signture值逆向python 实现signature第三节 Websocket实现长链接请求protubuf反序列化pushFrame反序列化Response解压和反序列化消息体Message解析应答ack参考博客声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的…...
2194出差-节点开销Bellman-ford/图论
题目网址: 蓝桥账户中心 我先用Floyd跑了一遍,不出所料TLE了 n,mmap(int,input().split())clist(map(int,input().split()))INFfloat(inf) ma[[INF]*n for i in range(n)]for i in range(m):u,v,wmap(int,input().split())ma[u-1][v-1]wma[v-1][u-1]w#“…...
【hexo主题自定义】
主题下载安装 进入命令行,下载 NexT 主题,输入: git clone https://github.com/theme-next/hexo-theme-next themes/next 修改站点配置文件_config.yml,找到如下代码: ## Themes: https://hexo.io/themes/ theme: l…...
前后端部署
#在学习JavaWeb之后,进行了苍穹外卖的学习。在进行苍穹外卖的部署的时候,作者遇到了下面的问题# 1.前端工程nginx无法启动: 当我双击已经部署好的nginx工程中nginx.exe文件的时候,在服务中,并没有找到ngnix成功运行。…...
1.jdk+idea安装+HelloWorld项目创建
1.jdk1.8idea安装项目创建 jdk1.8安装配置环境变量 到华为镜像下载jdk,因为Oracle官网需要注册才可以下载jdk https://repo.huaweicloud.com/java/jdk/8u202-b08/ 直接下一步安装,配置环境变量 重启,执行java -version 和 javac idea下载 版本20…...
Puter部署指南:基于Docker的多功能个人云平台掌控自己的数据
前言:嗨,小伙伴们!每次开机是不是都要像参加点击大赛一样不停地敲击各种网盘和应用的登录按钮?更让人抓狂的是,这些科技巨头会不会偷偷翻阅我们的隐私数据呢?别担心,今天给大家安利一个超炫酷的…...
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
本文提出了一种基于机器学习的智能嗅探机制,革新性地应用于自动判定动态渲染页面中AJAX加载的最佳触发时机。系统架构采用先进模块化拆解设计,由请求分析模块、机器学习判定模块、数据采集模块和文件存储模块四大核心部分构成。在核心代码示例中…...
探索 CameraCtrl模型:视频生成中的精确摄像机控制技术
在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…...