mysql学习笔记

mysql数据库基础

  1. 两大分类:关系型数据库:mysql oracle sql server
    非关系型数据库:mogodb redis access

  2. 安装方式:yum源安装
    tar.gz包安装
    phpstudy
    宝塔

yum install -y mysql*
yum install -y mysql-sever/maridb-server

  1. DBA : 数据库管理员
    DB : 数据库
    DBMS :数据库操作系统
    SQL : 数据库查询语句

  2. DQL.(数据查询语言):查询语句,凡是select语句都是D.QL。
    DML(数据操作语言): insert delete update,对表当中的数据进行增删改。
    DDL(数据定义语言): create drop alter,对表结构的增删改。
    TCL.(事务控制语言): commit提交事务,rollback回滚事务。(TCL.中的T是Transaction)DCL(数据控制语言):grant授权、 revoke撤销权限等。

    1. DQL(数据查询操作):
      查询所有: select * from表名where条件;
      不能重复查询: select distinct列名from表名where条件;3,连接查询: select concat(列名1,列名2) from表名;
      列起别名: select列名as显示列名from表名;
      模糊查询: select * from表名where列名like ‘%字符串%’;
      升序与降序: select * from表名order by字段名ASC(升序默认);select * from表名order by字段名DESC(降序)
      desc 表名 查看指定表的结构
  3. 创建名为school的数据库
    切换到school数据库当中
    使用source 命令来导入之前语句写好的表 source /etc/1.sql

  4. limit select * from school limit x,y;
    查询school的所有数据 并显示其从x号索引开始的y
    列数据
    limit 0,2 显示第一行数据的两列数据
    limit 1,2 显示第二行数据的两列

  5. or and / || &&
    select xxx from yyy where zzzz and/or www
    连接多个条件语句

  6. between and
    select xxx from yyyy where number between 10 and 20;
    select xxx fom yyy where number >=10 and number <=20;

  7. 永真式
    select xxxx from yyyy where xxxx or 1=1;

  8. 永假式
    select xxxx from yyyy where xxxx and 1=-1;

  9. 逻辑运算
    1:真 0:假
    1+1=1
    1+0=0
    0+0=0

  10. union 联合查询
    select xxxx from yyyy where xxxx union select xxxx from yyyy where xxxx ;
    常见鱼sql注入中的联合注入

  11. order by x 按照x字段来进行排序,有x字段则不报错,反之则报错,常用于sql注入中判断其字段数
    select xxxx from yyyy where xxxx order by 4;

任务
1:整理出思维导图
2:练习上述的sq语句
3:对于sql语句的报错有所了解,知道那些报错语句具体是什么错误

DML数据操作语言

  1. 插入数据: insert into 表名 字段名 values
    MariaDB [school]> insert into DEPT(DEPTNO,DNAME,LOC) VALUES(2314,‘DASD’,‘HFDDS’) ;
    MariaDB [school]> INSERT INTO DEPT VALUES(423,‘SDAD’,‘DAFAFA’);

  2. 删除数据: delete from 表名 where 条件
    MariaDB [school]> DELETE FROM DEPT WHERE DEPTNO = 423;

  3. 更改数据: update 表名 set 列名=数值 where 条件
    MariaDB [school]> UPDATE DEPT SET DEPTNO=55 WHERE DEPTNO=60;

在进行插入操作,我们因该有限查询一下表的结构,各个字段的属性,必须时字符型插入字符型才可以
desc 表名 show create 表名

扩展:版本5.5之前的默认引擎shimuisam: 5.5版本以及之后的默认引擎是INNODB
MylSAM:表级锁 以表为单位进行操作
INNODB:行级锁 以行为单位进行增删改查等操作,支持高并发等,支持事务

DCL用户权限操作

  1. 用户授权: grant 权限 on 数据库名.* to’用户名’@’ip‘; 赋予权限的同时创建用户
    将xxx数据库的yyy表的权限赋予给zzz用户

  2. 创建用户: create user ’wang‘@’%‘ identified by ’123456‘;
    %号表示该用户可用于所有地方登陆,包括远端 locahost 表示该用户是本地登录的账户

  3. mysqladmin -uroot passwd ’123456‘ ;
    设置mysql账户的密码(应该满足密码复杂度的)
    还可以通过update 或者是 inseret into 来更改mysql.user中的数据,以达到修改/新增的目的

    	设置权限:grant select,update on mmm.* to 'testa'@ '192.168.9.%' identified by '123'
    	查看授权:	show grants for testa@ '192.168.9.%';
    	撤销权限:	revoke update on mmm.* from 'testa '@ '192.168.9.%';
    	刷新授权		flush    privileges
    

DDL数据定义语言

  1. 创建数据库: create database 库名;
  2. 创建表名: create table 表名(字段 类型 primary ,字段 类型 primary )
  3. 查看数据库的默认值字符集 show create databases 数据库名字 ;
    修改字符集 alter database <数据库名> character set utf8;
    alter table <表名> character set utf8;
  4. 切换数据库 use 数据库名字;

#创建学生表,并设置表类型、字符集
CREATETABLE student( id工NT(4)NOT NULL AUTO_INCREMENT COMMENT‘主键、学号’,
psd VARCHAR(20) COLLATE utf8_estonian_ci NOT NULL DEFAULT '123456’ coNMENT‘密码','name’VARCHAR(30) COLLATE utf8_estonian_ci NOT NULL DEFAULT '匿名’COMMENT‘学生姓名', 'sexVARCHAR(2)COLLATE utf8_estonian_ci NOT NULL DEFAULT ‘男’COMMENT‘性别’,birsdayDATET工ME DEFAULT NULL,emai7VARCHAR(20) COLLATE utf8_estonian_ci DEFAULT NULL,PR工MARY KEY ( id)
))ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_estonian_ci

拓展
修改表名: alter table表名rename新表名;
添加表内字段: alter table表名add(列名列类型);删除表内字段: alter table表名drop列名;
修改列类型: alter table表名modify 列名列类型;
修改列名与列类型: alter table表名change列名新列名列类型;

常用函数

  1. count
    select count * from 表名 统计出指定表的行数
  2. sum
    select sum(DEPTNO) from DEPT 查看指定列的和
  3. avg
    select avg(DEPTNO) FROM DEPT 查看指定列的平均值
  4. max
    select max(DEPTNO) from DEPT 查找指定列的最大值
  5. min 同上查找最小值
  6. select databse(); 查找当前数据名字
  7. select vresion(); 查找当前数据库的版本信息
  8. select

数据的备份

  1. mysqldump mysql自带的改备份工具
    物理备份:将C盘上的data直接备份,复制粘贴,冷拷贝
    逻辑备份:通过软件来进行备份,逻辑备份
  2. 完整备份
    增量备份:在完整备份的基础上,只备份新增的内容
  3. 通过协议,将需要备份的数据查询出来,再将查询出来的语句,使用insert进行插入
  4. mysqldump 【选项】 数据库名 【表名】 >脚本名
  5. mysqldump 【选项】 --all-databases 【选项】 >脚本
  6. 选项 (xxx主机的yyy端口) 默认情况先时本机host 3306端口 以及相关的用户 和密码
    在这里插入图片描述**以下命令都是在命令行的模式下进行输入的,不是再数据库 **

案例:mysqldump -uroot -p --all-databases >/home/all.back 备份所有数据库
案列: mysqldump -uroot -p test >/home/test.db 备份指定的数据库
案列:mysqldump -uroot -p 表1 表2 表3 > /home/back.db备份指定的表
*案例 mysqldump -uroot -p test --ignor’e-table =表1 --ingnore-table =表2 >back.db * 备份指定的数据库的所有数据(排除表1表2)

数据库还原

系统方法

  1. mysqladmin -uroot -p create db_data 为即将还原的数据创建使用的数据库
  2. mysql -uroot -p db_data > /home/school.db

source方法

  1. 还是同上,先创建一个数据库
  2. 进入到指定的数据库, 使用 source /home/all.db 将all.db中的数据导入到当前数据库中

数据库安全-----忘记密码

a、停止服务
systemct1 stop mysqld
b、跳过密码直接登录
mysqld_safe --skip-grant-tables&
c、登录
[root@www ~]# mysq1
mysq1> update mysq1.user set password=password(“111”) where user='root ';
mysq1> flush privileges;
d、ki77进程mys1qd
e、重启
systemct7 start mysq1d
f、验证
[root@www ~]# mysq1 -uroot -p111

ss -lntp

内置数据库 mysql 其中的user标1存储了用户的账户密码信息

information_schema数据库

MariaDB [information_schema]> select sqhema_name from schemata;

tables:保存了所有的厍名(字段table schema),和所有的表名(字段table name)

MariaDB [information_schema]> select table_schema,table_name fron tables;

mysql数据库安全------二进制日志

  1. 默认情况下是关闭的,其主要用于记录数据的更改,目的是在恢复数据时能够最大程度的修复数据
  2. rpm -qc mariadb
  3. 配置文件 /etc/my.cnf 从配置文件 /etc/my.cnf.d 要想读取到从配置文件的信息,需要在主配置文件中添加从配置文件的信息 将!取消掉

在这里插入图片描述

当我们对数据库的内容进行操作时,最近的那个二进制文件就会将我们的操作存入到其中。
我们每次重启mariadb时,都会按照规则生成一个二进制文件日志

慢查询日志

  1. 慢查询日志 会就那些执行时间超过long_query_time秒的sql语句
  2. show variables like “%slow%”; 查看是否开启了慢日志查询 默认关闭
  3. set global slow_query_log=ON; 开启慢日志查询
  4. show variables like “long_query_time”; 查询默认的慢查询时间
  5. set long_query_time = 5 更改默认的慢查询时间限制

配置文件修改:
通过配置文件更改:
vi /etc/my.cnf
slow_query_1og=ON
slow_query_iog_file=mysq1

索引 create index on

为什么app,应用,web反应慢?
1、sgl本身语句逻辑问题
2、索引失效,重建索引
3、服务器被攻击

配置文件优化

sort_buffer_size = 2M --线程占用内存,一个线程占用2m,不能设置太大,不然数据并发高容易崩溃公
query_cache_size = 64 —数据库的缓存建议设置小一点,因为数据库的不适合大量大缓存
query_cache_nim_res_unit = 2K —设置小资源能够大小能够存入数据库缓存
tmp_table_size = 256M ----临时表,会占用磁盘空间
long_query_tmie = 2 —慢查询时间,一般数据库慢查询不能超过2秒log-slow-queries=/var/log/mysql-slow-log.log —指定慢查询日志文件位置
loa-error = /var/loa/mvsal-error.loa —定义错误日志

主从复制

  1. nginx 反向代理 ,高并发 ,负载均衡
    io线程 sql线程

提前已经安装了MYSQLD
一、建立时间同步环境,在主节点上搭建时间同步服务器1〕安装NTP(关闭防火墙/selinux)
yum -y install ntp

2)配置NTP
vi /etc/ntp.conf
server 127.127.1.0#本地时间供给源
fudge 127.127.1.0 stratum 8#设置时区为+08区3)重启服务并设置为开机启动
systemctl restart ntpd
systemctl enable ntpd

二、在从节点上进行时间同步〔关闭防火墙/selinux)
yum -y install ntpdate
ntpdate 192.168.9.100
安装MYsQLD数据库,在SLAVE1,SLAVE2上安装。三、修改主服务器

  1. vi /etc/my.cnf
    server_id = 11〔修改)
    log bin = master-bin(惨改)
    log-slave-updates = true(增加)
    2)重启服务器
    systemctl restart mysqld
    3登录mysql程序,给服务器授权mysql -u root
    mysql> GRANT REPLICATION SLAVE ON . TO ‘myslave’@192.168.9.%'IDENTIFIED BY’123456;
    mysql> FLUSH PRIVILEGES;
    mysql> show master status;
    四、修改从服务器
    vi /etc/my.cnf
    server_id = 22〔修改)
    relay-log=relay-log-bin(塔加)
    relay-log-index= slave-relay-bin.index(增加)重启mysqld
    systemcti restart mysqld
    五、在从服务器上配置同步mysql -u root -p
    mysql> change master to master_host=‘192.168.100.10’,master_user= 'myslave , master _password=123456,master log file=‘master-bin.000003’ .master _log_pos=615;
    启动同步:
    mysql> start slave;mysql> stop slave;
    查看slave状态,确保以下两个值为yesmysql> show slave status\G;
    备注;解决UUID重复的问题:
    mv fusr/local/mysql/data/auto.cnf fusrflocal/mysql/data/auto.cnf.bak
    六、验证
    在MASTER上创建测试数据库
    搭建完成后,可以在主库show slave hosts查看有哪些从库节点mysql> show slave hosts;
    mysql> create database db_test;

读写分离

https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md名字来源
Atlas:希腊神话中双肩撑天的巨人,普罗米修斯的兄弟,最高大强壮的神之一,因反抗宙斯失败而被罚顶天。我们期望这个系统能够脚踏后端DB,为前端应用撑起一片天。

一、简介
Atlas是由Qinoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MSQL-Proy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MSQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。
主要功能:
1.读写分离
2.从库负载均衡
3.IP过滤
4.自动分表
5.DBA可平滑上下线DB
6.自动摘除宕机的DB

二、Atlas相对于官方MySQL-Proxy的优势
1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口2.重写网络模型、线程模型
3.实现了真正意义上的连接池4.优化了锁机制,性能提高数十倍
4.优化了锁机制,性能提高数十倍
三、环境
mysql主192.168.100.10mysql从192.168.100.100mysql从192.168.9.4
mysql Atlas代理192.168.100.2002)安装并配置Atlas软件
rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
安装好了,它会默认在”/usr/local/mysql-proxy”下给你生成4个文件夹,以及需要配置的文件bin目录下放的都是可执行文件

  1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到2. “mysql-proxy”是MySQL自己的读写分离代理

  2. “mysql-proxyd”是360的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的conf目录下放的是配置文件

  3. “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑lib目录下放的是一些包,以及Atlas的依赖

log目录下放的是日志,如报错等错误信息的记录
3)配置读写分离
a)配置master,slave1, slave2中开放权限给Atlas:
grant all on . to test@‘192.168.9.%’ identified by ‘123.com’;flush privileges;
b)加密用户名密码
进入bin目录,使用encrypt来对数据库的密码进行加密,我的MySQL数据的用户名是test,密码是123.com,我需要对密码进行加密[root@localhost bin]# ./encrypt 123.com
tF5TeinkMj8=

))编辑test.cnf配置文件
Ivi /usr/local/mysql-proxy/conf/test.cnf[mysql-proxy]
#带#号的为非必需的配置项目
#管理接口的用户名 admin-username = user
#管理接口的密码 admin-password = pwd
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔proxy-backend-addresses = 192.168.9.100:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔proxy-read-only-backend-addresses = 192.168.9.3:3306@1,192.168.9.4:3306@1

#用户名与其对应的加密过的MySQL密码,密码使用PREFX/bin目录下的加密程序encrypth加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!pwds = test:tF5TeinkMj8=
#Atlas监听的工作接口IP和端口proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口admin-address = 0.0.0.0:2345
d)配置无误后,启动Atlas软件
/usr/local/mysql-proxy/bin/mysql-proxyd test start/usr/local/mysal-proxy/bin/mysal-proxvd test stop

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值