1.MySQL数据库初体验
1.1数据库简介
1.1.1使用数据库的必要性
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。
数据库特点:
a.可以结构化存储大量地数据信息,方便用户进行有效的检索
b.可以有效地保持数据信息的一致性、完整性,降低数据冗余
c.可以满足应用的共享和安全方面的要求
1.1.2数据库的基本概念
1.数据
描述事物的符号记录称为数据。数字、文字、图形、图像、声音、档案记录等都是数据
在数据库中,数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。相同格式和类型的数据统一存放在一起。
2.数据库和数据库表
不同的记录组织在一起,就形成了数据库(Database.DB)的“表”(Table)。也可以说,表是用来存储数据的。数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合。
例如,关系数据库的表由记录组成,记录由字段组成,字段由字符或数字组成。它可以供各种用户共享,具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。通常,数据库并不是简单地存储这些数据,还要表示它们之间的关系
3.数据库管理系统和数据库系统
数据库管理系统(DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。主要功能如下:
数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的转储与恢复、数据库的重组与性能监视等功能
数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出
数据操纵功能:包括数据查询统计和数据更新两个方面
数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控制、数据库内部维护等功能
通信功能:DBMS与其他软件系统之间的通信,如Access能与其他Office组件进行数据交换
数据库系统(DBS)是一个人机系统,一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过DBMS操作数据库,也可以通过应用程序操作数据库
应用程序是利用DBMS为解决某个具体的管理或数据处理的任务而编制的一系列命令的有序集合。如果应用程序比较完善,能够提供有好的人机界面,并编译成可执行文件发行,使得普通用户不需要具备计算机的专业知识,在较短时间就学会使用,那么就成为数据库应用软件。
数据库管理员(DBA)负责数据库的更新和备份、数据库系统的维护、用户管理等工作,保证数据库系统的正常运行。DBA一般由业务水平较高、资历较深的人员担任
1.1.3主流数据库介绍
(1)关系数据库
1.SQL Server
2.Oracle
3.DB2
4.MySQL
(2)非关系数据库
也称为NoSQL,存储数据不以关系模型为依据,不需要固定的表格式。其优点如下:
a.数据库高并发读写的需求
b.对海量数据高效率存储与访问
c.数据库的高扩展性与高可用性的需求
1.1.4关系数据库的基本概念
1.关系数据库的基本结构
关系数据库使用的存储结构是多个二维表格,即反映事物及联系的数据描述是以平面表格形式体现的
在每个二维表格中,每一行称为一条记录,用来描述一个对象信息;每一列称为一个字段,用来描述对象的一个属性。数据表与数据库之间存在相应的关联,这些关联用来查询相关的数据
关系数据库是由数据表之间的关联组成的。其中:
a.数据表通常是一个由行和列组成的二维表,每一个数据表分别说明数据库中某一特定的方面或部分的对象及其属性。
b.数据表中的行通常叫做记录或者元组,它代表众多具有相同属性的对象中的a
c.数据表中的列通常叫做字段或者属性,它代表相应数据库中存储对象的共有属性。
2.主键与外键
(1)主键
数据表中的每行记录都必须是唯一的,而不允许出现完全相同的记录,通过定义主键(主关键字,PrimaryKey)可以保证记录(实体)的唯一性。
键,即关键字,它是关系模型中一个非常重要的元素。
主键唯一标识表中的行数据,一个主键值对应一行数据。主键由一个或多个字段组成,其值具有唯一性,不允许取空值(NULL)。一个表只能有一个主键。
如果一个属性集能唯一地标识表的一行而又不含有多余的属性,那么这个属性集称为候选键。表中可以有多个候选键,但是只能有一个候选键可以选作表的主键,所有其他候选键称为备用键。例如,在图1.7所示的“学生信息统计表”中,(编号)、{身份证号}或(姓名,专业编号}都可以说是候选键,可以将{编号}定义为主键。
(2)外键
一个关系数据库通常包含多个表,通过外键(ForeignKey)可以使这些表关
联起来。
外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就称为第二个表的外键。
3.数据完整性规则
(1)实体完整性规则
实体完整性规则要求关系中的元组在主键的属性上不能有空值。如果出现空
值,那么主键值就起不到唯一标识元组的作用。例如,在图1.9所示的“学生信息表”中,每个学生都有一个编号,用来唯一标识每个学生的信息记录,这个编号往往被设为该表的主键,以方便其他数据
库表的关联应用。依照实体完整性规则,“编号”字段不允许为空。
(2)域完整性规则
域完整性也称列完整性,指定一个数据集对某一个列是否有效或确定是否允许空值
(3)引用完整性规则
如果两个表之间相互关联,那么引用完整性规则要求不允许引来不存在的元组
(4)用户定义的完整性规则
用户定义的完整性规则是针对某一具体数据的约束条件,由应用环境决定。它反映某一具体应用所涉及的数据必须满足的语义要求。系统提供定义和检验这类完整性的机制,以便用统一的系统方法进行处理,不再由应用程序承担这项工作
1.2MySQL服务基础
1.编译安装的准备工作
(1)如果OpenEulser已安装mariadb数据库,必须先将其卸载,然后再开始进行源码安装。并关闭SELinux 和防火墙
命令:rpm -q mariadb
dnf remove mariadb
dnf install -y gcc gcc-c++ make cmake autoconf libtool bison re2c openssl-devel libxml2-devel zlib-devel curl-devel libpng-devel libjpeg-turbo-devel freetype-devel libicu-devel oniguruma-devel sqlite-devel libxslt-devel libzip-devel pcre-devel apr-devel apr-util-devel ncurses-devel wget libtirpc-devel rpcgen
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
(2)MySQL8.0源码安装需要cmake编译安装
命令:tar zxf cmake-3.16.2.tar.gz
cd cmake-3.16.2
./configure
gmake && gmake install
(3)Boost库下载
命令:tar -zxf boost_1_77_0.tar.gz
mv boost_1_77_0 /usr/local/boost
2.源码编译及安装
(1)创建运行用户
为了加强数据库服务的权限控制,建议使用专门的运行用户,如mysql用户。此用户不需要直接登录到系统,可以不创建宿主文件夹
命令:groupadd msyql
useradd -M -s /sbin/nologin mysql -g mysql
(2)解包
将下载的MySQL源码包解压,释放到/usr/src目录下,并切换到展开后的源码目录
命令:tar zxf mysql-8.0.36.tar.gz -C /usr/src
cd /usr/src/mysql-8.0.36
(3)配置
在内容丰富,结构庞大的企业网站平台中,可能会用到多种字符集的网页,相应地数据库系统也应该支持不同地字符集编码。配置过程中,可以将默认使用的字符集设置为utf8,并添加其他字符集支持
命令:mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/sur/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_SSL=system -DENABLED_LOCAL_INFILE=ON -DWITH_BOOST=/usr/local/boost -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
上述配置命令中,关键选项含义如下:
..:指定上层源码记录
-DCMAKE_INSTALL_PREFIX:指定将mysql程序安装到哪个目录下
-DSYSCONFDIR:设置mysql数据库配置文件存储位置
-DMYSQL_DATADIR:设置mysql数据库的数据文件存储位置
-DWITH_BOOST:指定boost库的位置,mysql8.0编译安装时必须添加这个参数
-DWITH_SSL:使用系统提供的SSL/TLS库来支持加密连接
-DENABLED_LOCAL_INFILE:允许从客户端本地文件加载数据
(4)编译安装
命令:make -j$(nproc) $(nproc)用于获取系统上可用的处理器核心数量,并行编译,提高速度
make install
3.安装后的其他调整
(1)建立配置文件
命令:vi /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0 (绑定监听地址0.0.0.0)
skip-name-resolve
port = 3306 (设置3306端口)
basedir=/usr/local/mysql (设置mysql的安装目录)
datadir=/usr/local/mysql/data (设置mysql数据库的数据存放目录)
max_connections=2048 (允许最大连接数)
character-set-server=utf8 (服务端使用的字符集默认为utf8)
default-storage-engine=INNODB (创建新表时使用的默认存储引擎)
max_allowed_packet=16M
(2)初始化数据库
执行初始化命令(无密码模式)
命令:/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
(3)设置环境变量
为了方便在任何目录下使用mysql命令,需要在/etc/profile设置环境变量
命令:echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile (立即生效)
4.添加系统服务
若希望添加mysqld系统服务,以便通过systemctl进行管理,可以直接使用源码包中提供的服务脚本。找到support-files 文件夹下的mysql.server脚本文件,将其复制到/etc/rc.d/init.d目录下,并改名为mysqld,然后再设置执行权限
将MySQL添加为systemd标准服务,之后方便使用“systemctl”命令管理
命令:vi /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/ec.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable mysqld
5.MySQL的二进制安装
MySQL的安装方式除了常规的源码编译安装之外,最常用的还包括YUM方式安装和二进制方式安装。二进制安装方式中,包括rpm版本以及glibc版本。rpm版本就是在特定Linux版本下编译的,如果你的Linux版本匹配,就可以安装。如下载Cent0s7系统所对应编译好的rpm包安装即可。另外一种二进制安装包是基于特定的glibc版本编译的,这里主要讲解基于glibc方式安装MySQL.
1.基础环境准备
如果采用openEuler minimal安装的系统,在使用前需要安装一些基础软件包工具
dnf -y install gcc vim wget net-tools lrzsz tar
安装MySQL依赖的软件包
dnf install -y libaio numactl openssl ncurses-compat-libs
创建运行MySQL程序的·用户
useradd -M -s /sbin/nologin mysql
关闭SELinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl 0
systemctl disable firewalld
systemctl stop firewalld
2.二进制安装
首先需要下载该软件包或者提前上传,然后再解压进行配置
tar xf msyql-8.0.36-linux-glibc2.28-x86_64.tar.xz
mv msyql-8.0.36-linux-glibc2.28-x86_64.tar.xz /usr/local/mysql
mkdir /usr/local/mysql/data
chown -R msyql:mysql /usr/local/mysql
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
此次初始化没有采用无密码模式,因此会生成初始随机密码,需要保存,用以后续登录mysql数据库使用
3.设定配置文件
vi /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0 (绑定监听地址0.0.0.0)
skip-name-resolve
port = 3306 (设置3306端口)
basedir=/usr/local/mysql (设置mysql的安装目录)
datadir=/usr/local/mysql/data (设置mysql数据库的数据存放目录)
max_connections=2048 (允许最大连接数)
character-set-server=utf8 (服务端使用的字符集默认为utf8)
default-storage-engine=INNODB (创建新表时使用的默认存储引擎)
max_allowed_packet=16M
将MySQL的可执行文件写入环境变量中
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile
4.配置systemctl方式启动
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/ec.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
6.访问数据库
安装后的初始化过程,mysql数据库的默认管理员用户名为“root”,密码为给定的随机密码。以root用户登录本机mysql数据库
命令:mysql -u root -p
msyql>alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd123';
(单引号内为新密码)