一级a做爰片免费网站神马电影,做网站一般像素,网络推广公司网站,网站推广软件预期效果目录
一.有哪些MySQL程序
二. mysqld —— MySQL服务器
三.mysql——MySQL客户端
3.1.连接mysql客⼾端 3.2.mysql客户端选项
3.2.1.mysql常用选项
3.2.2.在命令⾏中使⽤选项
3.3.MySQL 选项#xff08;配置#xff09;文件
3.3.1.Linux环境下默认配置文件的路径
3.…目录
一.有哪些MySQL程序
二. mysqld —— MySQL服务器
三.mysql——MySQL客户端
3.1.连接mysql客⼾端 3.2.mysql客户端选项
3.2.1.mysql常用选项
3.2.2.在命令⾏中使⽤选项
3.3.MySQL 选项配置文件
3.3.1.Linux环境下默认配置文件的路径
3.3.1.1.在Unix和 Linux系统上读取的其他不常用选项文件
3.3.2.Windows环境下配置文件的路径
3.3.2.1.windows不常用配置文件的路径
3.3.3.选项配置文件的语法
3.3.4.案例设置客户端全局编码格式
3.4.mysql客户端命令
3.4.1.见一见mysql客户端命令
3.4.2.mysql客户端命令和SQL语句的区别
3.4.2.从.sql文件执行SQL语句
3.4.2.1.使用source命令
3.4.2.2.使用mysql客户端导入 一.有哪些MySQL程序
我们在安装完MySQL之后我们去它的安装目录下面看看有没有什么新奇的玩意。
MySQL安装完成通常会包含如下程序
Linux系统程序⼀般在/usr/bin⽬录下可以通过命令查看
ll /usr/bin/mysql* ll /usr/sbin/mysql* windows系统⽬录你的安装路径\MySQLServer8.0\bin
例如我的安装目录下面就有这些 关于上面这些程序我们可以去mysql官网上面看看MySQL :: MySQL Documentation 在这里就能看到这些mysql程序了
MySQL 常用程序一览表
程序名作用特别说明mysqldMySQL 服务器守护进程。要想使用客户端 程序mysqld 必须正在运行因为 客户端通过连接到服务器来访问数据库。mysqlMySQL 命令行客户端。这个就是我们日常最常用的东西。用于交互式输入 SQL 语句 或 批量执行 SQL 脚本文件。mysqlcheck表维护客户端。用于检查、修复、分析和优化数据库表。mysqldump数据库逻辑备份客户端。将 MySQL 数据库/表的结构和数据 导出转储到 SQL、文本或 XML 文件。mysqlimport数据导入客户端。将文本文件如 CSV中的数据导入到数据库的表中。是 LOAD DATA INFILE 的封装。mysqladmin管理操作客户端。执行管理任务创建/删除数据库、重载权限表、刷新表到磁盘、重开日志文件等。也可检索服务器版本、进程和状态信息。mysqlshow信息显示客户端。显示 数据库、表、列和索引 的结构信息。mysqldumpslow慢查询日志分析工具。用于读取、解析和汇总 MySQL 慢查询日志的内容便于定位性能问题。mysqlbinlog二进制日志处理工具。用于读取 MySQL 二进制日志文件并输出其中包含的 SQL 语句。 常用于数据恢复和主从复制。mysqlslap负载模拟与基准测试工具。模拟多个客户端并发访问 MySQL 服务器测试服务器性能并报告每个阶段所用时间如查询平均响应时间。 每个MySQL程序都有许多不同的选项。
⼤多数程序都提供⼀个--help 选项您可以使⽤该选项 来获取程序不同选项的描述。
例如:mysql --help可以通过在命令⾏或配置⽂件中指定选项来覆 盖MySQL程序的默认选项值 。
下面我们就介绍一下其中几个mysql程序如果你想了解更多请去官网。
由于篇幅限制我们这里就先简单的介绍一下mysqld和mysql这两个。
二. mysqld —— MySQL服务器 mysqld也被称为MySQL服务器是⼀个多线程程序对数据⽬录可以理解为mysqld的工作目录进⾏访问管理(包含数据库和 表)。 数据⽬录也是其他信息(如⽇志⽂件和状态⽂件)的默认存储位置。 当MySQL服务器mysqld启动时会侦听指定的端⼝、处理来⾃客⼾端程序的⽹络连接并管理不同客⼾ 端对数据库的访问 mysqld程序有许多选项可以在启动时指定。运⾏以下命令查看完整的选项列表
mysqld --verbose --help 有关MySQL服务器命令选项、系统变量和状态变量的完整描述我们在服务器MySQL服务器配置 与管理专题中进⾏详细介绍 。
三.mysql——MySQL客户端
3.1.连接mysql客⼾端
mysql是⼀个简单的SQLshell,可以输⼊命令和执⾏SQL语句当执⾏SQL语句时查询结果以 ASCII 表格式显⽰
mysql的基本使⽤⾮常简单回顾⼀下连接数据库的⽅式打开终端并输⼊以下命令
# 连接MySQL服务器⻓选项格式
mysql --useruser_name --password [db_name]
# 短选项格式
mysql -uuser_name -p [db_name] 短选项格式连接mysql
不指定数据库登陆
mysql -u 用户名 -p 指定数据库登陆
mysql -u 用户名 -p [数据库名] 长选项连接mysql
不指定数据库登陆
mysql --user用户名 --password 指定数据库连接
mysql --user用户名 --password 数据库名 3.2.mysql客户端选项
mysql客户端选项指定选项的方法主要有下面3种
在mysql后⾯的命令⾏中列出选项 在mysql后⾯指定配置⽂件的路径以便在程序启动时读取配置⽂件中的选项并解析对应程序选项的值并应用在启动参数中这样子我们启动mysql的时候再也不需要那些什么-u -p 了使⽤环境变量中的选项 这个不建议 关于第2点我们看一个例子 我们把这个目标复制下来
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini -uroot -p --default-character-setutf8mb4
那上面这个什么意思呢
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe MySQL客户端程序路径--defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini : 核心配置文件指定-uroot : 用户名可移至配置文件-p : 密码提示可移至配置文件--default-character-setutf8mb4 : 字符集可移至配置文件 比如说 我想将用户名和密码字符集都添加到配置文件里面 配置文件修改 在C:\ProgramData\MySQL\MySQL Server 8.0\my.ini中添加 [client] # 客户端专用配置段
user root # 等价于 -uroot
password your_password # 自动填入密码注意安全
default-character-set utf8mb4 # 字符集配置 简化后启动命令 C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini 3.2.1.mysql常用选项
我们可以去官网看看选项啊
MySQL :: MySQL 8.0 Reference Manual :: 6.5.1.1 mysql Client Options 由于选项很多我们只选择讲解一些 。
长格式选项短格式选项说明--host主机名-h 主机名连接到指定主机上的MySQL服务默认主机号是127.0.0.1 localhost--port端口号-P 端口号指定TCP/IP 连接使用的端口号默认端口号是3306--user用户名-u 用户名用于连接到MySQL服务器的用户名--password[密码]-p[密码]用于连接到MySQL服务器的密码。[]表示可选如果没有给出会提示用户输入--defaults-file文件名使用指定的选项文件。如果该文件不存在则会发生错误。--default-character-set字符集名字将作为客户端和当前连接的默认字符集例utf8mb4--database数据库名字-D 数据库名字要使用的数据库--compress-C这个不太常用如果可能压缩客户端和服务器之间传输的所有信息--reconnect如果客户端与服务器的连接丢失自动尝试重新连接--quick-q不缓存查询结果收到一行打印一行如果输出被挂起可能会降低服务器速度谨慎使用--protocol{TCP|SOCKET|PIPE|MEMORY}用于连接到服务器的传输协议,默认为TCP--delimiter分隔符设置SQL语句分隔符。默认值为分号(;)。这个一般是用于创建存储过程的。--executeSQL语句-e SQL语句执行指定的SQL语句并退出。--version-V显示版本信息并退出。这个比较常用。--help-?显示帮助信息并退出。
这些就是很常用的一些至于你想要学习更多的东西的话请去官网。 如果选项的值中包含空格那么值需要包含在双引号中 3.2.2.在命令⾏中使⽤选项
命令行中指定选项遵循以下规则
1.选项应在程序名之后给出2.选项以单破折号“-”或双破折号“--”号开头-表示短格式--表示长格式例如-?和 --help都表示MySQL程序显示他的帮助消息 3.选项名称区分大小写。
比如说-v 和 -V 都是合法的但含义不同它们分别是 --verbose尽可能详细的显示结果 和 --version版本 选项的相应缩写形式
# 以下两个等价
mysqld --verbose --help
mysqld -v -?
# 以下两个等价
mysql --version
mysql -V 4.某些选项需要在后面指定一个值。例如-h 127.0.0.1 或 --host127.0.0.1 表示向客户端程序指定 MySQL 服务器主机
mysql -h 127.0.0.1 2mysql --host127.0.0.1 5.对于带值的长格式选项通常用 符号分隔选项名称和值。对于带值的短选项选项值可以紧跟在选项之后也可以用空格隔开。例如--host127.0.0.1、-h127.0.0.1 和 -h 127.0.0.1 是等价的。但是对于密码选项的短格式如果要指定密码选项与值之间不能有空格如下所示
mysql -ptest # test表示密码但没有指定要访问的数据库
mysql -p test # test 表示指定了访问的数据库但没有指定密码 在命令行中第一个不带破折号 - 的值通常被解析为要访问的数据库名因此 --database 选项一般可以省略。 假设你有一个名为 my_database 的数据库并且你想使用 MySQL 命令行客户端连接到这个数据库。 1.使用 --database 选项明确指定数据库 通常情况下你可以通过以下方式连接到数据库 mysql -u your_username -p --databasemy_database 系统会提示你输入密码然后连接到 my_database 数据库。 2.省略 --database 选项直接指定数据库名 根据规则第一个不带破折号的值会被解析为数据库名。因此上面的命令可以简化为 mysql -u your_username -p my_database 在这种情况下my_database 是第一个没有前缀 - 或 -- 的参数所以 MySQL 客户端会自动将其解释为目标数据库名。 总结 完整写法mysql -u your_username -p --databasemy_database 简写写法mysql -u your_username -p my_database 两种方式效果相同但后者更简洁适用于快速访问特定数据库。 6.破折号 (-) 和下划线 (_) 在大多数情况下可以互换使用但前导破折号不能转为下划线。例如--skip-grant-tables 和 --skip_grant_tables 是等价的。
这样子的情况其实还挺多的啊。
--skip-grant-tables 和 --skip_grant_tables 是等价的--max-connections 和 --max_connections 是等价的--innodb-buffer-pool-size 和 --innodb_buffer_pool_size 是等价的--table-definition-cache 和 --table_definition_cache 是等价的--tmp-table-size 和 --tmp_table_size 是等价的--query-cache-size 和 --query_cache_size 是等价的--thread-cache-size 和 --thread_cache_size 是等价的……
至于更多的可以去官网上面看啊挺多的 7.对于采用数值的选项该值可以带有后缀 K、M 或 G 以指示乘数 1024、1024^2 或 1024^3。
我知道大家有点懵
以下是关于 数值选项后缀 K、M、G 的使用示例说明它们分别代表 1024、1024²即 1024×1024和 1024³即 1024×1024×1024 设置缓冲池大小为 1G --innodb-buffer-pool-size1G 表示 1 × 1024 × 1024 × 1024 字节即 1,073,741,824 字节 设置最大连接数为 500 --max-connections500 这里没有后缀表示直接使用 500 设置临时表大小为 64M --tmp-table-size64M 表示 64 × 1024 × 1024 字节即 67,108,864 字节 设置查询缓存大小为 32M --query-cache-size32M 表示 32 × 1024 × 1024 字节即 33,554,432 字节 设置每秒允许连接的数量为 16K --thread-stack16K 表示 16 × 1024 字节即 16,384 字节 设置日志文件大小为 256M --innodb-log-file-size256M 表示 256 × 1024 × 1024 字节即 268,435,456 字节 设置排序缓冲区大小为 2M --sort-buffer-size2M 表示 2 × 1024 × 1024 字节即 2,097,152 字节
这些后缀让配置更简洁易读特别是在处理大数值时。例如写成 1G 比写成 1073741824 更直观。 8.在命令行中包含空格的选项值必须用引号引起来。
示例--execute (or -e) 选项与 mysql 一起使用时表示将一个或多个 SQL 语句发送给服务器执行并显示结果。 3.3.MySQL 选项配置文件
大多数 MySQL 程序可以从选项文件配置文件中读取启动选项。
可在选项文件中指定常用选项避免每次运行程序时都在命令行中输入它们。
大部分选项文件都是纯文本格式可使用任何文本编辑器创建。 使用 --defaults-file 选项可以指定要使用的选项文件客户端程序会读取并应用选项文件中的相关配置。
# Linux
mysql --defaults-file/etc/mysql/my.cnf -u root -p # windows下
mysql --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini -u root -p
3.3.1.Linux环境下默认配置文件的路径
在ubuntu系统里面 这个/etc/mysql/my.cnf就是最终的配置文件。也就是默认配置文件。
我们可以进去/etc/mysql/my.cnf看看 客户端配置文件
我们进去这个conf.d目录里面看看 嗯还是我们的配置文件mysql.cnf。
我们打开看看 服务端配置文件
我们注意到/etc/mysql/目录下面还有一个mysql.conf.d这个目录我们进去看看 嗯这里也有配置文件 其实这里我们不必花费太多精力来记这个什么客户端配置文件和服务端配置文件我们以后配置文件统一去/etc/mysql/my.cnf配置。
虽然Linux把客户端配置文件和服务端配置文件做了区分但是我们一般不会分别在对应配置文件中配置而是把所有配置都写在默认的配置文件/etc/mysql/my.cnf。
3.3.1.1.在Unix和 Linux系统上读取的其他不常用选项文件
如果在使用mysql程序的时候如果没有指定配置文件的路径就会自动读取默认路径下的配置文件。
指定了配置文件的路径
mysql --defaults-file/etc/mysql/my.cnf -u root -p
没有指定配置文件的路径
mysql -u root -p
也就是说除了我们上面说的那个默认配置文件/etc/mysql/my.cnf之外还有其他的配置文件
那这些另外的配置文件在哪里呢
文件名说明读取顺序优先级/etc/my.cnf全局第1个最低/etc/mysql/my.cnf全局第2个第6高$MYSQL_HOME/my.cnf服务器特定选项仅限服务器第3个第5高defaults-extra-file如果存在其他选项文件可以通过 --defaults-extra-file 选项指定。第4个第4高~/.my.cnf用户特定选项第5个第3高~/.mylogin.cnf用户特定的登录路径选项仅限客户端第6个第2高DATADIR/mysqld-auto.cnf系统变量仅限服务器第7个最高
注意一下Linux或者Unix系统里面的配置文件都是.cnf结尾的
MySQL 按以上表格中的顺序查找并读取选项文件。如果文件不存在则需要手动创建。 读取顺序从上到下后读取的文件中配置的选项优先级越高 怎么理解优先级 对于两个配置文件中配置了相同的选项优先级高的文件的选项会覆盖掉优先级低的文件的选项 就好像我先在/etc/my.cnf设置了port3305然后我又在优先级更高的/etc/mysql/my.cnf里面设置了port3306那真正设置的port其实是3306。这就是优先级的作用 ~ 表示当前用户的主目录MYSQL_HOME是设置的环境变量路径DATADIR 代表MySQL数据目录mysqld-auto.cnf的优先级最高
对于服务器有一个例外数据目录中的mysqld-auto.cnf选项文件是最后处理的因此它甚至优先于命令行选项。 我们来注意一下 defaults-extra-file和defaults-file的区别 Command-Line Format--defaults-extra-filefile_nameTypeFile name 在全局选项文件之后读取此选项文件但在Unix上在用户选项文件之前读取。如果文件不存在或无法访问则会发生错误。如果file_name不是绝对路径名则会相对于当前目录进行解释。 也就是说使用defaults-extra-file的话所有配置文件都会被加载。 Command-Line Format--defaults-filefile_nameTypeFile name 只会使用给定的选项文件。如果文件不存在或无法访问则会发生错误。如果file_name不是绝对路径名则会相对于当前目录进行解释。 这个就是使用defaults-file的话只会加载指定的配置文件。 对于Linux系统中我们一般不太会用那些乱七八糟的配置文件我们一般都是使用默认配置文件/etc/mysql/my.cnf的
3.3.2.Windows环境下配置文件的路径
其实这个一般是在C:\ProgramData\MySQL\MySQL Server 8.0\my.ini的 这里面就是一些配置信息。
对于这个配置文件我们在修改之前一定要备份好我们的配置文件然后才去修改。 如果你不记得你的mysql的安装路径那可以像下面这样子做 我们把这个目标复制下来 C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini -uroot -p --default-character-setutf8mb4 --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini就是我们的默认配置文件 3.3.2.1.windows不常用配置文件的路径
如果在使用mysql程序的时候如果没有指定配置文件的路径就会自动读取默认路径下的配置文件。
指定了配置文件的路径
mysql --defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini -u root -p
没有指定配置文件的路径
mysql -u root -p
也就是说除了我们上面说的那个默认配置文件C:\ProgramData\MySQL\MySQL Server 8.0\my.ini之外还有其他的配置文件
那这些另外的配置文件在哪里呢
我们分别说说
MySQL 按以下表格中的顺序查找并读取选项文件。如果文件不存在则需要手动创建。 读取顺序从上到下后读取的文件中配置的选项优先级越高
我们看看这些不常用的配置文件具体在哪里
文件名说明读取顺序优先级%WINDIR%\my.ini, %WINDIR%\my.cnf全局最先读取最低C:\my.ini, C:\my.cnf全局第2个读取第5高BASEDIR\my.ini, BASEDIR\my.cnf全局第3个读取第4高defaults-extra-file如果存在其他选项文件可以通过 --defaults-extra-file 选项指定第4个读取第3高%APPDATA%\MySQL.mylogin.cnf登录路径选项(仅限客户端)第5个读取第2高DATADIR\mysqld-auto.cnf系统变量(仅限服务器)最后读取最高
我们Windows里面的配置文件的后缀名可能是.cnf或者.ini 注意我们的默认配置文件C:\ProgramData\MySQL\MySQL Server 8.0\my.ini的读取顺序不是最先也不是最后就可能在上面的任意一个位置上 %WINDIR% 表示 Windows 目录的位置可以通过命令查看 我们可以看看有没有my.ini或者my.cnf显然是没有的 BASEDIR 表示 MySQL 的安装目录
这个安装路径怎么找
如果你不记得你的mysql的安装路径那可以像下面这样子做 我们把这个起始位置复制下来
C:\Program Files\MySQL\MySQL Server 8.0\bin\
那么C:\Program Files\MySQL\MySQL Server 8.0就是我们的安装目录
%APPDATA%表示应用程序数据的目录 这个是仅仅针对客户端的所以我们不必太在意因为我们都不会用的。
DATADIR 代表MySQL数据目录
这个目录一般是C:\ProgramData\MySQL\MySQL Server 8.0 使用 MySQL Installer安装MySQL成功后my.ini默认在该目录下。 对于我们的C:\ProgramData\MySQL\MySQL Server 8.0\my.ini这个是最常用的配置文件我们以后基本就使用这个来配置文件。
3.3.3.选项配置文件的语法
运⾏MySQL程序时在命令⾏上指定的任何⻓选项都可以在选项⽂件中指定。
特别注意啊是长选项不是短选项
至于选项列表我们可以去官网看看即可MySQL :: MySQL 8.4 Reference Manual :: 6.5.1.1 mysql Client Options 规则一选项⽂件中指定选项时省略两个前导破折号并且每⼀⾏表⽰⼀个选项
例如--quick和--host127.0.0.1在选项文件中应表示成quick和 host127.0.0.1
quick
host127.0.0.1
#注意一定要换行因为每一行表示一个选项
规则二选项文件中的空行会被忽略。非空行可以采用以下任一形式进行注释
#comment
或者
;comment
注释行以#或开头注释可以从一行的中间开始。
我们可以去Linux系统的/etc/mysql/my.cnf看看 注释都是使用#开头的
规则三[group] 用于设置选项的程序或组的名称不区分大小写。如果选项组名称与程序名称相同则组中的选项专门应用于该程序。例如[mysqld]和[mysql]组分别适用于mysqld服务端程序和 mysql客户端程序规则四opt_name 相当于命令行上的选项名这种一般是用于设置那些没有值的选项的写法比如说batch规则五opt_namevalue 选项名对应的值这种一般是用于设置那些有值的选项的写法比如说host127.0.0.1。可以使用转义序列\b,\t,\n,\r,\\和\s来表示退格符、制表 符、换行符、回车符、反斜杠和空格字符
规则四和规则五就是我们的写法 TIPS: 1.选项名称和值中的前导和尾随空格会自动删除2.在windows系统中设置路径应该使用转义字符 basedirC:\\Program Files\\MySQL\\MySQL Server 8.0
# 或
basedirC:/Program Files/MySQL/MySQL Server 8.0 规则六 [client] MySQL发行版中所有客户端程序都会读取并应用这个组下的选项(除了mysqld), 在这个组下可以指定适用于所有客户端程序的通用选项例如配置用户名和密码(但要确保只有 自己才可以访问这个文件以防止密码泄漏)
接下来我们来举一个例子
我们去默认的配置文件/etc/mysql/my.cnf里添加下面这些东西
[client]
host127.0.0.1
port3306
userroot
password123456 然后我们执行mysql 我们发现直接运行mysql,不用输入用户名密码可以直接成功登录
神奇吧 规则七可以通过[客户端程序名]的形式为不同的客户端程序指定选项。例如[mysql]当运行 mysql程序时会读取并应用该组下的配置如果选项名与[client]重复[client]中的 选项将会被覆盖
例如我们在规则六的那个例子的基础之上我们再添加下面这个
#设置为必须输入密码
[mysql]
password 选项名password与[client]里面的password重复[client]中的 password将会被覆盖 也就是说现在密码是空的。
我们重新启动一下mysql 发现需要输入密码了。 规则八为特定MySQL版本设置选项可以使用[mysqld-5.7]、[mysqld-8.0]的组名
MySQL 配置文件支持基于版本的条件配置通过 [mysqld-version] 格式的组名实现。这种机制允许你为不同版本的 MySQL 服务器定制配置避免版本兼容性问题。
规则说明 通用配置组[mysqld] 适用于所有版本 版本特定组[mysqld-5.7] 或 [mysqld-8.0] 仅当 MySQL 主版本匹配时才生效 优先级版本组 通用组同选项时版本组覆盖通用组
# 通用配置所有版本生效
[mysqld]
max_connections 200
tmp_table_size 32M# 仅对 MySQL 5.7 生效
[mysqld-5.7]
innodb_file_format Barracuda # 5.7专有参数
innodb_large_prefix ON
tmp_table_size 64M # 覆盖通用配置# 仅对 MySQL 8.0 生效
[mysqld-8.0]
authentication_policy mysql_native_password,caching_sha2_password # 8.0专有参数
tmp_table_size 128M # 覆盖通用配置
这个规则八了解一下即可。 规则九在选项文件中使用 !include指令来包含其他选项文件
假设我们有一个主选项文件 /etc/mysql/my.cnf我们想要在这个主文件中包含另一个位于 /home/mydir/myopt.cnf 的选项文件。我们可以在 /etc/mysql/my.cnf 文件中添加以下行
!include /home/mydir/myopt.cnf
这样当MySQL程序读取 /etc/mysql/my.cnf 文件时它也会读取并应用 /home/mydir/myopt.cnf 文件中指定的选项。 规则十在选项文件中使用!includedir指令来搜索指定目录中的其他选项文件例如!include /home/mydir ,但不保证目录中选项文件的读取顺序
假设我们有一个主选项文件 /etc/mysql/my.cnf我们想要在这个主文件中包含 /home/mydir 目录下的所有选项文件。根据操作系统的不同!includedir 的行为也会有所不同
在Unix/Linux系统中
我们可以在 /etc/mysql/my.cnf 文件中添加以下行
!includedir /home/mydir
这样MySQL会搜索 /home/mydir 目录下的所有以 .cnf 为后缀的文件并读取和应用这些文件中指定的选项。
在Windows系统中
假设我们的目录路径为 C:\mydir我们可以在选项文件中添加以下行
!includedir C:/mydir 这样MySQL会搜索 C:\mydir 目录下的所有以 .ini 或 .cnf 为后缀的文件并读取和应用这些文件中指定的选项。 关于客户端组配置的注意事项 无论使用 !include 还是 !includedir 指令MySQL都只会读取包含文件中当前客户端的组配置。例如如果当前运行的是 mysql 客户端程序那么MySQL只会读取包含文件中 [mysql] 组下的选项配置。 假设 /home/mydir 目录下包含以下两个选项文件 /home/mydir/option1.cnf [client]
default-character-set utf8mb4[mysqld]
max_connections 500 /home/mydir/option2.cnf [mysql]
user root
password 123456[mysqldump]
quick 当使用 mysql 客户端程序时MySQL会读取并应用 /home/mydir/option1.cnf 文件中的 [client] 组和 /home/mydir/option2.cnf 文件中的 [mysql] 组的选项配置即设置默认字符集为 utf8mb4并使用 root 用户和密码 123456 登录。而 [mysqld] 和 [mysqldump] 组的选项配置则不会被 mysql 客户端程序读取和应用。 在Windows中请确保在配置文件的最后一行加一个换行符否则该行将被忽略
3.3.4.案例设置客户端全局编码格式
在Linux下编辑全局配置文件默认位置/etc/mysql/my.cnf初始内容如下
vim /etc/mysql/my.cnf
在已有内容下方输入相应的配置我们要为客户端设置全局的编码格式为utf8mb4,那么在 [client]节点下指定相应的选项即可
[client] # 所有客户端程序者会读取这个节点下的配置信息
default-character-setutf8mb4 # 指定编码格式为utf8mb4 关于配置文件我们暂且先讲这么多。不过要注意的是以后我们修改配置文件之前一定要先备份一份然后再去修改配置文件 3.4.mysql客户端命令
在介绍mysql客户端命令之前我们先看看SQL语句 使⽤mysql客⼾端程序连接到数据库服务器之后可以发送SQL语句到服务器执⾏并以;(分 号)、\g 或\G结束
TIPS:
1. ;与\g结束表⽰以表格形式展⽰结果 2. \G结束表⽰以⾏形式展⽰结果 对于这个\G我们可以举个例子看看
use mysql;
select * from user; 我们看是一堆乱七八糟的。我们接下来看看下面这个\G的。
select * from user\G
这就是\G的用武之处。 如果当前已经输⼊了⼀部分SQL语句想重新输⼊可以输⼊ControlC中断当前输⼊ 假如这个时候我发现我打错命令了我现在就可以ControlC中断当前输⼊ 。 3.4.1.见一见mysql客户端命令
MySQL 客户端命令是 mysql 命令行工具内置的一组指令用于管理该工具自身的连接、环境设置、输入输出行为以及与本地操作系统的交互。
它们以特定关键字如 use, exit或反斜杠加字母如 \u, \q开头通常不需要分号结尾并且只在当前的客户端会话中有效不直接影响数据库服务器上的数据或结构。它们是高效使用 mysql 命令行客户端的必备工具。
在当前模式下可以输⼊help或者\h 查看mysql客户端命令列表 这些就是我们这一节的主角——mysql客户端命令 那怎么理解这个呢其实这些都是客户端命令。
每个命令有两个名称
完整名称 (如 clear, connect, exit)快捷别名 (括号内的 Y?, Yc, Yr, Yq 等)。
例如
? 等同于 help\c 等同于 clear (注意在命令行里输入 \c 而不是 Yc)\q 等同于 quit 或 exit\u 等同于 use\r 等同于 connect (注意是 \r 不是 Yr)
左侧是完整命令右侧是别名 常用客户端命令详解 help (\h, ?): 显示当前这份帮助信息。 clear (\c): 清除当前输入行。如果你正在输入一个很长的 SQL 语句但输错了不想继续输入可以用 \c 清除当前行回到干净的 mysql 提示符。 注意这个时候不能使用clear connect (\r): 重新连接到服务器。可选参数connect [database_name] [host_name]。例如 \r mydb localhost。 use (\u): 切换到另一个数据库。这是非常常用的命令。use database_name; (注意这里 use 是客户端命令但后面的 database_name 是参数整个命令以分号结尾是告诉客户端执行这个切换操作)。 上面这3种用法都是一样的。 exit / quit (\q): 退出 MySQL 命令行客户端。 source (\.): 执行一个外部的 SQL 脚本文件。source /path/to/your_script.sql; 或 \. /path/to/your_script.sql;。这对于批量运行 SQL 命令非常有用。
这个我们下一小节专门举了一个例子来说明。 status (\s): 显示服务器状态信息。包括服务器版本、连接 ID、当前数据库、字符集设置等。 system (\!): 在 不退出 MySQL 客户端的情况下执行操作系统命令。例如 system ls -l; (Linux/Mac) 或 system dir; (Windows)。执行完后会回到 mysql 提示符。 这个就说明如果我们的数据库密码被泄露的话那么那些人就会使用这个system来执行一些系统命令然后对我们的服务器进行致命打击。还是非常危险的。 tee (\T): 将所有后续输入和输出同时记录追加到一个文件中。tee /path/to/output.log;。输入 notee; 停止记录。 我们回去看看发现刚好有这么一个文件 如果要取消掉这个我们可以像下面这样子取消 我们回去看看 我们发现就没有发现它再 存储新的东西了。 ego (\G): 将 下一条 SQL 语句的结果以垂直格式每列一行显示而不是默认的表格格式。
这对于查看包含很多列或很长的文本字段的结果集非常方便。
用法在 SQL 语句后输入 \G 代替 ; 结尾。例如 SELECT * FROM large_table WHERE id 1\G。
我们可以举个例子看看
use mysql;
select * from user; 我们看是一堆乱七八糟的。我们接下来看看下面这个\G的。
select * from user\G
这就是\G的用武之处。 go (\g): 发送命令到服务器。等同于输入分号 ;。通常直接输入 ; 更常见。 prompt (\R): 自定义 mysql 提示符。可以包含动态信息如当前时间、用户名、主机名、数据库名等。例如 prompt \u\h [\d] 可能将提示符改成 userhost 。 怎么样很奇怪吗
我们接下来修改回之前的 delimiter (\d): 更改语句分隔符。默认是分号 ;。在定义存储过程、函数、触发器时这些对象体内本身会包含分号 ;。为了能让客户端正确识别整个对象的定义语句而不是把体内的分号当作结束需要临时将分隔符改为其他符号如 $$ 或 //。定义完后再改回分号 ;。这是定义存储对象时的必要步骤。 我们发现它没有显示出结果来。但是我这个时候输入//的话就会显示出结果。 这个时候如果我们不使用这个分割符的话我们就得把分割符还原到分号。 warnings (\W): 在每条语句执行后显示警告信息如果产生了警告。nowarning (\w): 关闭每条语句执行后的警告信息显示。charset (\C): 切换客户端使用的字符集。例如 charset utf8mb4;。确保客户端、连接、数据库字符集一致能避免乱码问题。resetconnection (\x): 重置连接上下文。清除用户变量、临时表、PREPARE 语句等会话状态信息但不会断开连接。比断开重连更轻量。 我们上面列出的都是控制客户端的命令也就是我们说的mysql客户端命令。
我们注意到下面还有一句话“For server side help, type help contents”
这条提示非常重要
要获取关于 SQL 语法本身的帮助如 SELECT, CREATE TABLE, ALTER USER 等需要在 mysql 提示符下输入 help contents;。这会显示服务器端帮助的顶级目录。 然后你可以根据目录输入更具体的帮助命令例如
help Data Types; (查看数据类型帮助)help SELECT; (查看 SELECT 语句语法)help CREATE TABLE; (查看创建表语法)help contents; 是获取所有 SQL 语法帮助的入口点。 3.4.2.mysql客户端命令和SQL语句的区别
核心区别解析执行主体与目的
最根本的区别在于谁执行以及执行什么。 MySQL 客户端命令是由你电脑上运行的 mysql 这个命令行工具程序本身解释执行的。它们的作用纯粹是管理你当前这个终端窗口的环境和与MySQL服务器的交互方式。想象一下这个命令行工具就是一个操作台客户端命令就是操作台上的按钮和旋钮用来连接或断开服务器connect, quit/\q、切换当前操作的“工作区”数据库use dbname; 或 \u dbname、控制屏幕上结果的显示格式比如用 \G 垂直显示而不是表格、把屏幕输出保存到文件tee file.log / notee、清除当前输入的错误命令clear / \c、执行保存在文件里的一批命令source script.sql; 或 \. script.sql、查看当前连接的状态信息status / \s、甚至临时在操作系统里执行个命令system ls / \! dir。这些操作都不直接影响数据库里的数据本身它们只影响你如何操作和看到什么。 相反SQL 语句则是你通过 mysql 客户端这个“操作台”发送给远程的 MySQL 数据库服务器进程 (mysqld) 的指令。服务器接收到这些语句后负责真正操作数据库的内容和结构。这才是数据库的核心功能查询数据 (SELECT ...)、添加新记录 (INSERT INTO ...)、修改现有数据 (UPDATE ...)、删除数据 (DELETE FROM ...)、创建或修改数据库、表、索引等结构 (CREATE DATABASE/TABLE/INDEX ..., ALTER TABLE ..., DROP TABLE ...)、管理谁可以访问什么 (CREATE USER ..., GRANT ..., REVOKE ...)、以及控制保证数据一致性的交易过程 (START TRANSACTION, COMMIT, ROLLBACK)。这些操作会直接改变服务器上存储的持久化数据或元数据。
关键差异语法规则与执行方式
理解它们在 mysql 提示符下如何输入和执行是避免混淆的关键尤其是分号 (;) 和反斜杠命令 (\x) 的使用。 客户端命令 识别方式 通常以特定的关键词开头如 use, exit, status, source, system, prompt, delimiter, help或者更常见的反斜杠 \ 加一个字母的快捷方式如 \u (use), \q (quit), \s (status), \. (source), \! (system), \d (delimiter), \c (clear)。 终结符 客户端命令 不需要 以分号 ; 结尾 输入命令后直接按回车即可执行。例如 exit, \q, status, \s, \! ls, prompt MySQL。 执行 客户端程序看到这些特定开头关键词或 \的命令会立即自己处理不会发送给服务器。通常是单行执行。 SQL 语句 识别方式 以 SQL 关键字开头如 SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, SHOW, SET, GRANT, REVOKE, BEGIN, COMMIT, EXPLAIN, CALL。 终结符 必须以分号 ; 或 \G 结尾这是强制要求。; 表示按默认表格格式返回结果\G 表示按垂直格式每行一个字段返回结果。 多行输入 SQL 语句可以跨越多行。当你输入一个 SQL 关键字如 SELECT后按回车客户端会显示 -或自定义的续行提示符表示它知道你还在输入一个语句会持续等待直到你输入 ; 或 \G 并按回车。这时客户端才会把你从 SELECT 开始到 ;或者\G 为止输入的所有内容作为一个完整的语句发送给服务器执行。delimiter 客户端命令的主要用途就是为了在定义包含分号 ; 的存储过程等对象时临时改变这个终结符如改成 $$避免客户端提前发送语句。
作用范围与持久性 客户端命令 其效果严格局限于你当前打开的 mysql 客户端会话窗口。你在这个窗口设置的提示符 (prompt)、开启的输出记录 (tee)、当前选择的数据库 (use)、字符集 (charset)、分隔符 (delimiter) 等只影响这个窗口。关闭窗口或退出 (quit)这些设置就消失了。它们不会改变其他用户的会话或服务器本身的配置。 SQL 语句 其效果直接作用于 MySQL 服务器。对数据的增删改查、对库/表/索引等对象的创建修改删除、对用户权限的授予撤销这些操作会持久化存储在服务器上除非在事务中用 ROLLBACK 撤销未提交的修改。一旦成功执行这些变更对于所有拥有相应权限并连接到该服务器的用户和会话都是可见和有效的受事务隔离级别约束。resetconnection (\x) 是个特殊的客户端命令它告诉客户端在会话层面清理一些状态如用户变量、预编译语句、临时表但不会回滚事务或断开连接也不会删除持久化的数据或对象。
获取帮助泾渭分明 客户端命令帮助 如果你想知道有哪些客户端命令可用像 use, exit, source, status 等或者某个具体命令怎么用比如 prompt 有哪些选项在 mysql 提示符下输入 help 或 \h 或 ? (注意绝对不能加分号 ;)。这会显示你最初看到的那个命令列表及其简要说明。输入 help command_name (如 help use) (不加 ;) 可以查看某个命令更具体的帮助。 SQL 语法帮助 如果你想知道 SQL 语句怎么写如 SELECT 的完整语法、CREATE TABLE 有哪些选项、有哪些数据类型可用则需要在 mysql 提示符下输入 help contents; (必须加分号 ;)。这会显示服务器端 SQL 帮助的目录。然后你可以根据目录输入更具体的帮助命令例如 help SELECT;, help CREATE TABLE;, help data types;, help SHOW; (都必须以 ; 结尾)。这个帮助系统的内容来源于 MySQL 服务器软件附带的文档。
3.4.2.从.sql文件执行SQL语句
这个的关键就是mysql客户端命令——source命令。
3.4.2.1.使用source命令
这个source命令就是我们说的mysql客户端命令之一啊。
当执行复杂且冗长的 SQL语句时如果每次都在 MySQL 监视器上编写就会很麻烦。在执行复杂的 SQL语句的情况下我们可以将其创建为文本文件然后执行保存的文件。
这种方法可以进一步提高工作效率还可以显示创建成文本文件的 SOL语句并将其复制、粘贴到MySOL 监视器上执行。
如果将 SOL语句保存为文本文件就可以反复使用它还可以轻松对其进行改善。 在记事本等文本编辑器中事先准备好 SOL语句然后在 MySOL 监视器上执行 SOURCE 命令。 格式 执行包含 SQL 语句的文本文件
SOURCE 文本文件名
如果执行的 SOL语句中包含中文就需要注意作为参数的文本文件的字符编码了。
使用SOURCE 命令执行 SQL语句的方式与在 MySQL 监视器上执行的方式相同。
下面来实际操作一下。 我们在test.sql文件里面写入下面这些东西
use db1;
DROP TABLE IF EXISTS tb1;
CREATE TABLE tb1 (empid VARCHAR(10),name VARCHAR(10),age INT);
INSERT INTO tb1 VALUES(A101,佐藤,40);
INSERT INTO tb1 VALUES(A102,高桥,28);
INSERT INTO tb1 VALUES(A103,中川,20);
INSERT INTO tb1 VALUES(A104,渡边,23);
INSERT INTO tb1 VALUES(A105,西泽,35); 我们先看看我们现在mysql的状况 接着我们打开mysql执行下面这个命令
source /home/zs_108/test.sql
source不是SQL命令所以可以不加逗号 怎么样是不是很神奇
3.4.2.2.使用mysql客户端导入
其实我们可以不使用source命令就能实现上面这么一个功能那就是使用重定向
情况一指定数据库执行
mysql 数据库名 text_file # 在指定的数据库下执⾏
这个其实还挺好理解的。
我们先还是使用test.sql 我们在test.sql文件里面写入下面这些东西
DROP TABLE IF EXISTS tb1;
CREATE TABLE tb1 (empid VARCHAR(10),name VARCHAR(10),age INT);
INSERT INTO tb1 VALUES(A101,佐藤,40);
INSERT INTO tb1 VALUES(A102,高桥,28);
INSERT INTO tb1 VALUES(A103,中川,20);
INSERT INTO tb1 VALUES(A104,渡边,23);
INSERT INTO tb1 VALUES(A105,西泽,35); 我们先看看我们现在mysql的状况 现在我们在命令行就输入下面这个命令
mysql db1 /home/zs_108/test.sql -u root -p 我们去验证一下 不指定数据库执行
mysql text_file # 不指定数据库
这个的前提是数据库必须提前建⽴好然后test_file文件中必须有 USE [database_name] 来指定要操作的数据库
像下面这样子没有USE [database_name]的.sql文件是不行的。
DROP TABLE IF EXISTS tb1;
CREATE TABLE tb1 (empid VARCHAR(10),name VARCHAR(10),age INT);
INSERT INTO tb1 VALUES(A101,佐藤,40);
INSERT INTO tb1 VALUES(A102,高桥,28);
INSERT INTO tb1 VALUES(A103,中川,20);
INSERT INTO tb1 VALUES(A104,渡边,23);
INSERT INTO tb1 VALUES(A105,西泽,35);
我们可以试一试是什么情况。 接着我们在命令行执行下面这个命令
mysql /home/zs_108/test.sql -u root -p 很显然是不行的。所以正确的写法应该是加上一句use db1
use db1;
DROP TABLE IF EXISTS tb1;
CREATE TABLE tb1 (empid VARCHAR(10),name VARCHAR(10),age INT);
INSERT INTO tb1 VALUES(A101,佐藤,40);
INSERT INTO tb1 VALUES(A102,高桥,28);
INSERT INTO tb1 VALUES(A103,中川,20);
INSERT INTO tb1 VALUES(A104,渡边,23);
INSERT INTO tb1 VALUES(A105,西泽,35);
接着我们执行下面这个命令
mysql /home/zs_108/test.sql -u root -p 很完美吧