天天看点

MYSQL学习第一天笔记

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大小

  1. 用户和权限管理

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 授权管理

  1. 创建一个管理员用户,可以通过10网段,管理数据库

    grant all on . to root@‘10.0.0.%’ identified by ‘123’ with grant option;

  2. 创建一个应用用户,可以通过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) 如何沟通开用户

  1. 是否有邮件批复
  2. 对哪些库和表进行操作
  3. 做什么操作
  4. 从什么地址来登录

    (2)开发人员找你要root用户密码?

  5. 走流程拒绝他
  6. 如果是金融类的公司

    (1)原则上是不允许任何非DBA人员持有或者申请root

    (2)如果有人私下索要密码,及时举报。

继续阅读