数据库 day 02 mysql 基础管理

补:

数据初始化 (建系统库) ---(不安全的初始化方式,会生成一个随机登录数据库密码。登录时必须修改密码才能登录)
[root@db01 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

show processlist; #查看当前线程用户登录数量

SQL层

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

查询QC(query_cache)  #将解析、预处理、优化器等重复操作保存在缓存中,提高效率。

day 2 第二章MySQL 基础管理

1.用户管理

登录
管理对象

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'  本地
1.2.3 常用
user@'10.0.0.%'
user@'10.0.0.0/255.255.254.0' 
user@'10.0.0.5%'    50-59
user@'localhost'  本地
创建用户:
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 oldzhang@'10.0.0.%';

ps: 8.0+ 版本必须先创建用户再授权。
    8.0以前版本授权时同时可以创建用户。

2.权限管理

2.1 MySQL权限列表
mysql> show privileges;   #权限清单
2.2 # 权限语法格式
GRANT  权限   ON 权限作用范围   TO 用户   IDENTIFIED BY '123' with grant option;
权限作用范围 :
*.*       ====>  一般是管理员会设置的方法
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库进行业务开发(开发的权限一般为除了server admin之外的)
2.4 root管理员密码忘记或被篡改如何处理?
(1) 关闭数据库,启动到"单用户"模式
[root@db01 data_3306]# systemctl stop mysqld
[root@db01 data_3306]# mysqld_safe  --skip-grant-tables  --skip-networking  &      #--skip-networking关闭远程tcp连接(不提供端口号)只从本地登录     --skip-grant-tables  不开启验证模块
(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 oldshun@'10.0.0.%';

2.6 回收权限
mysql> revoke delete,drop   on *.* from 'oldshun'@'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"
Enter password: 
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  5 | root | localhost | NULL | Query   |    0 | starting | 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 
4. MySQL的启动关闭
systemctl ---> mysql.server start 
-----> mysqld_safe  ----> mysqld
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 

先调用/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 自定制初识化配置文件位置
[root@db01 ~]# cat /opt/a.cnf 
[mysqld]
user=mysql
port=3306
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
server_id=6
socket=/tmp/a.sock
[root@db01 ~]# pkill mysqld
[root@db01 ~]#  mysqld --defaults-file=/opt/a.cnf &   #启动数据库的方式
[root@db01 ~]# mysql  -S  /tmp/a.sock

6. 多实例的规划和配置
分布式架构中应用广泛
6.1 端口和目录
mkdir -p /data/mysql/data_{3307,3308,3309} 
2. 配置文件准备 
cat > /data/mysql/my3307.cnf < /data/mysql/my3308.cnf < /data/mysql/my3309.cnf <
6. 使用 systemd 管理多实例
cat >/etc/systemd/system/mysqld3307.service </etc/systemd/system/mysqld3308.service </etc/systemd/system/mysqld3309.service <

第三章 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 字符集  utf8   utf8mb4
utf8: 最大字符长度3个 ,其中中文三个字符  
utf8mb4 :  最大字节长度4个. 可以存储emoji表情字符.
2.2
# mysql 中支持的字符集
mysql> show charset;
# mysql 中的排序规则
show  collation;   #校对规则

默认是大小写不敏感.

2.3 数据类型
2.3.1 数字类型
tinyint(按需分派长度)   1字节长度数字=8字符  ===> 11111111  ===> 0-2^8-1 ===> -2^7-2^7-1 (3位)
int       4字节长度=32字节      ====> 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会受到时区的影响


你可能感兴趣的:(数据库 day 02 mysql 基础管理)