💖作者:小树苗渴望变成参天大树🎈
🎉作者宣言:认真写好每一篇博客💤
🎊作者gitee:gitee✨
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!
文章目录
- 前言
- 一、MySQL 在 Centos 7环境安装
- 二、数据库基础
- 1.1 什么是数据库
- 1.2 主流数据库
- 1.3 基本使用
- 1.3.1 连接服务器
- 1.3.2 服务器,数据库,表关系
- 1.3.3 使用案例
- 1.4 MySQL架构
- 1.5 SQL分类
- 1.6 存储引擎
- 1.6.1 存储引擎
- 1.6.2 查看存储引擎
- 1.7其他知识的补充
- 三、总结
前言
今天大家跟着博主来学习数据库,数据库这个名词相信大家也不陌生,但是具体是什么大家可能还不是特别的清楚,接下来这篇就是带大家认识数据库,有了前期基础后面学习起来操作也就不是问题,因为他的语法很简单,操作也就哪些,比语言好学,最重要的是多练习才可以,话不多说,接下来看正文。
本章重点:
1.在Linux上安装MySQL
2.介绍数据库的概念
一、MySQL 在 Centos 7环境安装
如果大家一直是按照博主的博主安装的Linux环境,那么就是centos7的,如果是其他的系统或者虚拟机就需要大家自己上网去找找对应版本的安装方式了。
说明:
• 安装与卸载中,⽤⼾全部切换成为root,⼀旦 安装,普通⽤⼾能使⽤的
• 初期练习,mysql不进⾏⽤⼾管理,全部使⽤root进⾏,尽快适应mysql语句,后⾯学了⽤⼾管理,在考虑新建普通⽤⼾
- 卸载不要的环境
[whb@VM-0-3-centos ~]$ ps ajx |grep mariadb # 先检查是否有mariadb存在
13134 14844 14843 13134 pts/0 14843 S+ 1005 0:00 grep --color=auto
mariadb
19010 19187 19010 19010 ? -1 Sl 27 16:55 /usr/libexec/mysqld --
basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --
log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid
--socket=/var/lib/mysql/mysql.sock
[whb@VM-0-3-centos ~]$ systemctl stop mariadb.service # 停⽌mariadb 服务
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
[whb@VM-0-3-centos ~]$ ps axj |grep mariadb # 停⽌完成
13134 14976 14975 13134 pts/0 14975 S+ 1005 0:00 grep --color=auto
mariadb
- 检查系统安装包
[whb@VM-0-3-centos ~]$ rpm -qa | grep mariadb
or
[whb@VM-0-3-centos ~]$ rpm -qa | grep mysql
...
...
...
# 下⾯是打印出来的mysql的样例,
[root@bite-alicloud mysql]# rpm -qa | grep mysql
mysql-community-common-5.7.41-1.el7.x86_64
mysql-community-server-5.7.41-1.el7.x86_64
mysql57-community-release-el7-11.noarch
mysql-community-client-5.7.41-1.el7.x86_64
mysql-community-libs-5.7.41-1.el7.x86_64
- 卸载这些默认安装包
#卸载显⽰出来的mariadb/mysql安装包
[whb@VM-0-3-centos ~]$ sudo yum remove mariadb # 还是试着将上⾯的包都⼀个⼀个卸载吧
备份/etc/my.cnf,备份/var/lib/mysql数据
- 获取mysql官⽅yum源
#1. 获取mysql官⽅yum源 http://repo.mysql.com/
# ⼀定要看下⾯的⽂字!如果后⾯⾃⼰安装不成功,就看看这个
# 注意:最好安装和⾃⼰系统⼀致的mysql版本,否则可能会存在软件兼容性问题
# 查看⾃⼰的系统版本
# [root@VM-0-2-centos ~]# cat /etc/redhat-release
# CentOS Linux release 7.8.2003 (Core)
# 可以进⼊ http://repo.mysql.com/, 找⼀下和⾃⼰版本⼀致的资源
# 下载到你的本地,然后上传到你的Linux服务器
- 安装mysql yum 源,对⽐前后yum源
# 安装前
[whb@VM-0-3-centos 9.9]$ ls
mysql57-community-release-el7-10.noarch.rpm
查看你本地的yum源 [我的和你的肯定不同,但是没有mysql相关的yum源]
[whb@VM-0-3-centos 9.9]$ ls /etc/yum.repos.d/ -al
total 88
drwxr-xr-x. 2 root root 4096 Apr 9 15:43 .
drwxr-xr-x. 106 root root 12288 Apr 12 10:50 ..
-rw-r--r-- 1 root root 2523 Dec 26 19:31 Centos-Base.repo
-rw-r--r-- 1 root root 614 Nov 10 18:42 CentOS-Base.repo_bak
-rw-r--r-- 1 root root 2523 Jun 16 2018 CentOS-Base.repo.bak
-rw-r--r-- 1 root root 1309 Apr 8 2020 CentOS-CR.repo
-rw-r--r-- 1 root root 649 Apr 8 2020 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 230 Nov 10 18:42 CentOS-Epel.repo
-rw-r--r-- 1 root root 314 Apr 8 2020 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 Apr 8 2020 CentOS-Media.repo
-rw-r--r-- 1 root root 998 Dec 11 2018 CentOS-SCLo-scl.repo
-rw-r--r-- 1 root root 971 Oct 29 2018 CentOS-SCLo-scl-rh.repo
-rw-r--r-- 1 root root 1331 Apr 8 2020 CentOS-Sources.repo
-rw-r--r-- 1 root root 7577 Apr 8 2020 CentOS-Vault.repo
-rw-r--r-- 1 root root 616 Apr 8 2020 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 1919 Apr 8 23:57 docker-ce.repo
-rw-r--r-- 1 root root 1050 Nov 1 04:33 epel.repo
-rw-r--r-- 1 root root 1149 Nov 1 04:33 epel-testing.repo
-rw-r--r-- 1 root root 173 Dec 9 16:08 google-chrome.repo
##安装中
[whb@VM-0-3-centos 9.9]$ rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1
Signature, key ID 5072e1f5: NOKEY
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission
denied)
# 如果上⾯出错了
[whb@VM-0-3-centos 9.9]$ sudo rpm -Uvh mysql57-community-release-el7-
10.noarch.rpm
[sudo] password for whb:
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1
Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql57-community-release-el7-10 ################################# [100%]
# 安装后
[whb@VM-0-3-centos 9.9]$ ls /etc/yum.repos.d/ -al
total 96
drwxr-xr-x. 2 root root 4096 Apr 12 11:04 .
drwxr-xr-x. 106 root root 12288 Apr 12 10:50 ..
-rw-r--r-- 1 root root 2523 Dec 26 19:31 Centos-Base.repo
-rw-r--r-- 1 root root 614 Nov 10 18:42 CentOS-Base.repo_bak
-rw-r--r-- 1 root root 2523 Jun 16 2018 CentOS-Base.repo.bak
-rw-r--r-- 1 root root 1309 Apr 8 2020 CentOS-CR.repo
-rw-r--r-- 1 root root 649 Apr 8 2020 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 230 Nov 10 18:42 CentOS-Epel.repo
-rw-r--r-- 1 root root 314 Apr 8 2020 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 Apr 8 2020 CentOS-Media.repo
-rw-r--r-- 1 root root 998 Dec 11 2018 CentOS-SCLo-scl.repo
-rw-r--r-- 1 root root 971 Oct 29 2018 CentOS-SCLo-scl-rh.repo
-rw-r--r-- 1 root root 1331 Apr 8 2020 CentOS-Sources.repo
-rw-r--r-- 1 root root 7577 Apr 8 2020 CentOS-Vault.repo
-rw-r--r-- 1 root root 616 Apr 8 2020 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 1919 Apr 8 23:57 docker-ce.repo
-rw-r--r-- 1 root root 1050 Nov 1 04:33 epel.repo
-rw-r--r-- 1 root root 1149 Nov 1 04:33 epel-testing.repo
-rw-r--r-- 1 root root 173 Dec 9 16:08 google-chrome.repo
-rw-r--r-- 1 root root 1627 Apr 5 2017 mysql-community.repo #安装了
mysql yum源
-rw-r--r-- 1 root root 1663 Apr 5 2017 mysql-community-source.repo
- 看看能不能正常⼯作
#在看看能不能正常⼯作
[whb@VM-0-3-centos 9.9]$ yum list |grep mysql
Repository epel is listed more than once in the configuration
mysql57-community-release.noarch el7-10 installed
akonadi-mysql.x86_64 1.9.2-4.el7 base
anope-mysql.x86_64 2.0.9-3.el7 epel
apr-util-mysql.x86_64 1.5.2-6.el7 base
calligra-kexi-driver-mysql.x86_64 2.9.10-2.el7 epel
collectd-mysql.x86_64 5.8.1-1.el7 epel
dmlite-plugins-mysql.x86_64 1.14.2-1.el7 epel
dovecot-mysql.x86_64 1:2.2.36-8.el7 base
- 安装mysql服务
[whb@VM-0-3-centos 9.9]$ sudo yum install -y mysql-community-server
[sudo] password for whb:
Loaded plugins: aliases, auto-update-debuginfo, fastestmirror, protectbase
Repository epel is listed more than once in the configuration
...
Installing : mysql-community-common-5.7.33-1.el7.x86_64 #公共模块
Installing : mysql-community-libs-5.7.33-1.el7.x86_64 #库
Installing : mysql-community-client-5.7.33-1.el7.x86_64 #客⼾端
Installing : mysql-community-server-5.7.33-1.el7.x86_64 #服务器
... #安装了服务和客⼾端
# 如果报错了,看第16步《常⻅问题》
- 查看配置⽂件和数据存储位置
[whb@VM-0-3-centos 9.9]$ ls /etc/my.cnf
/etc/my.cnf
[whb@VM-0-3-centos 9.9]$ sudo ls /var/lib/mysql
....
- 启动服务
[whb@VM-0-3-centos 9.9]$ systemctl start mysqld.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
- 查看启动服务
[whb@VM-0-3-centos 9.9]$ ps axj |grep mysqld
1 23183 23182 23182 ? -1 Sl 27 0:00 /usr/sbin/mysqld --
daemonize --pid-file=/var/run/mysqld/mysqld.pid
13134 23243 23242 13134 pts/0 23242 S+ 1005 0:00 grep --color=auto
mysqld
- 登陆⽅法⼀【不⾏就下⼀个】
获取临时root密码
[whb@VM-0-3-centos 9.9]$ sudo grep 'temporary password' /var/log/mysqld.log
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for
root@localhost: yLMalT:v+5l*
#使⽤临时密码登录
[whb@VM-0-3-centos 9.9]$ mysql -uroot -p
Enter password:
#判断修改密码时候新密码是否符合当前的策略,不满⾜报错,不让修改,关闭它
#安全强度,默认为中,即1,要求必须包含 数字、符号、⼤⼩写字⺟,⻓度⾄少为8位
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
#密码最⼩⻓度
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#修改本地登录密码,暂不授权远程登录
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer@wu.888';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
#如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码
- 登陆⽅法⼆【不⾏就下⼀个】
# 如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码
# 试着直接client登陆⼀下
- 登陆⽅式三【应该⾏了吧】
[root@bite-alicloud mysql]# vim /etc/my.cnf # 打开mysql配置⽂件
在[mysqld]最后⼀栏配置(不知道是什么,就放在配置⽂件最后) 加⼊: skip-grant-tables 选项,
并保存退出
[root@bite-alicloud mysql]# systemctl restart mysqld # 重启mysql服务
# 登陆成功
[root@bite-alicloud mysql]# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.41 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>
- 设置开机启动[可以不设]
#开启开机⾃启动
systemctl enable mysqld
systemctl daemon-reload
- 配置my.cnf
#配置⼀下my.conf,主要是数据库客⼾端和服务器的编码格式
[whb@VM-0-3-centos 9.9]$ cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysql]
#default-character-set=utf8 ,暂不设置,mysql有bug,汉字不回显
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
default-storage-engine=innodb
# 配置完毕,重启mysql即可
- 常⻅问题:
mysql 已经配置了客⼾端服务器utf8编码,但是⽆法输⼊中⽂
确保您在终端命令⾏中可以输⼊中⽂
[whb@VM-0-3-centos ~]$ env |grep LANG
LANG=en_US.utf8
安装遇到秘钥过期的问题:
Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
解决⽅案:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
二、数据库基础
1.1 什么是数据库
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
•文件的安全性问题
•文件不利于数据查询和管理
•文件不利于存储海量数据
•文件在程序中控制不方便
我们的数据库他相对于传统的文件多了可以自动对数据进行管理,不需要我们自己去操作管理了,但是数据库与的本质还是文件,只是设计数据库的人在文件上面做了封装让我们可以通过它设计的语法语言去对文件进行操作,上面我们实现了安装MySQL,我们来到下面目录cd /var/lib/mysql
,然后登录MySQL,使用createdatabase db1;
我们看到了创建数据库就是在对应的目录下创建新的目录,在Linux中数据库的本质还是文件,上面的语言操作大家先不用管后面会介绍,刚才进入的目录文件,就是我们数据库的工作目录,大家安装好,直接cd进去就行了。
数据库存储介质:
磁盘
内存
所以数据库的存储介质还是和文件的类似,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
1.2 主流数据库
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
**MySQL:**世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电
商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的
低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中
1.3 基本使用
1.3.1 连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -u root -p
今天我们在自己的主机上登录,所以-h和-P可以不用写,默认连接本地的,目前我们没有设置密码,弹出来输入密码直接回车就进入MySQL了。
1.3.2 服务器,数据库,表关系
•所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
•为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
•数据库服务器、数据库和表的关系如下:
类似于一种树状结构。
1.3.3 使用案例
博主先给大家看看在MySQL是怎么使用的,具体语法后面会介绍。
创建数据库(相当于创建目录)
create database helloworld;
使用数据库(相当于进入这个目录)
use helloworld;
创建数据库表(相当于在此目录中创建关于表的文件)
create table student(
id int,
name varchar(32),
gender varchar(2)
);
表中插入数据(相当于往文件里面写内容)
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
查询表中的数据(相当于cat这个表文件里面的内容)
select * from student;
我们看到数据库的一系列操作都可以和我们之前学的文件对应起来,我们进入数据库目录,有一个默认的这个我们后面会介绍,这节就是给大家看看我们的数据应该怎么去使用,而且有什么样的效果,不是让大家现在就去使用。
1.4 MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
1.5 SQL分类
DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
这个大家一定要知道,因为后面我们就是按照这个顺序去学习数据库的语法的,大家理解这个对于后面的理解学习有帮助
1.6 存储引擎
1.6.1 存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
1.6.2 查看存储引擎
show engines;
这个对于我们学习数据库不是特别重要,但是我们要知道这玩意。
1.7其他知识的补充
相信大家知道数据库应该都听过mysql和mysqld,但是具体是什么却区分不了。大家有没有想过mysql为什么可以给我们管理数据,而且上线的项目都需要数据库去存储数据,原因是我们的数据库是一套给我们提供数据存取服务的网络程序,本质也是一个程序,因为博主还没有讲解网络相关的知识点,所以这里面博主就简单介绍一下。大家想想我们的抖音为什么我们可以刷视频,这些视频数据就一直在我们的手机里面码??答案肯定不是的,他是抖音的服务端通过网络给我们手机的客户端发数据,我们刷抖音才嫩恶搞看到视频,不管是客户端还是服务端,本质都是程序,运行就需要形成进程,通过网络将我们不同主机的进程进行通信,博主之前讲解的进程间通信时同一台主机上通信,由于灭有网络的知识体系,所以我们先理解刷抖音时怎么获取这些视频资源的,所以我们的mysql它是数据库服务的客户端,mysqld它是数据库服务的服务器端,mysql本质就是基于c/s模式的一种网络服务
上面的内容大家细节不用理解,通过简单的例子让大家理解mysql和mysqld的区别还是够的。
三、总结
这篇让大家先认识一下数据库,知道我们为什么要学习数据库,尤其是他的本质是什么,他其实就是文件,大家不用太担心,其次大家要把环境安装好,下一篇博主就重点来带大家进行操作了,博主会通过数据库操作和对应的文件会产生什么样的效果,对比着给大家演示,希望大家可以过来学习。