MySQL-DBA课程-Day02

今日内容

第二章 MySQL基础管理

1. 用户管理

1.1 作用
登录
管理对象
1.2 长成什么样?
用户名@'白名单'
1.2.1 用户名:
不要太长 , 和业务有关
emp_user01
grant all on . to wordpress@'%' identified '123';
1.2.2 白名单?
user@'10.0.0.56'
user@'%'
user@'10.0.0.%' 255.255.255.0 24位
user@'10.0.0.0/255.255.254.0' 23位
user@'10.0.0.5%' 50-59
user@'localhost' 本地
常用:
user@'10.0.0.%'
user@'10.0.0.0/255.255.254.0'
user@'10.0.0.5%' 50-59
user@'localhost' 本地
1.2.3 用户管理
创建用户:
mysql> CREATE USER oldguo@'10.0.0.%' IDENTIFIED BY '123';
查询用户:
mysql> select user,host from mysql.user;
mysql> select user,host,authentication_string from mysql.user;
修改用户:
mysql> alter user oldguo@'10.0.0.%' identified by '123456';
删除用户:
mysql> drop user oldguo@'10.0.0.%';
说明:
8.0+ 版本: 必须先创建用户再授权.
8.0以前: 可以grant 授权时自动创建用户.

2. 权限管理

2.1 MySQL权限列表
mysql> show privileges;
2.2 授权和回收权限
GRANT 权限 ON 权限作用范围 TO 用户 IDENTIFIED BY '123' with grant option;

权限 : 
ALL :
Alter                  
Alter routine          
Create                 
Create routine         
Create temporary tables
Create view            
Create user            
Delete                 
Drop                   
Event                  
Execute                
File                   
Grant option           
Index                  
Insert                 
Lock tables            
Process                
Proxy                  
References             
Reload                 
Replication client     
Replication slave      
Select                 
Show databases         
Show view              
Shutdown               
Super                  
Trigger                
Create tablespace      
Update                 
Usage

权限作用范围 :
*.* ====> 一般是管理员会设置的方法
oldguo.* ====> 一般是业务用户会设置的方法
oldguo.t1 ====> 一般是业务用户户设置的方法
2.3 企业授权案例
(1)授权一个管理员用户oldguo,可以从10网段任意地址登录管理数据库
GRANT ALL ON *.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123' with grant option;
(2)授权一个业务用户app,可以从10网段地址访问app库的所有表
grant select,update,insert,delete ON app.* TO app@'10.0.0.%' IDENTIFIED BY '123' ;
(3)授权一个开发用户dev,可以对dev库进行业务开发

2.4 root管理员密码忘记或被篡改如何处理?
(1) 关闭数据库,启动到"单用户"模式
[root@db01 data_3306]# systemctl stop mysqld
[root@db01 data_3306]# mysqld_safe --skip-grant-tables --skip-networking &
(2) 无密码登录MySQL
[root@db01 data_3306]# mysql
mysql> alter user root@'localhost' identified by '123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
(如果不刷新权限,会有报错)
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123456';

(3) 重启数据库到正常模式
[root@db01 data_3306]# systemctl restart mysqld

2.5 查询用户权限
mysql> show grants for app@'10.0.0.%';

2.6 回收权限
mysql> revoke delete,drop on app.* from 'app'@'10.0.0.%';

3. MySQL的连接管理

3.1 自带客户端工具
3.1.1 mysql
-u 用户名
-p 密码
-h IP
-P 端口
-S socket位置
-e 免交互
< 导入SQL脚本
例子:(1) TCP连接串远程登录
注:需要提前创建好远程用户
mysql> grant all on *.* to oldguo@'10.0.0.%' identified by '123';
[root@db01 data_3306]# mysql -uroot -p -h 10.0.0.51 -P 3306
(2) Socket连接方式
注:需要提前创建好localhost用户
mysql> grant all on *.* to oldguo@'localhost' identified by '123';
[root@db01 data_3306]# mysql -uoldguo -p -S /tmp/mysql.sock
Enter password:
如何验证一个用户是通过本地还是远程和登录的.
show processlist;
(3) 免交互执行命令
[root@db01 ~]# mysql -uroot -p -e "show processlist"
(4) 导入SQL脚本

[root@db01 ~]# mysql -uroot -p < t100w.sql
Enter password: 
mysql> source /root/world.sql

3.1.2 mysqladmin
(1) 修改密码 [root@db01 ~]# mysqladmin -uroot -p123456 password 123
[root@db01 ~]# mysql -uroot -p123
(2) 关闭数据库 [root@db01 ~]# mysqladmin -uroot -p123 shutdown

3.2 第三方开发工具
sqlyog
navicat
workbench

3.3 应用程序连接
php-mysql
pip3 install mysql
jar
go

4. MySQL的启动关闭

systemctl ---> mysql.server start
-----> mysqld_safe ----> mysqld

5. MySQL的初始化配置

5.1 初始化配置方法
源码安装定制 < 初始化配置文件 < 命令行启动时定制

5.2 初始化配置文件
[root@db01 data_3306]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

建议一个mysql实例一个配置文件

5.3 配置文件书写格式

[root@db01 data_3306]# cat /etc/my.cnf 
[mysqld]
user=mysql
port=3306
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
server_id=6
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock

标签项 ====> [mysqld]
服务器端 [server]: [mysqld],[mysqld_safe] ====> 影响到MySQL启动
客户端 [clinet] : [mysql] ,[mysqldump] ====> 影响本地客户端程序
配置项 ====> key=value

5.4 自定制初识化配置文件位置
mysqld --defaults-file=/opt/a.cnf &

6. 多实例的规划和配置

分布式架构中应用广泛
6.1 端口和目录
rm -rf /data/mysql/data_{3307,3308,3309}
mkdir -p /data/mysql/data_{3307,3308,3309}
6.2 配置文件准备

cat > /data/mysql/my3307.cnf <<EOF
[mysqld]
user=mysql
port=3307
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3307
server_id=7
socket=/tmp/mysql3307.sock
EOF
cat > /data/mysql/my3308.cnf <<EOF
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3308
server_id=8
socket=/tmp/mysql3308.sock
EOF
cat > /data/mysql/my3309.cnf <<EOF
[mysqld]
user=mysql
port=3309
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3309
server_id=9
socket=/tmp/mysql3309.sock
EOF

6.3 授权
[root@db01 ~]# chown -R mysql.mysql /data/

6.4 初始化数据

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3307
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3308
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3309

6.5. 启动多实例
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3307.cnf &
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3308.cnf &
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3309.cnf &
[root@db01 mysql]# netstat -tulnp

6.6. 使用 systemd 管理多实例

cat >/etc/systemd/system/mysqld3307.service <<EOF
[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=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3307.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3308.service <<EOF
[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=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3308.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3309.service <<EOF
[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=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3309.cnf
LimitNOFILE = 5000
EOF

pkill mysqld
systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309

========================================

第三章 SQL 基础

1. SQL介绍

1.1 简介
结构化查询语言.
1.2 SQL标准
SQL89 SQL92 SQL99 SQL03 SQL05

1.3 SQL_MODE
除数为零
日期
mysql> select @@sql_mode;

1.4 SQL 类型
DDL : 数据定义语言 : 库名,库属性,表名,表属性,列(列名,列属性)
DCL : 数据控制语言 : 权限
DML : 数据操作语言 : 数据行
DQL : 数据查询语言 : 数据行

1.5 SQL功能
管理,操作数据库对象:
库: 库名,库属性
表: 表名,表属性,列(列名,列属性),数据行

2. MySQL规范性存储限制

2.1 字符集Charset
utf8 : 最大字节长度3个.
utf8mb4 : 最大字节长度4个. 可以存储emoji表情字符.
mysql> show charset;

2.2 排序规则 (校对规则)
show collation;
默认是大小写不敏感.
utf8mb4_general_ci
utf8mb4_bin

2.3 数据类型
2.3.1 数字类型
tinyint 1字节长度数字 ===> 11111111 ===> 0-2^8-1 ===> -27-27-1 (3位)
int 4字节长度 ====> 0-2^32-1 ====> -2^31 - 2^31-1 (10位数)
bigint 8字节长度 ====> 0-2^64-1 ====> -2^63 - 2^63-1 (20位数)

2.3.2 字符串
char(10) : 定长类型,最多10个字符,占用存储空间一定.最多存储255个字符.
varchar(10):
变长类型,最多10个字符,按需分配存储空间.
需要额外1个字符或2个字符存储字符长度

因素: 变长的字符串列,90%几率都是varchar
具体原因是什么?
节省空间,还有没有别的原因?
遗留的问题..

enum('m','f')
............1 2

2.3.3 时间类型
DATETIME
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。

TIMESTAMP
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
timestamp会受到时区的影响

2.3.4 二进制类型
2.3.5 JSON(8.0)

昨日回顾

(1) 数据库种类
RDBMS : MySQL
NoSQL : Redis,MongoDB,ES
NEWSQL
(2) MySQL版本选择
小版本 GA
(3) 安装
5.7+版本
初始化数据:
mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306(自动设置密码,后方有打印)

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306(不安全初始化,无密码)

5.7 以前版本:

/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/mysql/data_3306
(4) 体系结构
一条SQL语句的执行过程
连接层

  1. 连接协议: TCP,Socket
  2. 验证
    native
    sha2
  3. 连接线程
    接受SQL
    返回结构
    show processlist;

SQL层

  1. 语法
  2. 语义
  3. 权限
  4. 解析 ---> 执行计划
  5. 预处理 ---> 代价计算(cost)
  6. 优化器 ---> 选择代价低的
  7. 执行器 ---> 结果----> 段--->区---->页
  8. 查询QC(query_cache)

案例: 5.7.23 , 16C_64G , 版本 按月分区表 , 做压力测试

开启QC之前:
select * from a where aa=xxx;
QPS 3000+

开启之后:
select * from a where aa=xxx;
QPS 600+

热点数据,可以用redis缓存数据库承当.

  1. 日志记录(按需开启)
    binlog
    general_log

存储引擎层
去系统找需要的数据页.返回到SQL,结构化数据成表.

MySQL 物理存储结构

段 : 一个表就是一个段.由1个或多个区构成.
区 : 连续的64个page,默认是1M,最小的存储分配单元.
页 : 连续4个OS block,默认16KB,最小的IO单元.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343