以下内容是学习 MySQL数据库应用 过程中总结的一些内容提要,供以后自己复现使用。
-
首先应该具备得职业素养
- 人品
责任-----权利**
- 严谨
数据库修改\删除类的命令时 再三考虑,而且要有理论或者实践的支撑
- 细心
把最简单的事情做的最漂亮,最专业。
- 心态
1. 熟悉操作系统(精通)
Linux centos6/7/8
2. 熟悉云架构
Docker
3. 熟悉业务
-
产品的功能
-
用户行为:
针对不同的业务去设计对应业务的架构等
4. 熟悉行业
-
熟悉行业发展趋势
查看全球范围内数据库的排名 -
参加数据库大会.
-
跟行业牛人交流.
活动行APP 等可以参加
-
版本
-
数据库产品类型
5. 运维DBA工作内容
-
初级DBA:
安装配置,基本使用,基本故障处理 -
中级DBA:
体系结构、备份策略涉及,故障恢复,基础高可用的运维(搭建、监控、故障处理、架构演变)、基础优化(索引、执行计划、慢日志) -
高级DBA:
高可用架构(设计、实施、运维)、高性能架构(读写分离,分库、分表,分布式)、整体数据库优化(基于业务的SQL优化)
文章目录
第一章 数据库产品介绍
1.什么是数据?
数据:文字、图片、视频.
计算机:二进制、16进制的机器语言
基于数据的重要性和复杂性的不同,我们可能有不同的管理方式。
哪些数据是适合存储到数据库的呢?
重要性比较高的
关系较复杂的数据
2. 数据库管理系统 (DBMS)?
(database management service)
- 种类:
RDBMS:关系型数据库
NoSQL:非关系型数据
2.1 RDBMS与NOSQL (需要熟悉)
- RDBMS和NoSQL基本特点
- 产品介绍(熟悉)
1.RDBMS:
种类: Oracle、mysql、mssql(SQL Server)、PG(postgresql) 特点:
以多张二维表的方式来存储,又给多张表建立了一定关系.数据安全性要求较高的应用场景
2.NoSQL:
种类: redis、mongodb、memcache、Hbase、neo4j 特点: 简单,快,适合做缓存数据库
针对性能要求较高,数据安全性要求不是太高的场景,一般是配合RDBMS使用的产品
关系型与非关系型数据库的对比
3.数据库管理系统种类
RDBMS: 关系型数据库管理系统
比较适合于,安全级别要求高的数据以及关系较复杂的数据
Oracle
MySQL
PG
MSSQL
NoSQL:非关系型数据库管理系统
适合于高性能存取数据,一般是配合RDBMS进行使用的
针对大数据处理分析,分布式架构更加擅长
MongoDB --->文档(document)
Redis
ES
Memcached
NewSQL: 分布式
RDS,DRDS --->AliSQL TDDL
PolarDB ----> OB (金融级别的数据库 蚂蚁金服)
PinCAP TiDB
TDSQL 腾讯
4. MySQL 产品分支
Oracle MySQL (甲骨文公司 74亿美金)
MariaDB (原版作者 重新研发)5.5 —> 10.0版本号
Percona MySQL(解决MySQL 的乙方公司)
RDS (阿里云数据库)
TDSQL (腾讯)
大家都是从mysql演变来
5. MySQL 版本选择
5.6
5.6.34 5.6.36 5.6.38
5.7
5.7.18 5.7.20 5.7.22 5.7.24
8.0
8.0.11
GA时间:5.6.38 5.7.20 2017-04-13
5.7.26 下载地址
6. Mysql 5.7.26 二进制版本手撕安装
-
规划:
- OS: Centos 7.6
- 磁盘: 20G(system)+50G(/data)
- IP: 10.0.0.51
- hostname: db01
- /etc/hosts : 10.0.0.51 db01
- iptables: OFF
- SELINUX: disabled
6.1 数据目录规划
新的环境 添加数据盘
[root@db01 ~]# mkdir /data/mysql/data -p
[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# blkid
/dev/sda1: UUID="fd2e0ca7-32be-425f-86a2-85c02b9ec5ea" TYPE="xfs"
/dev/sda2: UUID="79a3924b-739e-48dc-ab0c-0444b9ac6591" TYPE="swap"
/dev/sda3: UUID="3a3a295f-88f8-456d-94dc-1a3eeb517c02" TYPE="xfs"
/dev/sdb: UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" TYPE="xfs"
[root@db01 ~]# vim /etc/fstab
添加:
UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" /data xfs defaults 0 0
PS:把自己的UUID看好再复制上去
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
6.2 软件上传解压
[root@db01 /usr/local]# rz -E
[root@db01 /usr/local]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /usr/local]# mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
改名或者做成软连接
[root@db01 /usr/local]# ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql mysql
6.3 原始环境检查
卸载其他的数据库依赖
[root@db01 ~]# rpm -qa |grep mariadb
[root@db01 ~]# yum remove mariadb-libs -y
6.4 用户权限准备
[root@db01 /etc]# useradd -s /sbin/nologin -M mysql
[root@db01 /etc]# chown -R mysql.mysql /data
[root@db01 /etc]# chown -R mysql.mysql /usr/local/mysql
6.5 环境变量设置
如果是yum下载的话就不需要给配置变量
vim /etc/profile
添加:
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile
[root@db01 ~]# mysql -V
[root@db01 ~]# echo $PATH
6.6 设置用户/路径
5.7+ :
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
报错:
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
报错原因: Linux系统中缺少libaio-devel 软件包
解决:
[root@db01 ~]# yum install -y libaio-devel
说明:
--initialize 使用一种安全的模式初始化数据.
特点: 1. 初始密码 2. 密码复杂度 3. 密码过期时间??
--initialize-insecure 使用一种不安全的模式初始化数据.
1. 无密码 2. 无密码复杂度
5.7-:
使用它自带一个脚本进行
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
报错2:
报错原因:
在/data/mysql 存在文件
解决:
rm -rf /data/mysql/data/*
rm -rf /data/*
重新初始化
6.7 编辑mysql配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
6.8 启动关闭数据库
start/stop/restart
[root@db01 ~]# cd /usr/local/mysql/support-files/
[root@db01 support-files]# ./mysql.server restart
ERROR! MySQL server PID file could not be found!
Starting MySQL. SUCCESS!
6.9 设置开机自启动
第一种方法:
cp mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl restart mysqld
start/stop/restart
注意:将原来模式启动mysqld先关闭,然后再用systemd管理。
第二种方法:
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]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
8. 物理存储结构
宏观:
MyISAM存储引擎
user.frm : 表结构
user.MYD : 表数据
user.MYI : 索引
InnoDB 存储引擎表 :
time_zone.frm : 表结构
time_zone.ibd : 数据 + 索引(IOT)
微观:
5.5 版本以上 默认都是 InnoDB 存储引擎表
- segment (段) :一个(非分区表)表就是一个段,由一个或者多个区构成.
- extent(区) :连续的64个page,默认1M
- page(页) : MySQl的最小物理IO单元,默认16KB,连续的4个OS block,连续的32个扇区
IO 磁盘和内存之间的交互
9.MySQL 逻辑结构
库 ===》 目录
表 ===》 表文件
列 : 列名 + 列属性 (约束,数据类型,其他属性)叫字段
行 : 记录
属性 : 数据行,权限等…
10. MySQL 基础管理
10.1 MySQL 的用户管理
10.1.1 作用
- 登录
- 管理数据库逻辑对象
10.1.2 用户的定义
用户名@'白名单'
允许用户登录的”范围“ = IP段
白名单支持的方式?
wordpress@'10.0.0.%'
wordpress@'%'
wordpress@'10.0.0.254'
wordpress@'localhost'
wordpress@'db02'
wordpress@'10.0.0.5%'
wordpress@'10.0.0.0/255.255.254.0'
10.1.3 用户的管理命令
(1) 查
5.7+
mysql> select user,host ,authentication_string from mysql.user;
5.7-
mysql> select user,host ,password from mysql.user;
(2) 增
create user ncs@'10.0.0.%';
(3) 改
alter user ncs@'10.0.0.%' identified by '123';
(4) 删除
drop user ncs@'10.0.0.%';
10.2 权限管理
10.2.1 权限定义
新特性:
8.0- :命令即权限
ALL :
SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE,DROP
ALL : 以上所有权限,一般是普通管理员拥有的
with grant option:超级管理员才具备的,给别的用户授权的功能
8.0+ : 支持角色功能( 自由打包需要的权限).
10.2.2 权限定义方法
GRANT ALL ON 权限作用范围 TO 用户 IDENTIFIED BY ‘密码’;
ALL——权限**
GRANT SELECT, INSERT, UPDATE, DELETE ON oldguo.* TO oldguo@‘10.0.0.%’ IDENTIFIED BY ‘123’;
权限作用范围:
. = -R /
ncs.* = -R /ncs
ncs.t1 = -R /ncs/t1
10.2.3 权限管理
(1) 授权
GRANT ALL ON ncs.* TO ncs@’% IDENTIFIED BY ‘123’;
例子1:创建并授权超级管理员root,能够通过10网段任意地址管理数据库.
grant all on *.* to root@'10.0.0.%' identified by '123' with grant option;
(2) 查询用户权限
show grants for root@'10.0.0.%';
例子2:创建一个应用用户app,能够通过10网段访问,(增删改查)app库的所有表
grant SELECT,INSERT, UPDATE, DELETE on app.* to app@'10.0.0.%' identified by '123';
(3) 回收
说明:
多次授权是叠加关系,修改权限只能回收.
grant SELECT,INSERT, UPDATE, DELETE on app.* to app@'10.0.0.%' identified by '123';
show grants for app@'10.0.0.%';