4.数据库产品
4.1 什么是数据?
4.2 DBMS 数据库管理系统
RDBMS :Oracle,MySql,PG,MSSQL
NOSQL : MongoDB,Redis,Es
NEWSQL (分布式):TiDB,Spanner,AliSQL(RDS+DRDS),OB,PolarDB
4.3 MySql 企业版本
5.6 : 5.6.34 5.6.36 5.6.38(2017913) 5.6.40
5.7 : 5.7.18,20(2017913) 24 ,(上课版本26)
8.0 : 8014,8015,8016
4.4 关于数据库版本面试
你们公司用的什么版本的MySql?
4.5 MySql 5.7.26 二进制版本安装
4.5.1 下载并上传软件至 /server/tools
mkdir -p /server/tools
cd /server/tools/
yum install -y lrzsz
rz -E
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz(https://downloads.mysql.com/archives/community/)
4.5.2解压软件
cd /server/tools
tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
mkdir /application
cd /server/tools
mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql
4.5.3 用户的创建处理原始环境
yum remove mariadb-libs-5.5.60-1.e17_5.x86_64 -y 先卸已有的数据库防止出错
rpm -qa|grep mariadb
useradd -s /sbin/nologin mysql 创建虚拟用户mysql
4.5.4 设置环境变量
vim /etc/profile
export PATH=/application/mysql/bin:$PATH
source /etc/profile
mysql -V 检查是否安装成功
出现版本号就说明成功
4.5.5 创建数据路径并授权
4.添加一块新磁盘模拟数据盘(10G)
2.格式化并挂载磁盘
mkfs.xfs /dev/sdb
mkdir /data
blkid 查看磁盘UUID
vim /etc/fstab
UUID=“xxxxxxxxxxxx” /data xfs defaults 0 0
mount -a
df -h
3.授权
chown -R mysql.mysql /application/*
chown -R mysql.mysql /data
4.5.6初始化数据(创建系统数据)
#5.6版本 初始化命令 /application/mysql/scripts/mysql_install_db
#5.7版本
mkdir /data/mysql/data -p
chown -R mysql.mysql /data
mysql --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
–initialize 参数
1.对于密码复杂度进行定制:12位 4种
2.密码过期时间:180天
3.给[email protected]用户设置临时密码
报错:
mysql:error while loading shared :libaio.so.1:cannot open shared object file:no such file or directory
解决:
yum install -y libaio-devel
再进行初始化:
mysql --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
–initialize-insecure 参数:
无限制无临时密码
rm -rf /data/mysql/data/* (把刚刚初始化产生的数据删除,重新初始化)
mysql --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
4.5.7配置文件的准备
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysqld]
socket=/tmp/mysql.sock
EOF
4.5.8启动数据库表
1.sys-v
cp /application/mysql/support-files/mysql.server /etc/inin.d/mysqld
service mysqld restart
2.systemd
注意:sys-v方式启动过的话,需要先提前关闭,才能以下方式登录
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WanteBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
5.如何分析处理Mysql数据库无法启动
5.1 without updating PID类似错误
查看日志:
在哪?
/data/mysql/data/主机名.err
[ERROR]上下文
查看不了日志的话直接执行/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf这样就会把日志打印在屏幕上
可能情况:
/etc/my.cnf 路径不对
/tmp/mysql.sock文件修改过或者删除过
数据目录权限不是mysql
参数改错了
6.管理员密码的设定([email protected])
mysqladmin -uroot -p password oldboy123
Enter password:(第一次设定密码的话直接回车,改密码的话输入上一次密码)
7.管理员用户密码忘记了?
-skip-grant-tables
7.1关闭数据库
/etc/init.d/mysqld stop #调过授权表
–skip-networking & #调过远程登录
7.2启动数据库到维护模式
mysqld_safe --skip-grant-tables --skip-networking &
7.3 登录并修改密码
mysql> grant all on . to root@‘localhost’ identified by ‘1’;(alter user root@‘localhost’ identified by ‘1’;)修改密码为1
ERROR 1290(HY000):The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;手工刷新授权表
mysql> grant all on . to root@‘localhost’ identified by ‘1’;
7.4关闭数据库,正常启动验证
MySQL体系结构与管理
1.MySQL C/S结构介绍 ***
两种连接方式:
TCP/IP:mysql -uroot -poldboy123 -h 10.0.0.51 -p3306
Socket: mysql -uroot -poldboy123 -s /tmp/mysql.sock
2.MySQL实例的构成 ***
公司:老板+经理+员工+办公区
实例:mysqld + master thread +干活的thread +预分配的内存
3.MySQL中的mysql服务器进程结构
3.1 SQL语句引入
结构化的查询语言
DQL
DDL
DML
DCL
mysql> select user,host from mysql.user;
3.2 连接层
(1) 提供连接协议
Socket
TCP/IP
(2) 验证用户名([email protected])密码合法性,进行匹配专门的授权表
(3) 派生一个专用连接线程(接收SQL,返回结果)
(4) 将语句交给下一层
3.3 sql层
(1) 接收语句
(2) 语法检查和SQL_MODE
(3) 语义检查与权限检查
(4) 解析语句,生成多种执行计划树
(5) 通过优化算法,(执行代价cpu,IO,Mem)
(6) 优化器会选择觉得最优的 执行方法
(7) 语句执行器,真正运行SQL语句
(8) 提供了查询缓存(默认不开启)
3.4存储引擎层
(1) 根据SQL的执行结果,去磁盘上找到相应数据
(2) 找到磁盘上16进制的数据
(3) 再次返回到SQL层,结构化成二维表的方式
(4) 再由连接层线程,最终展现出来
3.5 MySQL逻辑存储结构
库 ----》linux目录
creat database wordpress charset utf8mb4; ----》mkdir /wordpress
show database; ----》ls /
use wordpress; ----》cd /wordpress
表 ----》linux的文件
列(字段) 无
列属性 无
数据行(记录) ----》linux数据行
表属性 ----》linux文件属性
3.6 MySQL物理存储结构
库:使用FS上的目录来表示
表:
MyISAM(相当于linux上ext2道理一样)
user.frm:存储的表结构(列,列属性)
user.MYD:存储的数据记录
user.MYI:存储索引
InnoDB(xfs)
time_zone.frm: 存储的表结构(列,列属性)
time_zone.ibd: 存储的数据记录和索引
ibdatal : 数据字典信息
3.7 innodb 段 区 页
oldboy.ibd
数据行存储:每次默认64个连续的page,也就是1M,我们把它称之为一个区,MYSQL的表根据存储需求,会由多个区构成,我们又把一个表称之为一个区段。
一般情况下(非分区表)
一个表就是一个段
一个段由多个区构成
一个区由64个连续的页(16k),1M大小
- 用户和权限管理
4.1 作用
登录MySQL
管理MySQL
4.2 用户的定义
用户名@‘白名单’
wordpress@’%’
wordpress@‘localhost’
wordpress@‘10.0.0.%’
wordpress@‘10.0.0.0/255.255.254.0’
wordpress@‘10.0.%’
4.3 用户的操作
4.3.1 建用户
mysql> creat user oldboy@‘10.0.0.%’ identified by ‘123’;
说明:8.0以前可以在授权的时候如果没用户自动创建用户
mysql> grant all on . to oldgou@‘10.0.0.%’ identified by ‘123’;
4.3.2 查询用户
mysql> select user,host from mysql.user;
4.3.3 修改用户密码
mysql> alter user oldgou@‘10.0.0.%’ identified by ‘123456’;
4.3.4 删除用户
mysql> drop user oldgou@‘10.0.0.%’;
4.4 权限管理
ALL
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP…
with grant option
4.2.2 授权命令
grant all on . to oldgou@‘10.0.0.@’ identified by ‘123’;
grant 权限 on 作用目标 to 用户 identified by 密码 with grant option;
grant SELECT,INSERT,UPDATE,DELETE,CREATE on
作用目标:(哪个库的哪张表)
.
wordpress .*
wordpress.t1
4.4.3 授权管理
-
创建一个管理员用户,可以通过10网段,管理数据库
grant all on . to root@‘10.0.0.%’ identified by ‘123’ with grant option;
-
创建一个应用用户,可以通过10网段,管理wordpress库下的所有表进行SELECT,INSERT,UPDATE,DELETE
grant SELECT,INSERT,UPDATE,CREATE on wordpress.* to wordpress@‘10.0.0.%’ identified by ‘123’;
4.4.4 回收权限
revoke
show grants for wordpress@‘10.0.0.%’;展现出wordpress的权限
mysql> revoke delete on wordpress.* from ‘[email protected].%’;
mysql> show grants for wordpress@‘10.0.0.%’;
4.4.5 关于生产中开用户
(1) 如何沟通开用户
- 是否有邮件批复
- 对哪些库和表进行操作
- 做什么操作
-
从什么地址来登录
(2)开发人员找你要root用户密码?
- 走流程拒绝他
-
如果是金融类的公司
(1)原则上是不允许任何非DBA人员持有或者申请root
(2)如果有人私下索要密码,及时举报。