第五章走读
本章主要是介绍了mysql的一些基础的用法,包括命令行连接、建库、建表、查询语句的使用。
1连接到服务器和断开服务器连接
在连接到MySQL服务器时,需要提供主机名(host)和用户名(user),其中MySQL服务器正在运行。请根据设置替换适当的值。当MySQL显示提示时,输入密码(password)。
$> mysql -h host -u user -p
Enter password: ********
在成功连接到MySQL服务器后,可以通过在命令提示符下输入“QUIT”来随时断开连接。
mysql> QUIT
Bye
2.创建和使用数据库
要查找服务器上当前存在的数据库,可以使用以下命令:
SHOW DATABASES;
如果测试数据库存在,可以尝试访问它:
USE test;
注意,USE
语句不需要分号,可以在一行中给出。如果您有权限,可以创建自己的数据库并授予相应的权限。例如,要将您的动物园命名为“zoo”,您可以执行以下操作:
CREATE DATABASE zoo;
GRANT ALL ON zoo.* TO 'your_mysql_name'@'your_client_host';
其中,your_mysql_name
是分配给您的MySQL用户名,your_client_host
是您连接到服务器的主机。
如果管理员在设置权限时已经为您创建了数据库,那么您可以直接开始使用它。如果没有,您需要自行创建数据库。在Unix系统中,数据库名称是区分大小写的,这与SQL关键字不同。因此,您必须确保始终使用相同的大小写来引用您的数据库名称,例如“menagerie”,而不是“Menagerie”、“MENAGERIE”或其他任何变体。这个规则也适用于表名。
例如,如果您需要创建一个名为“menagerie”的数据库,您可以使用以下命令:
mysql> CREATE DATABASE menagerie;
确保在命令中准确地使用“menagerie”这个名称,避免因为大小写错误而导致的问题。
要创建一个名为"pet"的表,可以使用CREATE TABLE语句,并指定表的字段及其数据类型。例如:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
这将创建一个包含以下字段的表:
- name: 宠物的名字,最大长度为20个字符;
- owner: 宠物主人的名字,最大长度为20个字符;
- species: 宠物的种类,最大长度为20个字符;
- sex: 宠物的性别,用一个字符表示;
- birth: 宠物的出生日期;
- death: 宠物的死亡日期。
要验证表是否已按预期创建,可以使用DESCRIBE语句:
mysql> DESCRIBE pet;
这将显示表的结构,包括字段名、数据类型、是否允许为空、键信息以及默认值和额外属性。
第六章走读
1.mysql配置文件
在Unix和类Unix系统上,MySQL服务器和客户端可以读取多个选项文件来获取配置设置。这些文件根据其应用范围和读取顺序可以分为几种类型,具体如下:
-
全局选项文件:
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
-
特定于服务器的选项文件:
$MYSQL_HOME/my.cnf
(环境变量指向的目录)defaults-extra-file
(如果使用--defaults-extra-file
指定)DATADIR/mysqld-auto.cnf
-
特定于用户的选项文件:
~/.my.cnf
(当前用户的主目录下的隐藏文件)~/.mylogin.cnf
(仅限客户端,用于保存用户登录路径)
优先级规则是,如果在多个文件中发现相同的选项,通常以最后出现的为准。然而,对于mysqld
,--user
选项的第一个实例具有优先权,以防用户在命令行上指定的设置被选项文件中的设置覆盖,提供额外的安全性。
此外,SYSCONFDIR
是在构建MySQL时通过CMake指定的目录,默认位于编译安装目录下的etc
。如果没有设置MYSQL_HOME
环境变量,mysqld_safe
程序会将其设置为MySQL的基本安装目录BASEDIR
。DATADIR
表示MySQL的数据目录,其默认位置是在编译时内置的,但也可以在配置文件或命令行中用--datadir
选项进行更改。
2.设置环境变量
在Windows命令提示符中设置环境变量的语法如下:
set USER=your_name
3.mysql服务器启动程序
mysqld是MySQL Server的单线程程序,负责管理对包含数据库和表的MySQL数据目录的访问。它不会生成其他进程。为了启动mysqld服务器,推荐使用mysqld_safe,它在Unix系统上增加了一些安全功能,例如在发生错误时重新启动服务器并记录运行时信息到错误日志中。
以下是mysqld_safe的一些选项:
- –basedir:MySQL安装目录的路径
- –core-file-size:mysqld应能够创建的核心文件的大小
- –datadir:数据目录的路径
- –defaults-extra-file:除了通常的选项文件之外,还要读取命名的选项文件
- –defaults-file:只读取命名的选项文件
- –help:显示帮助信息并退出
- –ledir:服务器所在目录的路径
- –log-error:将错误日志写入指定的文件
- –malloc-lib:用于mysqld的替代内存分配库
- –mysqld:要启动的服务器程序的名称(在ledir目录中)
- –mysqld-safe-log-timestamps:日志记录的时间戳格式
- –mysqld-version:服务器程序名称的后缀
- –nice:使用nice程序设置服务器调度优先级
- –no-defaults:不读取任何选项文件
- –open-files-limit:mysqld应能够打开的文件数量
- –pid-file:服务器进程ID文件的路径名
- –plugin-dir:插件安装的目录
- –port:监听TCP/IP连接的端口号
- –skip-kill-mysqld:不尝试杀死孤立的mysqld进程
- –skip-syslog:不将错误消息写入syslog;使用错误日志文件
- –socket:监听Unix套接字连接的套接字文件
- –syslog:将错误消息写入syslog
- –syslog-tag:写入syslog的消息的标签后缀
- –timezone:将TZ时区环境变量设置为指定值
- –user:以名为user_name或数字用户ID user_id的用户身份运行mysqld
-
mysql.server概述:Unix和类Unix系统上的MySQL发行版提供了一个名为mysql.server的脚本,用于通过mysqld_safe程序启动MySQL服务器。这个脚本可以在使用System V风格运行目录的系统上使用,例如Linux和Solaris,也适用于macOS的MySQL启动项。
-
mysql.server参数:mysql.server脚本支持start和stop参数来手动控制MySQL服务器的启动和关闭。例如,执行mysql.server start来启动服务器,mysql.server stop来停止服务器。
-
mysql.server配置:在调用时,mysql.server会在MySQL安装目录下调用mysqld_safe,并可以读取选项文件中的[mysql.server]和[mysqld]部分的选项。配置文件my.cnf中通常包含这些设置,例如datadir(数据目录),socket(套接字文件),port(端口号)和user(运行用户)。
-
mysqld_multi功能:mysqld_multi是一个管理工具,旨在同时处理多个mysqld进程,这些进程可能在不同的套接字文件和TCP/IP端口上监听连接。它能够启动或停止服务器,以及报告其当前状态。
-
系统兼容性与自动启动:一些Linux平台可能会通过systemd支持来管理MySQL服务的启动和关闭,在这种情况下,可能不会安装mysql.server和mysqld_safe。而对于其他系统,可以将mysql.server脚本添加到系统的启动脚本中(如/etc/init.d或/etc/rc*文件),以实现MySQL服务的自动启动和停止。
4.客户端程序
mysqladmin— MySQL服务器管理程序
mysqladmin是一个用于执行管理操作的命令行工具。您可以使用它来检查MySQL服务器的配置和当前状态,创建和删除数据库等。要调用mysqladmin,您需要提供一些选项和命令参数。例如:
mysqladmin [options] command [command-arg] [command [command-arg]] ...
其中,options
是可选的参数,如--host
、--user
等,用于指定连接MySQL服务器的方式;command
是要执行的管理操作,如ping
、shutdown
等;command-arg
是与命令相关的参数。
以下是一些常用的mysqladmin选项及其描述:
--bind-address
:指定用于连接到MySQL服务器的网络接口。--character-sets-dir
:指定字符集所在的目录。--compress
:压缩所有在客户端和服务器之间发送的信息。--connect-timeout
:设置连接超时前的秒数。--count
:指定重复执行命令的次数。--debug
:写入调试日志。--debug-check
:程序退出时打印调试信息。--debug-info
:程序退出时打印调试信息、内存和CPU统计信息。--default-auth
:指定要使用的认证插件。--default-character-set
:指定默认字符集。--defaults-extra-file
:除了通常的选项文件外,还读取指定的选项文件。--defaults-file
:仅读取指定的选项文件。--defaults-group-suffix
:指定选项组后缀值。--enable-cleartext-plugin
:启用明文认证插件。--force
:即使发生SQL错误也继续执行。--get-server-public-key
:从服务器请求RSA公钥。--help
:显示帮助信息并退出。--host
:指定MySQL服务器所在的主机。--login-path
:从.mylogin.cnf文件中读取登录路径选项。--no-beep
:发生错误时不发出提示音。--no-defaults
:不读取任何选项文件。--no-login-paths
:不从登录路径文件中读取登录路径。--password
:连接到服务器时使用的密码。--port
:指定TCP/IP端口号进行连接。--print-defaults
:打印默认选项。--protocol
:指定要使用的传输协议。--relative
:在使用–sleep选项时,显示当前值与之前值之间的差异。--server-public-key-path
:包含RSA公钥的文件的路径名。--shared-memory-base-name
:共享内存连接的共享内存名称(仅限Windows)。--show-warnings
:在语句执行后显示警告。--shutdown-timeout
:等待服务器关闭的最大秒数。--silent
:静默模式。--sleep
:重复执行命令,每次间隔delay秒。--socket
:指定Unix套接字文件或Windows命名管道进行连接。--ssl-ca
:包含受信任SSL证书颁发机构列表的文件。--ssl-capath
:包含受信任SSL证书颁发机构证书文件的目录。--ssl-cert
:包含X.509证书的文件。--ssl-cipher
:允许用于连接加密的密码套件。--ssl-crl
:包含证书吊销列表的文件。--ssl-crlpath
:包含证书吊销列表文件的目录。--ssl-fips-mode
:是否在客户端启用FIPS模式。--ssl-key
:包含X.509密钥的文件。--ssl-mode
:指定与服务器连接的安全状态。--ssl-session-data
:包含SSL会话数据的文件。--ssl-session-data-continue-on-failed-reuse
:如果会话重用失败,是否建立连接。--tls-ciphersuites
:允许用于加密连接的TLSv1.3密码套件。--tls-sni-servername
:客户端提供的服务器名称。--tls-version
:允许用于加密连接的TLS协议。--user
:连接到服务器时使用的MySQL用户名。--verbose
:详细模式。--version
:显示版本信息并退出。--vertical
:垂直打印查询输出行(每列一个值)。--wait
:如果无法建立连接,则等待并重试而不是中止。--zstd-compression-level
:用于使用zstd压缩的连接的压缩级别。
mysqlcheck— 表维护程序
mysqlcheck是一个客户端工具,用于维护MySQL数据库中的表。它可以检查、修复、优化或分析表。每个表在处理时都会被锁定,因此其他会话在此期间无法访问。mysqlcheck使用SQL语句CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE来实现这些功能。
有三种方法可以调用mysqlcheck:
- mysqlcheck [options] db_name [tbl_name …]
- mysqlcheck [options] --databases db_name …
- mysqlcheck [options] --all-databases
如果没有指定db_name后面的任何表名,或者使用–databases或–all-databases选项,则会检查整个数据库。
mysqlcheck支持以下选项:
- –all-databases:检查所有数据库中的所有表
- –all-in-1:为每个数据库执行一个包含该数据库所有表的单一语句
- –analyze:分析表
- –auto-repair:如果检查到的表损坏,自动修复它
- –bind-address:使用指定的网络接口连接到MySQL服务器
- –character-sets-dir:安装字符集的目录
- –check:检查表的错误
- –check-only-changed:仅检查自上次检查以来已更改的表
- –check-upgrade:使用FOR UPGRADE选项调用CHECK TABLE
- –compress:压缩客户端和服务器之间发送的所有信息
- –compression-algorithms:允许用于连接到服务器的压缩算法
- –databases:将所有参数解释为数据库名称
- –debug:写入调试日志
- –debug-check:程序退出时打印调试信息
- –debug-info:程序退出时打印调试信息、内存和CPU统计信息
- –default-auth:要使用的默认身份验证插件
- –default-character-set:指定默认字符集
- –defaults-extra-file:除了通常的选项文件外,还读取命名的选项文件
- –defaults-file:仅读取命名的选项文件
- –defaults-group-suffix:选项组后缀值
- –enable-cleartext-plugin:启用明文身份验证插件
- –extended:检查并修复表
- –fast:仅检查未正确关闭的表
- –force:即使发生SQL错误也继续执行
- –get-server-public-key:从服务器请求RSA公钥
- –help:显示帮助信息并退出
- –host:MySQL服务器所在的主机
- –login-path:从.mylogin.cnf文件中读取登录路径选项
- –medium-check:执行比–extended操作更快的检查
- –no-defaults:不读取任何选项文件
- –no-login-paths:不从登录路径文件中读取登录路径
- –optimize:优化表
- –password:连接到服务器时使用的密码
- –password1:连接到服务器时使用的第一个多因素身份验证密码
- –password2:连接到服务器时使用的第二个多因素身份验证密码
- –password3:连接到服务器时使用的第三个多因素身份验证密码
- –pipe:使用命名管道(仅限Windows)连接到服务器
- –plugin-dir:安装插件的目录
- –port:用于连接的TCP/IP端口号
- –print-defaults:打印默认选项
- –protocol:要使用的传输协议
- –quick:最快的检查方法
- –repair:执行可以修复几乎所有问题(除了唯一键不唯一的情况)的修复操作
- –server-public-key-path:包含RSA公钥的文件的路径名
- –shared-memory-base-name:共享内存连接的共享内存名称(仅限Windows)
- –silent:静默模式
- –skip-database:跳过此数据库执行的操作
- –socket:Unix套接字文件或Windows命名管道,用于连接
- –ssl-ca:包含受信任SSL证书颁发机构列表的文件
- –ssl-capath:包含受信任SSL证书颁发机构证书文件的目录
- –ssl-cert:包含X.509证书的文件
- –ssl-cipher:允许用于连接加密的密码套件
- –ssl-crl:包含证书吊销列表的文件
- –ssl-crlpath:包含证书吊销列表文件的目录
- –ssl-fips-mode:是否在客户端启用FIPS模式
- –ssl-key:包含X.509密钥的文件
- –ssl-mode:期望与服务器的安全连接状态
- –ssl-session-data:包含SSL会话数据的文件
- –ssl-session-data-continue-on-failed-reuse:如果会话重用失败,是否建立连接
- –tables:覆盖–databases或-B选项
- –tls-ciphersuites:允许用于加密连接的TLSv1.3密码套件
- –tls-sni-servername:客户端提供的服务器名称
- –tls-version:允许用于加密连接的TLS协议
- –use-frm:对MyISAM表进行修复操作时使用
- –user:连接到服务器时使用的MySQL用户名
- –verbose:详细模式
- –version:显示版本信息并退出
- –write-binlog:将ANALYZE、OPTIMIZE、REPAIR语句记录到二进制日志。–skip-write-binlog将这些语句添加NO_WRITE_TO_BINLOG。
mysqldump - 数据库备份程序
mysqldump 是一个客户端实用程序,用于执行逻辑备份。它可以将一个或多个 MySQL 数据库转储为一组 SQL 语句,这些语句可以重新执行以重现原始数据库对象定义和表数据。此外,mysqldump 还可以生成 CSV、其他分隔文本的输出或 XML 格式。
要使用 mysqldump,至少需要 SELECT 权限来转储表,SHOW VIEW 权限来转储视图,以及转储触发器所需的权限。如果未使用 --single-transaction 选项且未使用 --no-tablespaces 选项,则还需要 PROCESS FLUSH_TABLES 权限。某些选项可能需要其他权限,如 Option Description 中所说明。
若要重新加载转储文件,必须具有执行其中包含的语句的权限,例如由 CREATE 语句创建的数据库、表和触发器。mysqldump 输出可能包含更改数据库排序规则的 ALTER DATABASE 语句。这些可以在倾倒时使用存储的程序以保留其字符编码。重新加载包含此类语句的转储文件时,受影响数据库的权限是必需的。
通常有三种方法可以使用 mysqldump:转储一组或多个表、转储一个或多个完整数据库,或者转储整个 MySQL 服务器。以下是三种方法的示例:
- 转储一组或多个表:
mysqldump [options] db_name tbl_name ...
- 转储一个或多个完整数据库:
mysqldump [options] --databases db_name ...
- 转储整个 MySQL 服务器:
mysqldump [options] --all-databases
若要转储整个数据库,请不要在 db_name 后命名任何表,或者使用 --databases 或 --all-databases 选项。
mysqlimport - 数据导入程序
mysqlimport客户端提供了一个LOAD DATA SQL语句的命令行界面。mysqlimport的大多数选项都直接对应于LOAD DATA语法的子句。
调用mysqlimport的方法如下:
mysqlimport [options] db_name textfile1 [textfile2 ...]
对于命令行上命名的每个文本文件,mysqlimport会从文件名中提取表名,并将文件内容导入到相应的表中。例如,文件名为patient.txt,则所有内容都将导入到名为patient的表中。
mysqlshow - 显示数据库、表和列信息
mysqlshow客户端可以用于快速查看数据库、表、列或指标的信息。它提供了一个命令行界面,可以执行多个SQL SHOW语句。
调用mysqlshow的方法如下:
mysqlshow [options] [db_name [tbl_name [col_name]]]
- 如果未提供数据库名称,则显示数据库名称列表。
- 如果未提供表名,则显示数据库中所有匹配的表。
- 如果未提供列名,则显示表中所有匹配的列和列类型。
输出仅显示您拥有相应权限的数据库、表或列。
mysqlslap - 负载仿真客户端
Mysqlslap是一个诊断工具,用于模拟MySQL服务器的客户端负载并报告每个阶段的计时。它通过模拟多个客户端访问服务器来工作。
调用mysqlslap的方法如下:
mysqlslap [options]
可以使用某些选项(如–create或–query)指定包含SQL语句或文件的字符串。如果指定了文件,则默认情况下每行必须包含一个语句(即,隐式语句分隔符是换行符)。可以使用–delimiter选项指定一个不同的分隔符,用于指定跨越多行的语句或将多个语句放在单行。文件中不能包含注释;mysqlslap不理解它们。
Mysqlslap分为三个阶段运行:
- 创建架构、表和任何存储的程序(可选)或用于测试的数据。此阶段使用单个客户端连接。
- 运行负载测试。此阶段可以使用许多客户端连接。
- 清理(如果指定,则断开连接,删除表)。这个阶段使用单个客户端连接。
示例:
提供您自己的创建和查询SQL语句,其中包含50个客户端查询和200次选择(在单个命令行上输入):
mysqlslap --delimiter=";"
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"
--query="SELECT * FROM a" --concurrency=50 --iterations=200
让mysqlslap构建查询SQL语句,包含两个INT列和一个三列VARCHAR表。用5个客户端,每个客户端查询20次。不要创建表或插入数据(即,使用上一个测试的架构和数据):
mysqlslap --concurrency=5 --iterations=20
--number-int-cols=2 --number-char-cols=3
--auto-generate-sql
告诉程序加载创建、插入和查询SQL指定文件中的语句,其中文件创建了多个表,由分号分隔的语句,插入以分号分隔的语句。该文件应包含多个查询,用分号分隔。运行所有负载语句,然后用5个客户(各五次):
mysqlslap --concurrency=5
--iterations=5 --query=query.sql --create=create.sql
--delimiter=";"
5.管理的程序
ibd2sdi-InnoDB表空间SDI提取实用程序
ibd2sdi是一个工具,用于从InnoDB表空间文件中提取序列化字典信息(SDI)。SDI数据存在于所有持久的InnoDB表空间文件中。
ibd2sdi可以处理各种类型的表空间文件,包括每个表的文件表空间文件(.ibd文件)、通用表空间文件(.ibd文件)、系统表空间文件(ibdata*files)以及数据字典表空间(mysql.ibd)。但是,它不支持临时表空间或撤消表空间。
在服务器离线时,ibd2sdi可以在运行时使用。然而,在DDL操作、ROLLBACK操作以及与SDI相关的日志清除操作期间,可能存在短暂的时间间隔,此时ibd2sdi无法读取存储在表空间中的SDI数据。
ibd2sdi执行未提交的SDI读取,从指定的表空间中获取。它不访问重做日志和撤消日志。
要调用ibd2sdi实用程序,可以使用以下命令:
ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
ibd2sdi支持多文件表空间,如InnoDB系统表空间,但它不能同时在多个表空间上运行。对于多文件表空间,需要指定每个文件。例如:
ibd2sdi ibdata1 ibdata2
在多文件表空间中,文件必须按页码升序指定。如果两个连续的文件具有相同的空间ID,则后面的文件必须以前一个文件的最后页码+1开头。
ibd2sdi以JSON格式输出SDI,包括id、type和数据字段。
innochecksum ——离线InnoDB文件校验和实用程序
好的,为您整理下这段话:
InnoChecksum是一个工具,用于打印InnoDB文件的校验和。它会读取InnoDB表空间文件,计算每个页面的校验和,然后将计算得到的校验和与存储的校验和进行对比,并报告不匹配的情况,这可能表明页面已损坏。这个工具最初是为了在断电后快速验证表空间文件的完整性而设计的,但也可以在文件复制后使用。由于校验和不匹配可能导致InnoDB故意关闭正在运行的服务器,因此最好使用此工具,而不是等待正式服遇到受损的页面。
innochecksum不能在服务器已打开的文件上使用。对于这些文件,您应该使用CHECK TABLE来检查表空间中的表。如果试图在服务器正在运行的表空间上运行innochecksum,可能会导致无法锁定文件的错误。
如果发现校验和不匹配,请从备份中恢复,或启动服务器并尝试使用mysqldump备份表空间内的表。
要调用innochecksum,可以使用以下命令:
innochecksum [options] file_name