MySQL的内容:
- 安装
- 版本:5.7.34 二进制安装
- 商业版 收费 社区版 免费
- MySQL支持分布式和集群 如:阿里 腾讯 百度 美团 小米等都是用的MySQL
- 脚本安装 安装包去mysql官网
- 版本:5.7.34 二进制安装
- 建表建库
库在mysql里面就相当于一个文件夹,是存放数据的地方
建库:create database 库名;
查库:use 库名;
#创建表
create table nginxlog (
id int primary key auto_increment,
dt datetime not null,
prov int ,
isp int,
bd float(带宽)
) CHARSET=utf8;
表:具体存放数据的一个文件,可以理解为一个只有MySQL能读懂的文件,数据一行一行的存放在这个文件里
查看表:show tables;
字段:一个字段就是一列
primary key:做主键(这一列的每一行不能一样)
auto_increment:自增
datetime:会记录年月日 小时分钟秒
not null:代表这一列不能为空
CHARSET=utf8设置字符集为utf8
desc 表明;查看这个表的结构
show create table 表名:查看创建这个表的初始语句
drop table 表名;删除表
drop database 库名;删除库(包括里面所有的表)
select * from 表名;查询这个表内的所有数据(*表示所有的字段 也可以选择一个或多个字段 用逗号隔开)
insert into 表明(一个或多个字段) values(每个值用逗号隔开,字符串用冒号引起来),(),(); 插入多条数据(前面和后面一一对应)
varchar(设置最多的长度):可变长的字符串
row 行
record 记录 也就是一行一行
/data/mysql:数据目录里面有两种结构
.frm存放表结构
.ibd 存放索引和真正数据的
删除数据:delete from 表名 where 条件(如id=2);
修改数据:update 表名 set 修改值(如 isp=3) where 条件(如 id=3);
- 增删改查
- Pymysql库的使用
Mysql的配置文件:/etc/my.cnf
数据目录:/data/mysql
Mysql两个主流版本:5.7.34(稳定)8.0.27(新功能 不稳定)
Python的pymysql库:python里操作MySQL的库(增删改查)
‘root@localhost’:只允许在本机登录 不能在远程登录
创建用户和授权
这两个用户不是一个用户(一个是0网段的用户 还有一个是任意网段连过来的用户)
第一个sc的用户优先级低于下面的(因为下面的那个用户更加精准 故优先级更高)
远程登录的时候会自动连接优先级更加高的
grant all on *.* to 'sc'@'%';
作用:给与‘sc’@‘%’这个用户所有的权限(除了增删改查) 包括增删改查
grant是授权的命令
all 代表所有的权限,包括增删改查,但是不包括grant权限
on *.*:在所有的库上,操作所有的表 (第一个*代表库 第二个*代表所有的表)
to ‘sc’@‘%’ 表示给这个用户
grant在授权的同时还可以给你创建用户:
show warnings;是查看警告
show processlist;查看有些谁远程登录
select version(); 查看数据库的版本
import pymysql
db=pymysql.connect(host='192.168.0.36',user='sc',password='Sanchuang123#',database='mysql') #创建一个对象 也可以不指定库(这里指定了mysql库,之后就不需要use切换库了)
cursor=db.cursor() #创建一个游标
数据库的游标:只是数据库的一个缓存临时空间,游标就是帮忙执行sql语句的对象
游标名.execute(“sql语句”):返回的数字是得到的结果的行数
游标名.fetchone() 获取一条一条的数据(会有游标记录取到哪一行)
游标名.fetchmany()
游标名.fetchall() 取得所有的数据
关闭连接(游标名一起消失):
连接名.close()
Mysql命令不区分大小写 表名函数名密码等区分大小写
创建hejin库里的nginxlog表
Mysql里面有个now函数 故传值的时候可以now()
数据库的事务:一组(或一个)操作组成一个事务
事务由两个结果:要么全部成功 要么失败
commit 提交:意味着这个事务里所有的操作都成功完成(数据从内存里写到磁盘 最开始数据只会存在内存的buffer里,然后落盘到disk里面 永久保存 持久化)
rollback 回滚(撤销):刚刚做过的事情都撤销,回滚到原来的样子(一个操作失败 三个操作都撤销)
建表建库的操作会自动commit和rollback 不需要我们干预
而动数据的操作(insert update delete ) 就可以使用commit和rollback
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
只要主键不一样就是不同的记录,主键设定自增的话,不指定就会自动加1
把偏移量自动给kafka保存
判断url get是否请求成功 200代表成功
分表是为了减少存储 方便查阅
#针对于分表,我们的脚本就要进行相应的修改。
#数据插入nginxlog表之前
#1、获取prov_index和isp_index表里的数据
#2、判断要插入的prov和isp在不在表的数据里
#3、如果prov_index和isp_index数据存在,就获取相应的id,再进行存储
#4、如果prov_index和isp_index数据不存在,就把新的数据插入这两张表,然后再获取id字段,进行存储到数据表nginxlog
flush privileges;刷新权限
copy on right:写实复制