MySQL程序简介
Linux下MySQL程序的路径
普通程序:/usr/bin⽬录下
超级程序:/usr/sbin目录下
常见的MySQL程序
除了mysqld是服务器程序,其他的都是客户端程序
mysqld---MySQL服务器
mysqld也被称为MySQL服务器,是⼀个多线程程序,对数据⽬录进⾏访问管理(包含数据库和
表)。数据⽬录也是其他信息(如⽇志⽂件和状态⽂件)的默认存储位置。
mysql - MySQL 命令⾏客⼾端
mysql是⼀个简单的 SQL shell, 可以输⼊命令和执⾏SQL语句,查询结果以ASCII 表格式显⽰
mysql客户端指定选项的方式
1、在mysql后⾯的命令⾏中列出选项
2、依靠mysql的配置⽂件,在程序启动时按顺序读取不同配置⽂件中的选项
mysql客户端常用选项
TIPS:
1、如果选项的值中包含空格,那么值需要包含在双引号中
2、一般不显式使用 -D
选项,而是直接写数据库名,也就是-D可以省略
命令行中使用选项的规则
1、选项以单破折号" - "或双破折号" -- "号开头, - 表⽰短格式, -- 表⽰⻓格式,例如:-?和 -
-help 都表⽰MySQL 程序显⽰他的帮助消息
2、对于带值的⻓格式选项,通常⽤ = 符号分隔选项名称和值。对于带值的短选项,值可以紧跟在选项之后,也可以⽤空格隔开,例如: --host=127.0.0.1 、 -h127.0.0.1 和 -h 127.0.0.1 是等价的。 但是对于密码选项的短格式-p,如果要指定密码,选项与值之间不能有空格,否则密码会被解析成省略的-D的值
3、在长选项中,破折号 ( - ) 和下划线 ( _ ) 在⼤多数情况下可以互换使⽤,但前导破折号不能转
为下划线,例如: --skip-grant-tables 和 --skip_grant_tables 是等价的。
4、在命令⾏中包含空格的选项值必须⽤引号引起来。例如, --execute (or -e ) 选项与mysql⼀
起使⽤时,表⽰将⼀个或多个 SQL 语句发送给服务器执⾏并显⽰结果
选项(配置)文件
多数MySQL 程序都可以从选项⽂件(配置⽂件)中读取启动选项。可以在选项⽂件中指定常⽤选
项,这样就不⽤在每次运⾏程序时都在命令⾏中输⼊它们
选项⽂件位置及加载顺序
MySQL 按以下表格中的顺序从上到下查找并读取选项⽂件,如果⽂件不存在则需要⼿动创建,后面的配置文件有相同选项会覆盖前面的选项
ubuntu系统上读取的选项⽂件
1、~ 表⽰⽤⼾的家⽬录
2、MYSQL_HOME 是设置的环境变量路径
3、DATADIR 代表MySQL数据⽬录
选项文件语法
1、选项⽂件中指定选项时,省略两个前导破折号,并且每⼀⾏表⽰⼀个选项,例如: --quick 和 --host=127.0.0.1 在选项⽂件中应表⽰成 quick 和 host=127.0.0.1
2、#comment , ;comment
注释⾏以 # 或 ; 开,注释可以从⼀⾏的中间开始
3、 [ group ]
[group]可以设置一个配置组,给对应的应用程序设置选项。例如, [mysqld] 和 [mysql] 组分别适⽤于mysqld服务端程序和mysql客⼾端程序
4、opt_name
相当于命令⾏上的选项名
5、opt_name = value
选项名对应的值,可以使⽤转义序列 \b , \t , \n , \r , \\ 和 \s 来表⽰退格符、制表
符、换⾏符、回⻋符、反斜杠和空格字符
6、[client]
MySQL发⾏版中所有客⼾端程序都会读取并应⽤这个组下的选项,在这个组下可以指定适⽤于所有客⼾端程序的通⽤选项
7、可以通过 [客⼾端程序名] 的形式为不同的客⼾端程序设置配置组,例如 [mysql] ,当运⾏mysql程序时会读取并应⽤该组下的配置,如果选项名与 [client] 重复, [client] 中的选项将会被覆盖
8、在选项⽂件中使⽤ !includedir 指令来搜索指定⽬录中的其他选项⽂件.cnf,例如: !include /home/mydir ,但不保证⽬录中选项⽂件的读取顺序
9、在选项⽂件中使⽤ !include 指令来包含其他选项⽂件,例如: !include /home/mydir/myopt.cnf
查看mysql应用程序可用选项
使用--help,简写-?来查看应用程序可用选项
下面还有很多,不一一截图了
辨析--defaults-file 选项和 --defaults-extra-file选项
在mysql -?显示的选项中,我们可以看到
使用--defaults-file 选项的话,就不会再去按顺序读取配置文件了,而是只读取--defaults-file中设置的选项
使用--defaults-extra-file 选项的话,相当于就是多了一个配置文件的选项,如下
按从上往下的顺序、覆盖已有选项的形式来读取配置
MySQL客户端命令行
使⽤mysql客⼾端程序连接到数据库服务器之后,可以发送SQL语句到服务器执⾏,并以 ";"(分
号)、\g 或 \G结束
TIPS:
1. ; 与 \g 结束表⽰以表格形式展⽰结果
2. \G 结束表⽰以⾏形式展⽰结果
3. 如果当前已经输⼊了⼀部分SQL 语句想重新输⼊可以输⼊ctrl+C中断当前输⼊
--help选项和help命令
1、在bash命令行中,我们可以在mysql程序中加入选项--help或-?,来获得mysql客户端程序的选项的帮助信息。
2、在mysql客户端命令行中可以使用help或\h命令来获得各种命令的信息
案例:
?、\?--------help、\h
delimiter、\d
exit、\q ------ quit、\q
prompt 修改命令行提示符
system、\! 使用系统命令
还有很常用的\! clear清屏
3、使⽤help contents命令可以查看关于MySQL数据库使⽤的具体帮助
mysql客户端命令行执行.sql文件sql语句----source命令使用
dump.sql的内容
执行dump.sql里的sql语句
得到新数据库
利用mysql客户端程序执行.sql文件中的sql语句
mysql db_name < text_file # 在指定的数据库下执⾏SQL,前提是数据库必须提前建⽴好
mysql < text_file # 不指定数据库.sql中必须有USE [database_name],来指定要操作的数据库
其他客户端程序
mysqlcheck
mysqlcheck客⼾端程序可以对表进⾏:分析、检查、优化或修复操作
1、分析的作⽤是查看表的关键字分布,能够让 sql ⽣成正确的执⾏计划(⽀持 InnoDB,MyISAM,NDB)
2、 检查的作⽤是检查表的完整性以及数据库表和索引是否损坏(⽀持 InnoDB,MyISAM,
ARCHIVE,CSV)
3、优化的作⽤是回收空间、减少碎⽚、提⾼I/O(⽀持 InnoDB,MyISAM,ARCHIVE)
4、 修复的作⽤是修复可能已经损坏的表(⽀持 MyISAM,ARCHIVE,CSV)
注意事项
1. 当使⽤mysqlcheck⼯具时,MySQL服务器必须在运⾏状态
2. 执⾏过程中相应的表将会被锁定,所以其他的操作将会被挂起
3. 并不是所有的存储引擎都⽀持以上四种操作,如果遇到不⽀持的引擎会报出相应的错误
4. 执⾏表修复操作之前对表进⾏备份,因为某些情况下可能会导致数据丢失。
使⽤⽅法
⼀般通过以下三种⽅法使⽤mysqlcheck
1 、mysqlcheck [options] db_name [tbl_name ...]
2、mysqlcheck [options] --databases db_name ...
3、mysqlcheck [options] --all-databases
常用选项
mysqldump--数据库备份程序
mysqldump客⼾端程序可以执⾏逻辑备份并⽣成⼀组SQL语句,其中包含原始数据库和表的定义
以及表中的数据,以便实现对数据库的简单备份或复制
注意事项
1. 转储表时必须要有 SELECT 权限
2. 转储视图时必须要有 SHOW VIEW 权限
3. 转储触发器时必须要有 TRIGGER 权限
4. 如果没有使⽤ --single-transaction 选项时必须要有 LOCK TABLES 权限
5. 如果没有使⽤ --no-tablespaces 选项时必须要有 PROCESS 权限
6. 重新导⼊转储⽂件时,也需要有相应的权限
7. 由于mysqldump是逐⾏转储数据,所以不适⽤于⼤数据量的转储与导⼊
使⽤⽅法
mysqldump的⽅法通常有以下使⽤,可以转储⼀个或多个表或数据库,如下所⽰:
mysqldump [options] db_name [tbl_name ...] > .sql文件
mysqldump [options] --databases db_name ... > .sql文件
mysqldump [options] --all-databases > .sql文件
常⽤选项
备份数据库test_db
mysqladmin - MySQL 服务器管理程序
作⽤:
mysqladmin 是⼀个执⾏管理操作的客⼾端。可以⽤来检查服务器的配置和状态,以及创建和删除数据库等。
使⽤⽅法:
mysqladmin [options] command [command-arg] [command [command-arg]] ...
mysqladmin支持的命令:
1. version
显⽰来⾃服务器的版本信息。
2. create db_name
创建⼀个数据库名为 db_name 。
3. drop db_name
删除名为 db_name 的数据库及其所有表。
4. extended-status
显⽰服务器状态变量的值。
5. flush-hosts
刷新主机缓存中的所有信息。
6. flush-logs [log_type ...]
刷新所有⽇志。 log_type 中可以提供以下⼀种或多种⽇志类型binary, engine, error, general,
relay, slow,多个类型之间⽤空格分隔。
7. flush-privileges
重新加载授权表
8. flush-status
清除状态变量。
9. flush-tables
刷新所有表。
10. flush-threads
刷新线程缓存。
11. password new_password
设置新密码
12、ping
检查服务器是否可⽤
13. processlist
显⽰活动服务器线程的列表
14. kill id , id ,...
终⽌服务器线程。如果给出了多个线程ID值,则列表中不能有空格。
杀死连接后断线重连
15. reload
重新加载授权表。
16. refresh
刷新所有表。
17. shutdown
停⽌服务器。
18. start-replica
在副本服务器上开始复制。MySQL 8.0.26及以后的版本使⽤此命令。
19. start-slave
在副本服务器上开始复制。MySQL 8.0.26 之前使⽤此命令。
20. status
显⽰简短的服务器状态消息。
21. stop-replica
停⽌副本服务器上的复制。MySQL 8.0.26及以后的版本使⽤此命令。
22. stop-slave
停⽌副本服务器上的复制。MySQL 8.0.26 之前使⽤此命令。
23. variables
显⽰服务器系统变量及其值
mysqlshow - 显⽰数据库、表和列信息
作⽤:
mysqlshow 客⼾端可⽤于快速查看存在哪些数据库、数据库中的表以及表中的列或索引。
使⽤⽅法:
mysqlshow 可以使⽤以下语法:
mysqlshow [options] [db_name [tbl_name [col_name]]]
案例:
数据库、表、列
查看数据库
查看表
查看列
mysqldumpslow - 总结慢查询⽇志⽂件
作⽤:
在平时使⽤MySQL数据库时,经常进⾏查询操作,有些查询语句执⾏的时间⾮常⻓,当执⾏时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要⽤⽇志记录下来称为慢查询⽇志,mysqldumpslow可以解析慢查询⽇志⽂件并汇总其内容
注意事项:
通常情况下,mysqldumpslow 会将相似的查询分组,并显⽰摘要输出,⼀般会把数字和字符串⽤ N和 "S" 代替,要想显⽰真实的值可以使⽤ -a 选项。
使⽤⽅法:
mysqldumpslow 可以使⽤以下语法
mysqldumpslow [options] [log_file ...]
常⽤选项:
mysqlbinlog - 处理⼆进制⽇志⽂件
什么是⼆进制⽇志⽂件:
我们平时对数据库的修改,包括对数据的增删改,都会被描述成⼀个"事件",每个"事件"都会以⼆进制的形式记录在⼀个⽂件⾥,这个⽂件就是服务器的⼆进制⽇志⽂件,称为Binary Log或binlog
作⽤:
mysqlbinlog 能够以⽂本格式显⽰⼆进制⽇志⽂件中的内容
注意事项
binlog的默认保存路径是数据⽬录: /var/lib/mysql
使⽤⽅法:
mysqlbinlog 可以使⽤以下语法
mysqlbinlog [options] log_file ...
常⽤选项:
mysqlbinlog 有如下常⽤选项,可以在命令⾏中指定,也可以在选项⽂件中通过 [mysqlbinlog]
和 [client] 组进⾏指定
mysqlslap--负载仿真客户端
作⽤:
mysqlslap是⼀个诊断程序,⽤于模拟MySQL服务器的客⼾端负载,并报告每个阶段的时间,就好⽐多个客⼾端正在访问服务器⼀样
使⽤⽅法:
mysqlslap可以使⽤以下语法
mysqlslap [options]
注意事项:
1. 可以通过 --create 或 --query 选项,指定包含SQL语句的字符串或包含SQL语句的⽂件
2. 如果直接传入 SQL 字符串(如 --create="CREATE TABLE t1; INSERT..."
),默认分隔符是 ;
(分号)。
3、如果传入的是文件(如 --create=file.sql
),默认分隔符是 换行符 (\n
),即 每行一条 SQL 语句。如果要把⼀条语句分为多⾏书写,可以使⽤ --delimiter 选项指定不同的分隔符
4. 不能在⽂件中包含注释,因为mysqlslap不能解析注释。
5. mysqlslap运⾏分为三个阶段:
a. 创建测试数据阶段:创建⽤于测试的库、表或数据,这个阶段使⽤单个客⼾端连接
b. 运⾏负载测试阶段,这个阶段可以使⽤许多客⼾端连接
c. 清理阶段:执⾏删除表,断开连接等操作,这个阶段使⽤单个客⼾端连接
案例:
让mysqlslap⽤包含两个 INT 列和三个 VARCHAR 列的表⾃动构建查询的SQL语句。使⽤5个客⼾端,每个客⼾端查询20次
常⽤选项: