MySQL 安装完成通常会包含如下程序:
程序⼀般在 /usr/bin 目录下,可以通过命令查看:
目录:你的安装路径\MySQL Server 8.0\bin,可以通过命令查看:
可以在官网查阅相关可执行程序的介绍:MySQL
每个 MySQL 程序都有许多不同的选项。大多数程序都提供一个 --help选项,可以使用该选项来获取程序不同选项的描述。例如: mysql --help,可以通过在命令行或配置文件中指定选项来覆盖 MySQL 程序的默认选项值。
mysqld 也被称为 MySQL 服务器,是一个多线程程序,对数据目录(可以理解为 mysql 的主要工作目录)进行访问管理(包含数据库和表)。数据目录也是其他信息(如日志文件和状态文件)的默认存储位置。
tips:mysqld 中的 d 表示 daemon 后台程序。
当 MySQL 服务器启动时,会侦听指定的端口、处理来自客户端程序的网络连接,并管理不同客户端对数据库的访问。
mysqld 程序有许多选项可以在启动时指定 。运行以下命令查看完整的选项列表:mysqld --verbose --help
mysql 是一个简单的 SQL shell,可以输入命令和执行 SQL 语句,当执行 SQL 语句时,查询结果以 ASCII 表格式显示。
mysql 的基本使用非常简单,回顾一下连接数据库的方式,打开终端并输入以下命令:
# 连接MySQL服务器,⻓选项格式 mysql --user=user_name --password [db_name] # 短选项格式 mysql -uuser_name -p [db_name] # 输⼊密码 Enter password: your_password
注意:如果选项的值中包含空格,那么值需要包含在双引号中。
- 表示短格式, -- 表示长格式。
例如:-?和 --help 都表示 MySQL 程序显示它的帮助消息。
mysql -? mysql --help
-v 和 -V 都是合法的,但含义不同,它们分别是 --verbose 和 --version 选项的相应缩写形式,分别表示尽可能详细的显示结果和显示版本号。
# 以下两个等价 mysqld --verbose --help mysqld -v -? # 以下两个等价 mysql --version mysql -V
例如,-h 127.0.0.1 或 --host=127.0.0.1 表示向客户端程序指定 MySQL 服务器主机。
mysql -h 127.0.0.1 msyql --host=127.0.0.1
例如:--host=127.0.0.1、-h 127.0.0.1 和 -h 127.0.0.1 是等价的。但是对于密码选项的短格式,如果要指定密码,选项与值之间不能有空格,如下所示:
mysql -ptest # test表⽰密码,但没有指定要访问的数据库 mysql -p test # test 表⽰指定了访问的数据库,但没有指定密码
注意:在命令行中,第⼀个不带破折号 - 的值被解析为要访问的数据库名,所以 --database 选项一般可以省略。
例如: --skip-grant-tables 和 --skip_grant_tables 是等价的。
例如,以下命令告诉 mysqladmin 对服务器执行 1024 次 ping,每次 ping 之间休眠 3 秒。
mysqladmin --count=1K --sleep=3 ping -uroot -p
例如, --execute(或 -e)选项与 mysql 一起使用时,表示将⼀个或多个 SQL 语句发送给服务器执行并显示结果。
大多数 MySQL 程序都可以从选项文件(配置文件)中读取启动选项。可以在选项文件中指定常用选项,这样就不用在每次运行程序时都在命令行中输入它们。大部分选项文件都是纯文本格式,可以使用任何文本编辑器创建。
选项 --defaults-file可以指定要使用的选项文件,客户端程序会读取并应用选项文件中的相关配置。
# Linux mysql --defaults-file=/etc/mysql/my.cnf -uroot -p # Windows mysql "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" -uroot -p
虽然客户端与服务端的配置文件做了区分,但是我们一般不会分别在对应的配置文件中进行配置,而是把所有的配置都写在默认的配置文件中,便于维护和管理。
如果在使用 MySQL 程序时没有指定配置文件的路径,那么会自动读取默认路径下的配置文件。
注意:修改配置之前记得备份原有的配置文件,防止修改错误。
MySQL 按以下表格中的顺序查找并读取选项文件。如果文件不存在则需要手动创建。读取顺序从上到下,后读取的文件中配置的选项优先级越高。
对于两个配置文件中配置了相同的选项,那么优先级高的文件就覆盖掉优先级的文件中的选项。
TIPS:使用 MySQL Installer 安装 MySQL 成功后, my.ini 默认在该目录下。
读取顺序和优先级和 Windows 一样。
在Windows 系统种配置文件的后缀名为 .ini 或 .cnf,在 Linux 系统中配置文件的后缀名为 .cnf。
mysqld-auto.cnf 的优先级最高
For the server, one exception applies: The mysqld-auto.cnf option file in the data directory is processed last, so it takes precedence even over command-line options.运行 MySQL 程序时在命令行上指定的任何长选项都可以在选项文件中指定,要获取选项列表可以使用如下命令:
# 客⼾端程序 [root@VM-8-5-centos ~]# mysql --help # 服务端程序 [root@VM-8-5-centos ~]# mysqld --verbose --help
例如:--quick 和 --host=127.0.0.1 在选项文件中应表示成 quick 和 host=127.0.0.1
#comment , ;comment
注释行以 # 或 ; 开,注释可以从一行的中间开始
[ group ]
设置选项的程序或组的名称,不区分大小写。如果选项组名称与程序名称相同,则组中的选项专门应用于该程序,例如,[mysqld] 和 [mysql] 组分别适用于 mysqld 服务端程序和 mysql 客户端程序。
opt_name
相当于命令行上的选项名。
opt_name = value
选项名对应的值,可以使用转义序列 \b , \t , \n , \r , \\ 和 \s来表示退格符、制表符、换行符、回车符、反斜杠和空格字符。
- 选项名称和值中的前导和尾随空格会自动删除。
- 在 Windows 系统中设置路径应该使用转义字符。
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0" # 或 basedir="C:/Program Files/MySQL/MySQL Server 8.0"
[client]
MySQL 发行版中所有客户端程序都会读取并应用这个组下的选项(除了 mysqld),在这个组下可以指定适用于所有客户端程序的通用选项,例如配置用户名和密码(但要确保只有自己才可以访问这个文件以防止密码泄漏)。
# 在当前⽤⼾的home⽬录下创建.my.cnf,并在[client]写⼊公共配置 # 这⾥主要设置⽤了主机、端⼝、⽤⼾名、密码 root@guangchen-vm:~# vim .my.cnf [client] host=127.0.0.1 port=3306 user=root password=123456 # 直接运⾏mysql,不⽤输⼊⽤⼾名密码可以直接成功登录 root@guangchen-vm:~# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.34 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
root@guangchen-vm:~# cat .my.cnf [client] host=127.0.0.1 port=3306 user=root password=123456 # 设置为必须输⼊密码 [mysql] password root@guangchen-vm:~# mysql Enter password: # 强制要求登录时输⼊密码 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.34 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
为特定 MySQL 版本设置选项可以使用 [mysqld-5.7] 、 [mysqld-8.0] 的组名。
在 Linux下 编辑全局配置⽂件默认位置 /etc/mysql/my.cnf ,初始内容如下:
root@guangchen-vm:~# vim /etc/mysql/my.cnf # Copyright (c) 2015, 2023, Oracle and/or its affiliates. # # ... 省略 # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ # 以下区域可以根据需要进⾏配置
在已有内容下方输⼊相应的配置,我们要为客户端设置全局的编码格式为 utf8mb4,那么在 [client] 节点下指定相应的选项即可。
[client] # 所有客⼾端程序者会读取这个节点下的配置信息 default-character-set=utf8mb4 # 指定编码格式为utf8mb4
使用 mysql 客户端程序连接到数据库服务器之后,可以发送 SQL 语句到服务器执行,并以 ";"(分号)、\g 或 \G 结束。
在当前模式下,mysql 还有⼀组自己的命令,可以输入 helpor \h 查看命令列表:
前面表示的是完整的指令,括号内表示的是短指令格式。
使用 help contents 命令可以查看关于 MySQL 数据库使⽤的具体帮助,包括用户管理、SQL 语法、数据类型、组件等相关内容列表。
通过 help contents 中的具体条目查看介绍,例如:help Data Types
这里说明要查看关于数据类型的帮助信息:
继续输入 help 具体的条目。查看关于此条目的详细说明,例如:help BIT
以下显示关于 BIT 数据类形的具体描述:
使用常见:开发环境 --> 测试环境 --> 生产环境
有时候我们需要从 .sql 文件执行一些 SQL 语句,比如要把一个数据库从一台服务器 A 复制到另一台服务器 B 上,那么可以先从服务器 A 导出数据到 .sql 文件,然后在服务器 B 执行这个 .sql 文件。下面演示⼀下 source 命令的使用方法:
直接使用 mysql 客户端程序导入 .sql 文件并执行相应的 SQL 语句,可以使用以下命令:
登录数据库并验证是否导入成功:可以根据实际需要选择导入 .sql 的方式。
在命令行中使用 MySQL 发行版中的其他工具时,一些选项是公共的,比如用户名和密码,使用方法和 mysql 相同,在这里统一列出,后面在介绍不同的工具时,只讨论个性的选项及作用,公共选项如下所示:
mysqlcheck [options] db_name [tbl_name ...] mysqlcheck [options] --databases db_name ... mysqlcheck [options] --all-databases
如果在 db_name 后没有指定任何表名,或者使用 --databases 或 --all-databases 选项,那么整个数据库都会被检查。
mysqlcheck 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqlcheck] 和 [client]组进行指定。
如果要修复 InnoDB 存储引擎的数据,要把 InnoDB 存储引擎的表转化成 MyIsam 存储引擎。
mysqlcheck 程序的默认功能是对数据表进行检查操作(相当于指定选项 --check),如果想要对表进行修复操作,可以通过复制原来的 mysqlcheck 程序,并重命名为 mysqlrepair,并运行 mysqlrepair 即可,还可以创建 mysqlcheck 的快捷方式,并把快捷方式命名为 mysqlrepair,然后直接运行,这时就执行的是修复操作,通过下表所示的命名方式可以改变 mysqlcheck 的默认行为:
mysqldump 客户端程序可以执行逻辑备份并生成一组 SQL 语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqldump 命令可以生成 CSV、或 XML 格式的文件。
mysqldump [options] db_name [tbl_name ...] mysqldump [options] --databases db_name ... mysqldump [options] --all-databases
如果在 db_name 后没有指定任何表名,或者使用 --databases 或 --all-databases 选项,那么整个数据库都会被转储。
举例:
mysqldump 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqldump] 和 [client] 组进行指定。
mysqladmin 是⼀个执行管理操作的客户端(配合使用 mysqladmin 的用户必须具备管理员权限)。可以⽤来检查服务器的配置和当前状态,以及创建和删除数据库等。
mysqladmin 可以使用以下语法:
mysqladmin [options] command [command-arg] [command [command-arg]] ...
创建⼀个数据库名为 db_name 。 创建数据库时使用的编码集是选项文件中配置的编码集,如果没有指定编码集,那么就使用当前 MySQL 版本默认的编码集。
删除名为 db_name 的数据库及其所有表。
显示服务器状态变量的值。
刷新主机缓存中的所有信息。
刷新所有日志。 log_type 中可以提供以下⼀种或多种日志类型 binary,engine,error,general,relay,slow,多个类型之间用空格分隔。
重新加载授权表。
清除状态变量。
刷新所有表。
刷新线程缓存。
设置新密码。
Warning 有可能存在安全问题
Setting a password using mysqladmin should be considered insecure. On some systems, your password becomes visible to system status programs such as ps that may be invoked by other users to display command lines. MySQL clients typically overwrite the command-line password argument with zeros during their initialization sequence. However, there is still a brief interval during which the value is visible. Also, on some systems this overwriting strategy is ineffective and the password remains visible to ps. (SystemV Unix systems and perhaps others are subject to this problem.)
检查服务器是否可用。
显示活动服务器线程的列表。 默认 MySQL 服务器可以维护 150 个活动连接。如果连接被用完了,可以通过 kill 去手动指定结束休眠时间最长的那个线程。
重新加载授权表。
刷新所有表。
停止服务器。
在副本服务器上开始复制。MySQL 8.0.26 及以后的版本使用此命令。
在副本服务器上开始复制。MySQL 8.0.26 之前使⽤此命令。
显示简短的服务器状态消息。
停止副本服务器上的复制。MySQL 8.0.26 及以后的版本使用此命令。
停止副本服务器上的复制。MySQL 8.0.26 之前使⽤此命令。
显示服务器系统变量及其值。
mysqladmin 的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过 [mysqladmin] 和 [client]组进行指定。
mysqlshow 客户端可用于快速查看存在哪些数据库、数据库中的表以及表中的列或索引。
mysqlshow 为⼀些 SHOW 语句提供了⼀个命令行接口。
关于SHOW的使用参见官方文件 “SHOW语句”:MySQL :: MySQL 8.0 Reference Manual :: 6.5.7 mysqlshow — Display Database, Table, and Column Information
mysqlshow 可以使用以下语法:
mysqlshow [options] [db_name [tbl_name [col_name]]]
显示 test_db 数据库中的所有表:
显示 student 表中的所有字段:
显示 student 表中 id 字段的信息:
mysqlshow 的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过 [mysqlshow] 和 [client] 组进行指定,具体选项参考公共选项列表。
在平时使用 MySQL 数据库时,经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来称为慢查询日志,mysqldumpslow 可以解析慢查询日志文件并汇总其内容(进行慢查询对应的 SQL 优化的依据)。
通常情况下,mysqldumpslow 会将相似的查询分组并显示摘要输出,一般会把数字和字符串用 N 和 "S" 代替,要想显示真实的值可以使用 -a 和 -n 选项。
mysqldumpslow 可以使用以下语法:
mysqldumpslow [options] [log_file ...]
在没有给出任何选项的输出如下:
Reading mysql slow query log from /usr/local/mysql/data/mysqld80-slow.log Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost insert into t2 select * from t1 # 执⾏的SQL Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost insert into t2 select * from t1 limit N # 执⾏的SQL Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost insert into t1 select * from t1 # 执⾏的SQL # Count:执行的次数 Time:单次的耗时 Lock:申请与释放锁所用时间 Rows:获取数据所用时间
mysqldumpslow 的常用选项:
二进制日志文件:我们平时对数据库的修改,包括对数据的增删改,都会被描述成⼀个 “事件”,每个 “事件” 都会以二进制的形式记录在一个文件里,这个文件就是服务器的二进制日志文件,称为 Binary Log 或 binlog。
mysqlbinlog 能够以文本格式显示二进制日志文件中的内容。
binlog 是以 .00000n 结尾命名的⽂件,n 不断递增。
# binlog的名字可以在选项⽂件⾥配置,我这⾥默认的是binlog开头 root@guangchen-vm:/var/lib/mysql# ll binlog* -rw-r----- 1 mysql mysql 505 8⽉ 29 18:46 binlog.000001 -rw-r----- 1 mysql mysql 180 8⽉ 29 19:14 binlog.000002 -rw-r----- 1 mysql mysql 157 9⽉ 1 11:55 binlog.000003 -rw-r----- 1 mysql mysql 180 9⽉ 1 14:20 binlog.000004 -rw-r----- 1 mysql mysql 180 9⽉ 1 14:24 binlog.000005 -rw-r----- 1 mysql mysql 544 9⽉ 1 19:17 binlog.000006 -rw-r----- 1 mysql mysql 180 9⽉ 4 12:06 binlog.000007 -rw-r----- 1 mysql mysql 180 9⽉ 4 18:57 binlog.000008 -rw-r----- 1 mysql mysql 180 9⽉ 5 19:12 binlog.000009 -rw-r----- 1 mysql mysql 37496 9⽉ 6 19:25 binlog.000010 -rw-r----- 1 mysql mysql 157 9⽉ 7 12:18 binlog.000011 -rw-r----- 1 mysql mysql 157 9⽉ 7 12:18 binlog.000012 -rw-r----- 1 mysql mysql 192 9⽉ 7 12:18 binlog.index
mysqlbinlog 可以使用以下语法:
mysqlbinlog [options] log_file ...
例如要显示名为 binlog.000010 二进制日志⽂件的内容,可以使用以下命令:
root@guangchen-vm:/var/lib/mysql# mysqlbinlog binlog.000010 # ... 略 # at 37380 #230906 15:30:33 server id 1 end_log_pos 37442 CRC32 0x6d3de7e6 Write_rows: table id 119 flags: STMT_END_F BINLOG ' mSr4ZBMBAAAAQgAAAASSAAAAAHcAAAAAAAEAB3Rlc3RfZGIAB3N0dWRlbnQABAMDDw8EUABQAA8B AQACAS1oGW+U mSr4ZB4BAAAAPgAAAEKSAAAAAHcAAAAAAAMAAgAE/wAFAAAAVcMAAAbpkrHkuIMKcXFAYml0LmNv bebnPW0= '/*!*/; # ... 略
ib_logfile1 的输出内容中包含各种事件,事件信息包括 SQL 语句、执行语句的服务器 ID、语句执行时的时间戳、花费的时间等等。
mysqlbinlog 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过 [mysqlbinlog] 和 [client] 组进行指定。
mysqlslap 可以使用以下语法:
mysqlslap [options]
mysqlslap 有如下常用选项,可以在命令行中指定,也可以在选项⽂件中通过 [mysqlslap] 和 [client] 组进行指定。