Mysql进阶——1

一.MySQL程序简介

本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法。
对常⽤程序进⾏详细的讲解,包括它们的选项。
MySQL安装完成通常会包含如下程序:
• Linux系统程序⼀般在 /usr/bin⽬录下,可以通过命令查看:

每个 MySQL 程序都有许多不同的选项。⼤多数程序都提供⼀个 --help 选项,您可以使⽤该选项
来获取程序不同选项的描述。例如: mysql --help,可以通过在命令⾏或配置⽂件中指定选项来覆
盖 MySQL 程序的默认选项值
• 以下是常⽤的MySQL程序:

1.mysqld - MySQL 服务器(介绍)

• mysqld也被称为MySQL服务器,是⼀个多线程程序,对数据⽬录进⾏访问管理(包含数据库和
表)。数据⽬录也是其他信息(如⽇志⽂件和状态⽂件)的默认存储位置。
• 当 MySQL 服务器启动时,会侦听指定的端⼝、处理来⾃客⼾端程序的⽹络连接,并管理不同客⼾ 端对数据库的访问

mysqld程序有许多选项可以在启动时指定 。运⾏以下命令查看完整的选项列表:

有关 MySQL 服务器命令选项、系统变量和状态变量的完整描述,我们在服务器MySQL 服务器配置 与管理专题中进⾏详细介绍

2.mysql - MySQL 命令⾏客⼾端

mysql 客⼾端简介
• mysql是⼀个简单的 SQL shell, 可以输⼊命令和执⾏SQL语句,当执⾏SQL语句时,查询结果以
ASCII 表格式显⽰
• mysql的基本使⽤⾮常简单,回顾⼀下连接数据库的⽅式,打开终端并输⼊以下命令

接下来我们详细介绍mysql 客⼾端的使⽤⽅法

1.2.1 指定选项的⽅式

• 在mysql后⾯的命令⾏中列出选项
• 在mysql后⾯指定配置⽂件的路径,以便在程序启动时读取配置⽂件中的选项
• 使⽤环境变量中的选项
我们重点介绍第⼀和第⼆种场景

1.2.2 mysql 客⼾端命令常⽤选项

1.2.3在命令⾏中使⽤选项

命令⾏中指定选项遵循以下规则:
• 选项应在程序名之后给出
• 选项以单破折号" - "或双破折号" -- "号开头, - 表⽰短格式, -- 表⽰⻓格式,例如:-?和 -
-help 都表⽰MySQL 程序显⽰他的帮助消息


选项名称区分⼤⼩写。 -v 和 -V 都是合法的,但含义不同,它们分别是 --verbose 和 --
version 选项的相应缩写形式

某些选项需要在后⾯指定⼀个值。例如, -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 、 -h127.0.0.1 和 -h
127.0.0.1 是等价的。 但是对于密码选项的短格式,如果要指定密码,选项与值之间不能有空
格,如下所⽰

在命令⾏中,第⼀个不带破折号 - 的值被解析为要访问的数据库名,所以 --database 选项⼀
般可以省略

在选项名称中,破折号 ( - ) 和下划线 ( _ ) 在⼤多数情况下可以互换使⽤,但前导破折号不能转
为下划线,例如: --skip-grant-tables 和 --skip_grant_tables 是等价的。
• 对于采⽤数值的选项,该值可以带有后缀 K , M 或 G 以指⽰乘数 1024、1024^2或 1024^3,例
如,以下命令告诉 mysqladmin对服务器执⾏ 1024 次 ping,每次 ping 之间休眠 3 秒

在命令⾏中包含空格的选项值必须⽤引号引起来。例如, --execute (or -e ) 选项与mysql⼀
起使⽤时,表⽰将⼀个或多个 SQL 语句发送给服务器执⾏并显⽰结果

3 选项(配置)⽂件

⼤多数 MySQL 程序都可以从选项⽂件(配置⽂件)中读取启动选项。可以在选项⽂件中指定常⽤选 项,这样就不⽤在每次运⾏程序时都在命令⾏中输⼊它们。⼤部分选项⽂件都是纯⽂本格式,可以使 ⽤任何⽂本编辑器创建。
1.3.1 使⽤⽅法
选项 --defaults-file 可以指定要使⽤的选项⽂件,客⼾端程序会读取并应⽤选项⽂件中的相关
配置

4.3.2 选项⽂件位置及加载顺序

MySQL 按以下表格中的顺序查找并读取选项⽂件。如果⽂件不存在则需要⼿动创建。
读取顺序从上到下,后读取的⽂件中配置的选项优先级越⾼

4.3.2.1 在 Unix 和 Linux 系统上读取的选项⽂件


~表⽰当前⽤⼾的主⽬录
• MYSQL_HOME 是设置的环境变量路径
DATADIR 代表MySQL数据⽬录
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.

4.3.3 选项⽂件语法

• 运⾏ MySQL 程序时在命令⾏上指定的任何⻓选项都可以在选项⽂件中指定,要获取选项列表可以 使⽤如下命令






4.4 mysql 客⼾端命令

• 使⽤mysql客⼾端程序连接到数据库服务器之后,可以发送SQL语句到服务器执⾏,并以 ";"(分
号)、\g 或 \G结束

  1. ; 与 \g 结束表⽰以表格形式展⽰结果
  2. \G 结束表⽰以⾏形式展⽰结果
  3. 如果当前已经输⼊了⼀部分SQL 语句想重新输⼊可以输⼊Control+C中断当前输⼊
    • 在当前模式下,mysql还有⼀组⾃⼰的命令,可以输⼊ help or \h 查看命令列表

    具体命令根据需求学习和使用即可。
4.5 从.sql⽂件执⾏ SQL 语句
4.5.1 使⽤source命令导⼊

有时候我们需要从.sql ⽂件执⾏⼀些SQL语句,⽐如要把⼀个数据库从⼀台服务器A复制到另⼀台服务 器B上,那么可以先从服务器A导出数据到.sql⽂件,然后在服务器B执⾏这个.sql⽂件,在上⼀⼩节, ⽤help命令查看命令列表,可以看到有⼀个source 命令如下所⽰:
下⾯我们演⽰⼀下source命令的使⽤⽅法

  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;

4.5.2 使⽤mysql客⼾端导⼊

• 直接使⽤mysql客⼾端程序导⼊.sql⽂件并执⾏相应的SQL语句,可以使⽤以下命令
mysql db_name < text_file 在指定的数据库下执⾏ SQL, 前提是数据库必须提前建⽴好
mysql < text_file 不指定数据库 .sql 中必须有 USE [database_name] ,来指定要操作的数据库

5. ⼯具包中的其他程序

mysqlcheck - 表维护程序

Mysqldump - 数据库备份程序

mysqladmin - MySQL 服务器管理程序

mysqlshow - 显⽰数据库、表和列信息

mysqldumpslow - 总结慢查询⽇志⽂件

mysqlbinlog - 处理⼆进制⽇志⽂件

mysqlslap - 负载仿真客⼾端

此处仅作列举,大家可以根据需求查询文档使用即可。

相关推荐
云和数据.ChenGuang5 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys6 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi6 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据7 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi8 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀8 小时前
Redis梳理
数据库·redis·缓存
独行soc8 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天8 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺8 小时前
分布式系统架构:服务容错
数据库·架构
独行soc9 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘