MySQL数据库-第二章: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 授权时自动创建用户.

  1. 权限管理

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.%';
  1. 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

mysqldump(备份恢复)

3.2 第三方开发工具

sqlyog

navicat

workbench

3.3 应用程序连接

php-mysql

pip3 install mysql

jar

go
  1. MySQL的启动关闭
systemctl ---> mysql.server start

-----> mysqld_safe  ----> mysqld
  1. 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 &
  1. 多实例的规划和配置

分布式架构中应用广泛

6.1 端口和目录

rm -rf /data/mysql/data_{3307,3308,3309}

mkdir -p /data/mysql/data_{3307,3308,3309}
  1. 配置文件准备
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
  1. 授权
[root@db01 ~]# chown -R mysql.mysql /data/
  1. 初始化数据
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
  1. 启动多实例
[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
  1. 使用 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功能

管理,操作数据库对象:

库: 库名,库属性

表: 表名,表属性,列(列名,列属性),数据行

  1. 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)

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