MySQL数据库系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库系统

MySQL数据库概述

MySQL是开源的关系型数据库服务器软件

目前由Oracle公司开发和维护

官方站点:MySQL

MySQL的特点

多线程、多用户

基于C/S(客户端/服务器)架构

简单易用、查询速度快

安全可靠

数据库的基本管理

查看数据库结构

创建及删除库和表

管理表中的数据记录

登录及退出MySQL环境

  • 登录MySQL
1.  mysql   -u  用户名 [-p]
2.  提示符:mysql>

设置mysql用户密码

mysqladmin  -u  root    [-p]    password    新密码

退出MySQL

mysql>exit

查看数据库结构

查看数据库列表信息

SHOW DATABASES

查看数据库中的数据表信息

1.  USE 数据库名
2.  SHOW    TABLES

显示数据表的结构

DESCRIBE    [数据库名.]表名

数据库的创建和删除

创建新的数据库

CREATE  DATABASE    数据库名

创建新的数据表

CREATE TABLE 表名(字段定义...)

删除指定的数据表

DROP    TABLE   [数据库名.]表名

删除指定的数据库

DROP    DATABASE    数据库名

插入,查询数据记录

向数据表中插入新的数据记录

INSERT INTO 表名(字段1, 字段2, ……)  VALUES(字段1的值, 字段2的值, ……)

从数据表中查找符合条件的数据记录

SELECT 字段名1,字段名2 …… FROM 表名 WHERE 条件表达式

修改,删除数据记录

修改、更新数据表中的数据记录

UPDATE 表名 SET 字段名1=值1[,字段名2=值2]  WHERE 条件表达式

使用UPDATE修改密码

1. mysql> UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root';
2.  Query OK, 3 rows affected (0.00 sec)
3.  Rows matched: 3  Changed: 3  Warnings: 0
4.  mysql> FLUSH PRIVILEGES;

在数据表中删除指定的数据记录

DELETE FROM 表名 WHERE 条件表达式

维护数据库及用户权限

设置用户权限(用户不存在时,则新建用户)

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY ‘密码’ ]

查看用户的权限

SHOW GRANTS FOR 用户名@来源地址

撤销用户的权限

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址

mysql安装

准备工作

       为了避免发生端口冲突,程序冲突等现象,建议先查询mysql软件的安装情况,确认没有使用以RPM方式安装的mysql-server,mysql软件包,否则建议将其卸载。

1.  [root@localhost ~]# rpm -q mysql-server mysql
2.  未安装软件包 mysql-server 
3.  未安装软件包 mysql

挂载系统盘安装ncurses-devel包

1. [root@localhost ~]# mount /dev/cdrom /mnt
2.  mount: /dev/sr0 写保护,将以只读方式挂载
3.  [root@localhost ~]# cd /mnt/Packages/
4.  [root@localhost Packages]# rpm -ivh ncurses-devel-5.9-13.20130511.el7.x86_64.rpm 
5.  [root@localhost ~]#eject

挂载cmake光盘

MySQL 5.X系列版本需要cmake编译安装,所以先安装cmake包

1.  [root@localhost ~]# mount /dev/cdrom /mnt
2.  mount: /dev/sr0 写保护,将以只读方式挂载
3.  [root@localhost ~]# cd /mnt
4.  [root@localhost mnt]# tar zxf cmake-2.8.6.tar.gz -C /usr/src
5.  [root@localhost mnt]# cd /usr/src/cmake-2.8.6/
6.  [root@localhost cmake-2.8.6]# ./configure && gmake && gmake install

过程较长大概三分钟。

源码编译及安装

  • 创建运行用户

为了加强数据库服务的权限控制,建议使用专门的运行用户,如mysql。此用户不需要直接登录到系统,可以不出创建文件夹。

1. [root@localhost ~]# groupadd mysql
2. [root@localhost ~]# useradd -M -s /sbin/nologin mysql -g mysql
  • 解包

挂载mysql源码包解压,释放到/usr/src 目录下,并切换到展开后的源码目录。

1. [root@localhost ~]# mount /dev/cdrom /mnt
2. [root@localhost ~]# cd /mnt
3. [root@localhost mnt]# tar zxf mysql-5.6.36.tar.gz -C /usr/src/
4. [root@localhost mnt]# cd /usr/src/mysql-5.6.36/
5. [root@localhost mysql-5.6.36]#
  • 配置

将默认使用的字符集设置为utf-8,其他配置如下

[root@localhost mysql-5.6.36]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:指定将MySQL数据库程序安装到某目录下。

-DSYSCONFDIR=/etc:指定初始化参数文件目录。

-DDEFAULT_CHARSET=utf8:指定默认使用的字符集编码 。

-DDEFAULT_COLLATION=utf8_general_ci:指定默认使用的字符集校对规则,utf8_general_ci是适用于utf-8字符集的通用规则。

-DWITH_EXTRA_CHARSETS=all:指定额外支持的其他字符集编码。

  • 编译并安装
[root@localhost mysql-5.6.36]# make && make install

此编译安装时间较长(20分钟左右)

安装后的其他调整

  • 对数据库目录进行权限设置
[root@localhost mysql-5.6.36]# chown -R mysql:mysql /usr/local/mysql/
  • 建立配置文件

CentOS 7 系统下默认支持MariaDB数据库,因此系统默认的/etc/my.cnf配置文件中是MariaDB的配置文件。而在MySQL源码目录中的support-files文件下,提供了mysql数据库默认的样本配置文件my-default.cnf文件,在启动MySQL数据库服务之前,需要先将原有的my.cnf文件替换为MySQL提供的配置文件内容。

1. [root@localhost mysql-5.6.36]# rm -rf /etc/my.cnf
2. [root@localhost mysql-5.6.36]# cp support-files/my-default.cnf /etc/my.cnf
  • 初始化数据库

为了能够正常使用MySQL数据库系统,应以运行用户mysql的身份执行初始化脚本mysql_install_db,指定数据存放目录等。

[root@localhost mysql-5.6.36]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
  • 设置环境变量

为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量

1. [root@localhost mysql-5.6.36]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
2. [root@localhost mysql-5.6.36]# . /etc/profile           //立即生效
  • 添加系统服务

若希望添加mysql系统服务,以便通过systemctl进行管理,可以直接源码包中提供的服务脚本。找到support-files 文件夹下的mysql.server脚本文件,将其复制到/usr/local/mysql/ bin/目录下,并改名为mysqld.sh,然后创建mysql系统服务的配置文件/usr/lib/systemd/system/mysqld.service,将其添加为mysqld系统服务。

1. [root@localhost ~]# cd /usr/src/mysql-5.6.36/
2. [root@localhost mysql-5.6.36]# cp support-files/mysql.server /usr/local/mysql/bin/mysqld.sh
3. [root@localhost mysql-5.6.36]# chmod +x /usr/local/mysql/bin/mysqld.sh
1. [root@localhost ~]# vim /usr/lib/systemd/system/mysqld.service
2.  配置文件如下
3. [Unit]
4. Description=MySQL Server
5. After=network.target
6. 
7. [Service]
8. User=mysql
9. Group=mysql
10.  
11. Type=forking
12. PIDFile=/usr/local/mysql/data/localhost.localdomain.pid
13. ExecStart=/usr/local/mysql/bin/mysqld.sh  start
14. ExecStop=/usr/local/mysql/bin/mysqld.sh  stop
15.  
16. [Install]
17. WantedBy=multi-user.target

注释:User=mysql //指定程序运行的用户账号 Group=mysql //指定程序运行的组账号

       这样就可以使用systemctl 工具来控制MySQL数据库服务了。mysql服务器默认通过TCP3306端口提供服务。通过编辑/etc/my.cnf配置文件中【mysqld】配置段的“port = 3306” 行,可以更改监听端口。

1.  systemctl start mysqld
2.  systemctl enable mysqld
3.  systemctl status mysqld
4.  netstat -anpt | grep mysqld

访问MySQL数据库

  • 登录到MySQL服务器

经过安装后的初始化过程,MySQL数据库的默认管理员用户名为root ,密码为空。

没密码登录如下-u选项指定用户

[root@localhost ~]# mysql -u root

有密码登录如下-p选项进行密码校验

[root@localhost ~]# mysql -u root -p
  • 执行MySQL操作语句

       登陆成功后提示符为“mysql>”的数据库操作环境,用户可以输入各种操作语句对数据库进行管理。

       每条MySQL操作语句以分号“;”表示结束,输入时可以不区分大小写,但习惯上将MySQL语句中的关键字部分大写。

执行STATUS;语句可以查看当前数据库服务的基本信息。

1. mysql> STATUS;
2.  --------------
3.  mysql  Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using  EditLine wrapper
4.  
5.  Connection id:      1
6.  Current database:   
7.  Current user:       root@localhost
8.  SSL:            Not in use
9.  Current pager:      stdout
10.  Using outfile:      ''
11.  Using delimiter:    ;
12.  Server version:     5.6.36 Source distribution
13.  Protocol version:   10
14.  Connection:     Localhost via UNIX socket
15.  Server characterset:    utf8
16.  Db     characterset:    utf8
17.  Client characterset:    utf8
18.  Conn.  characterset:    utf8
19.  UNIX socket:        /tmp/mysql.sock
20.  Uptime:         4 min 42 sec
21.  
22.  Threads: 1  Questions: 11  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.039
23.  --------------
  • 退出MySQL操作环境
1.  mysql> QUIT
2.  Bye
3.  或者
4.  mysql> exit
5.  Bye

使用MySQL数据库

查看数据库结构

MySQL是一套数据库管理系统,在每台MySQL服务器中,均支持运行多个库,每个库相当于一个容器,其中存放着许多表,每个表中的每行包含一条具体的数据关系信息,这些信息称为数据记录。

  • 查看当前服务器中有哪些库

SHOW DATABASES语句:用于查看当前mysql服务器中包含的库。

1. mysql> SHOW DATABASES;
2.  +--------------------+
3.  | Database           |
4.  +--------------------+
5.  | information_schema |
6.  | mysql              |
7.  | performance_schema |
8.  | test               |
9.  +--------------------+
10.  4 rows in set (0.00 sec)
  • 查看当前使用的库中有哪些表

SHOW TABLES语句:用于查看当前所在的库中包含的表。

1.  mysql> USE mysql;
2.  Database changed
3.  mysql> SHOW TABLES;
4.  +---------------------------+
5.  | Tables_in_mysql           |
6.  +---------------------------+
7.  | columns_priv              |
8.  | db                        |
9.  | event                     |
10.  ......
11.  | user                      |
12.  +---------------------------+
13.  28 rows in set (0.00 sec)

MySQL数据库的数据文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为“.frm",".myd"和“.myi”。

  • 查看表的结构

DESCRIBE语句:用于显示表的结构,即组成表的各字段(列)的信息。

1.  mysql> USE mysql;
2.  Database changed
3.  mysql> DESCRIBE user;
4.  +------------------------+-----------------------------------+------+-----+-----------------------+-------+
5.  | Field                  | Type                              | Null | Key | Default               | Extra |
6.  +------------------------+-----------------------------------+------+-----+-----------------------+-------+
7.  | Host                   | char(60)                          | NO   | PRI |                       |       |
8.  | User                   | char(16)                          | NO   | PRI |                       |       |
9.  | Password               | char(41)                          | NO   |     |                       |       |
10.  | Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
11.  ......//省略部分
12.  +------------------------+-----------------------------------+------+--
13.  43 rows in set (0.01 sec)

创建及删除库和表

  • 创建新的库
1. mysql> CREATE DATABASE 库名;
2.  Query OK, 1 row affected (0.00 sec)

刚创建的数据库是空的,其中不包含任何表,在/usr/local/mysql/data 目录会自动生成一个与新建的库名相同的文件夹。

  • 创建新的表
mysql> CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,...);
  • 删除一个数据表
1.  mysql> drop table 表名;
2.  Query OK, 0 rows affected (0.01 sec)
  • 删除一个数据库
1.  mysql> drop database 库名;
2.  Query OK, 0 rows affected (0.00 sec)

实例:创建一个aaa数据库,在aaa下创建一个bbb表,然后删除表后再删除库。

1.  mysql> create database aaa;
2.  Query OK, 1 row affected (0.00 sec)
3.  mysql> use aaa;
4.  Database changed
5.  mysql> create table bbb (bianhao int,xingming char(4),xingbie char(4));
6.  Query OK, 0 rows affected (0.01 sec)
7.  mysql> drop table bbb;
8.  Query OK, 0 rows affected (0.01 sec)
9.  ysql> drop database aaa;
10.  Query OK, 0 rows affected (0.00 sec)

管理表中的数据记录

  • 插入数据记录

三种方法:

1.  语法:INSERT INTO 表名(字段1,字段2,...) VALUES (字段1的值,字段2的值,...)
2.  全部插入:
3.  mysql> insert bbb values (1,'z3','nan');
4.  Query OK, 1 row affected (0.01 sec)
5.  指定插入:
6.  mysql> insert bbb(xingming) values ('lisi');
7.  Query OK, 1 row affected (0.00 sec)
8.  用null值插入:
9.  mysql> insert bbb values (null,'w5',null);
10.  Query OK, 1 row affected (0.01 sec)

结果如下:

1.  mysql> select * from bbb;
2.  +--------+----------+---------+
3.  | bianhao | xingming | xingbie |
4.  +--------+----------+---------+
5.  |      1 | z3       | nan     |
6.  |   NULL | lisi     | NULL    |
7.  |   NULL | w5       | NULL    |
8.  +--------+----------+---------+
9.  3 rows in set (0.00 sec)
  • 查询数据记录
1. 语法:SELECT * FROM 表名 WHERE 条件表达式;
2.  mysql> select * from bbb where xingming='lisi';
3.  +--------+----------+---------+
4.  | bianhao | xingming | xingbie |
5.  +--------+----------+---------+
6.  |   NULL | lisi     | NULL    |
7.  +--------+----------+---------+
8.  1 row in set (0.00 sec)
  • 修改数据记录
1.  语法:UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] WHERE 条件表达式;
2.  mysql> update bbb set xingbie='nan' where xingming='lisi';
3.  Query OK, 1 row affected (0.01 sec)
4.  Rows matched: 1  Changed: 1  Warnings: 0

update命令修改用户密码

1. mysql> update mysql.user set password=password('123123') where user='root';
2.  Query OK, 4 rows affected (0.00 sec)
3.  Rows matched: 4  Changed: 4  Warnings: 0
4.  
5.  mysql> flush privileges;        //刷新用户授权信息
6.  Query OK, 0 rows affected (0.00 sec)
  • 清除数据记录
1. 语法:DELETE FROM 表名 WHERE 条件表达式;
2.  
3.  mysql> delete from bbb where xingming='lisi';
4.  Query OK, 1 row affected (0.00 sec)

数据库用户授权

MySQL数据库的root用户账号拥有对所有库,表的全部权限,频繁使用root 账号会给数据库服务器带来一定的安全风险。在实际工作中通常会建立一些低权限的用户,只负责一部分库,表的管理和维护操作,甚至可以查询,修改,删除记录等各种操作进一步的细化限制,从而将数据库的风险降至最低。

  • 授予权限
1.  语法:GRANT 权限列表 ON 库名.表名 TO 用户名@来源地址 [IDENTIFIED BY '密码'];
2.  
3.  创建本地登录z3用户对数据库aaa查看权限,密码123456
4.  mysql> grant select on aaa.* to z3@localhost identified by '123456';
5.  Query OK, 0 rows affected (0.00 sec)

 注意事项如下:

  1. [权限列表]: 用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert , update”。使用“all”表示所有权限,可授权执行任何操作。
  2. [库名.表名]: 用于指定授权操作的库和表的名称,其中可以使用通配符“*”。例如,使用“auth.*”表示授权操作的对象为auth库中的所有表。
  3. [用户名@来源地址]:用于指定用户名称和允许访问的客户机地址,即谁能连接,能从哪里连接。来源地址可以是域名,IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如"%.aaa.com","192.168.1.%"等。
  4. [IDENTIFIED BY]:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略IDENTIFIED BY部分则用户的密码将为空。
  • 查看权限
1. 语法:SHOW GRANTS FOR 用户名@来源地址;
2.  
3.  mysql> show grants for z3@localhost;
4.  +-----------------------------------------------------------------------------------------------------------+
5.  | Grants for z3@localhost                                                                                   |
6.  +-----------------------------------------------------------------------------------------------------------+
7.  | GRANT USAGE ON *.* TO 'z3'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
8.  | GRANT SELECT ON `aaa`.* TO 'z3'@'localhost'                                                               |
9.  +-----------------------------------------------------------------------------------------------------------+
10.  2 rows in set (0.00 sec)
  • 撤销权限
1. 语法: REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
2.  
3.  mysql> revoke select on aaa.* from z3@localhost;
4.  Query OK, 0 rows affected (0.00 sec)


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
JavaScript Java 关系型数据库
志愿者招募|基于SSM+vue的志愿者招募网站系统的设计与实现(源码+数据库+文档)
志愿者招募|基于SSM+vue的志愿者招募网站系统的设计与实现(源码+数据库+文档)
29 16
|
2天前
|
JavaScript Java 关系型数据库
医院门诊互联电子病历|基于SSM+vue的医院门诊互联电子病历管理信息系统的设计与实现(源码+数据库+文档)
医院门诊互联电子病历|基于SSM+vue的医院门诊互联电子病历管理信息系统的设计与实现(源码+数据库+文档)
28 11
|
2天前
|
搜索推荐 算法 Java
电影推荐|基于SSM+vue的电影推荐系统的设计与实现(源码+数据库+文档)
电影推荐|基于SSM+vue的电影推荐系统的设计与实现(源码+数据库+文档)
24 3
|
2天前
|
JavaScript 小程序 Java
学习辅助|基于SSM+vue的学习辅助系统的设计与实现(源码+数据库+文档)
学习辅助|基于SSM+vue的学习辅助系统的设计与实现(源码+数据库+文档)
11 0
|
2天前
|
JavaScript Java 关系型数据库
零部件销售|基于SSM+vue的轻型卡车零部件销售平台系统的设计与实现(源码+数据库+文档)
零部件销售|基于SSM+vue的轻型卡车零部件销售平台系统的设计与实现(源码+数据库+文档)
9 0
|
2天前
|
JavaScript Java 关系型数据库
学习平台|基于Springboot+vue的学习平台系统的设计与实现(源码+数据库+文档)
学习平台|基于Springboot+vue的学习平台系统的设计与实现(源码+数据库+文档)
18 0
|
2天前
|
JavaScript Java 关系型数据库
平面设计课程在线学习|基于SSM+vue的平面设计课程在线学习平台系统的设计与实现(源码+数据库+文档)
平面设计课程在线学习|基于SSM+vue的平面设计课程在线学习平台系统的设计与实现(源码+数据库+文档)
8 0
|
2天前
|
JavaScript Java 关系型数据库
考研助手|基于SSM+vue的考研助手系统的设计与实现(源码+数据库+文档)
考研助手|基于SSM+vue的考研助手系统的设计与实现(源码+数据库+文档)
11 0
考研助手|基于SSM+vue的考研助手系统的设计与实现(源码+数据库+文档)
|
2天前
|
JavaScript Java 关系型数据库
邮票鉴赏|基于SSM+vue的邮票鉴赏系统的设计与实现(源码+数据库+文档)
邮票鉴赏|基于SSM+vue的邮票鉴赏系统的设计与实现(源码+数据库+文档)
10 0
|
2天前
|
JavaScript Java 关系型数据库
网络在线考试|基于SSM+vue的网络在线考试系统的设计与实现(源码+数据库+文档)
网络在线考试|基于SSM+vue的网络在线考试系统的设计与实现(源码+数据库+文档)
13 0