(一)数据库的基本概念
1.1、数据(Data)
- 描述事物的符号标记
- 包括数字,文字,图形,图像,声音,档案记录等
- 以“记录”形式按统一的格式进行存储
1.2、表
- 将不同的记录组织在一起
- 用来存储具体的数据
1.3、数据库
- 表的集合,是存储数据的仓库
- 以一定的组织方式存储的相互有管的数据集合
1.4、数据管理系统(DBMS)
- 是实现对数据路资源有效组织,管理和存取的系统软件
数据库的建立和维护功能,数据定义功能,数据操作功能,数据库的运行管理功能,通信功能
1.5、数据库系统
- 是一个人机系统,有硬件,OS,数据库,DBMS,应用软件和数据库用户组成
- 用户可以通过DBMS或应用程序操作数据库
二、当今主流数据库介绍
(一)SQL Server(微软公司产品)
——面向WIndows操作系统 ——简单、易用
(二)Oracle(甲骨文公司产品)
——面向所有主流平台 ——安全、完善、操作复杂
(三)DB2(IBM公司产品)
——面向所有主流平台 ——大型、安全、完善
(四)MySQL(甲骨文公司收购)
——免费、开源、体积小
三、数据库类型
(一)关系数据库
1、关系数据库系统是基于关系模型的数据库系统 2、关系模型的数据结构使用简单易懂的二维数据表 3、关系模型可用简单的”实体关系”(E-R)图来表示 4、E-R图中包含了实体 (数据对象) 、关系和属性三个要素 5、实体 ——也称为实例,对应现实世界中可区别于其他对象的 “事件” 或 “事物” ——如银行客户、银行账户等 6、属性 ——实体所具有的某一特性, 一个实体可以有多个属性 ——如"银行客户”实体集中的每个实体均具有姓名、住址、电话等属性 7、联系 ——实体集之间的对应关系称为联系,也称为关系 ——如银行客户和银行账户之间存在“储蓄”的关系 8、所有实体及实体之间联系的集合构成一个关系数据库 9、关系数据库应用 ——关系型数据库:Oracle,、MySQL、SQL Server、Sybase、Informix、access、DB2、 FoxPRO ——应用举例:12306用户信息系统、淘宝账号系统、联通手机号信息系统、银行用户账号系统、网站用户信息系统
(二)非关系数据库介绍
1、非关系数据库也被称作NoSQL (Not Only SQL) 2、存储数据不以关系模型为依据,不需要固定的表格式 3、非关系型数据库的优点 ——数据库可高并发读写 ——对海量数据高效率存储与访问 ——数据库具有高扩展性与高可用性 4、常用的非关系数据库:Redis、mongoDB等
四、MySQL数据库介绍
1、一款深受欢迎的开源关系型数据库; 2、Oracle旗下的产品 3、遵守GPL协议,可以免费使用与修改 4、特点 ——性能卓越、服务稳定 ——开源、无版权限制、成本低 ——多线程、多用户 ——基于C/S (客户端/服务器)架构 ——安全可靠
安装 mysql
[root@localhost ~]#yum install mariadb-server -y
[root@localhost ~]#systemctl start mariadb.service
[root@localhost ~]#mysql
[root@localhost ~]#mysql_secure_installation
[root@centos7 ~]#tee /etc/yum.repos.d/mysql.repo <<EOF
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
EOF
[root@centos7 ~]#yum -y install mysql-community-server
[root@localhost yum.repos.d]# systemctl start mysqld
[root@localhost yum.repos.d]# ss -ntap |grep 3306
登录
[root@localhost yum.repos.d]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@centos7 ~]#grep password /var/log/mysqld.log
[root@localhost yum.repos.d]# mysql -u root -p'+8saq%5+ljzG' #特殊符号用单引号引起来
#查看日志 可以找到密码
mysql> status #改密码
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user root@'localhost' identified by 'Ky15@2021'; #新密码
mysql> \h
#查看帮助
mysql> \h, help
mysql> \u,use
mysql> \s,status
mysql> \!,system
调用系统命令
mysql> system hostname
localhost.localdomain
#可以直接使用系统命令
#source 可以调用脚本
?
MySQL 命令
mysql [OPTIONS] [database]
命令格式
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e ? "SQL" 执行SQL命令
-V, --version 显示版本
-v ?--verbose 显示详细信息
--print-defaults 获取程序默认使用的配置
#查看mysql版本
[root@centos7 ~]#mysql -V
#默认空密码登录
mysql ?-uroot ?-p
mysql>use mysql #切换数据库
mysql> select database(); ? ? ? ? ? ? ? ? ? #查看当前数据库
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;
mysql>system clear #清屏
mysql> ^DBye ? ? ? #ctrl+d 退出
mysqladmin命令
mysqladmin [OPTIONS] command command...
#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -u用户 -p密码 ? ping
mysqladmin -uroot -p123123 ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos ? create testdb
#删除数据库testdb
mysqladmin -uroot -pcentos ? drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs
多实例
多实例介绍
多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录
MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307、3308等),同时运
行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。
多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现
可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且
可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量
独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗
大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以
具体的需求要根据自己的实际情况而定。
实验过程:
[root@localhost ~]# yum -y install mariadb-server #安装
[root@localhost ~]#mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid} #分别创建3306 3307 3308文件夹 且每个主文件夹包含括号中的子文件夹
[root@localhost ~]# chown -R mysql.mysql /mysql #更改属主 属组
[root@localhost ~]# tree -d /mysql/
[root@localhost ~]#mysql_install_db --user=mysql --datadir=/mysql/3306/data
[root@localhost ~]#mysql_install_db --user=mysql --datadir=/mysql/3307/data
[root@localhost ~]#mysql_install_db --user=mysql --datadir=/mysql/3308/data
#生成数据库文件重复三次
?
配置文件
分别为 3306 3307 3308 配置
[root@localhost ~]#vim /mysql/3306/etc/my.cnf
[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid
[root@localhost ~]#sed 's/3306/3307/' /mysql/3306/etc/my.cnf >
/mysql/3307/etc/my.cnf
[root@localhost ~]#sed 's/3306/3308/' /mysql/3306/etc/my.cnf >
/mysql/3308/etc/my.cnf
?准备启动脚本
[root@localhost ~]#vim /mysql/3306/bin/mysqld
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
else
printf "MySQL is running...\n"
exit
fi
}
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
[root@localhost ~]#chmod +x /mysql/3306/bin/mysqld
#重复上述过程,分别建立3307,3308的启动脚本
?启动 关闭服务
root@localhost ~]#/mysql/3306/bin/mysqld start
[root@localhost ~]#/mysql/3307/bin/mysqld start
[root@localhost ~]#/mysql/3308/bin/mysqld start
root@localhost ~]#/mysql/3306/bin/mysqld stop
[root@localhost ~]#/mysql/3307/bin/mysqld stop
[root@localhost ~]#/mysql/3308/bin/mysqld stop
查看端口 验证?
?
登录或退出MySQL
#登录
[root@localhost ~]#/mysql/3308/bin/mysqld start
[root@localhost ~]#mysql -h127.0.0.1 -P3308
#关闭数据库,需要手动输入root的密码
[root@localhost ~]#/mysql/3308/bin/mysqld stop
Stoping MySQL...
Enter password:
改密码
#修改密码
[root@localhost ~]#mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password
'Qc@123'
[root@localhost ~]#mysqladmin -uroot -S /mysql/3307/socket/mysql.sock password
'Qc@123''
[root@localhost ~]#mysqladmin -uroot -S /mysql/3308/socket/mysql.sock password
'Qc@123''
开机自启:
#开机启动
[root@localhost ~]#vim /etc/rc.d/rc.local
#在最后一行加下面内容
for i in {3306..3308};do /mysql/$i/bin/mysqld start;done
[root@localhost ~]#chmod +x /etc/rc.d/rc.local
|