MySQL

1、 关系型数据库与非关系型数据库:
非关系型数据库:也能存东西,但是存储东西的时候和关系型数据库不一样,没有表格的结构。只要能存储东西的软件都是非关系型的。种类非常多。由代表性的是redis、memcached、mongoDB等等。
关系型数据库(MySQL):基于二维表格,类似excel表。表格和表格之间具有关联性,可以做关联查询等。

关系型数据库管理系统RDBMS:
商业: Oracle, DB2(IBM),Sybase, Infomix, SQL Server
开源: MySQL (MariaDB) ,PostgreSQL, pgsql, EnterpriseDB
非关系型数据库NoSQL:
MongoDB, Redis, HBase, Memcached
2、 数据库和数据表的关系:
最外层是数据库,数据库中有很多张数据表,数据表里有很多数据(比如数字、图形图像声音等)

熟悉基本的sql语句

3、 MySQL的基本命令:
4、SQL语句分类*
一句话总结:DDL、DQL、DML、DCL 定查操删
 数据库定义语言(DDL) define
创建、修改或删除数据库中各种对象,包括表视图、索引等
命令: CREATE TABLE , ALTER TABLE,DROP TABLE
 数据库查询语言(DQL) query
按照指定的组合、条件表达式或排序检索已存在的数据库中数据,
不改变数据库中数据。
命令: SELECT…FROM…WHERE…
 数据库操纵语言(DML) manipulate
对已经存在的数据库进行元组的插入、删除、修改等操作
命令: INSERT、 UPDATE、 DELETE
 数据库控制语言(DCL) control
用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视。
命令: GRANT、 REVOKE、 COMMIT(提交)、 ROLLBACK(撤回)
5、常用的sql语句:
 定义:show、use、desc、create、drop
MariaDB [(none)]> show databases; 查看有哪些数据库。
MariaDB [mysql]> use test 切换至test数据库。
MariaDB [test]> show tables; 查看当前库中有哪些数据表
MariaDB [mysql]> describe user; 查看数据表的结构,或者简写成desc user;
PRI代表主键,表示host和user里面的数据既不能冲突,也不能为空,目的是方便查询,防止查询出问题
MariaDB [mysql]> describe mysql.user; 不进入MySQL库内查询
MariaDB [mysql]> create database messi; 创建新的数据库messi
MariaDB [messi]> create table barca(user_name char(10) not null,user_p
asswd char(48) default ‘’,primary key(user_name)); 在库中创建一个表名为barca
Query OK, 0 rows affected (0.05 sec)
MariaDB [messi]> desc barca;
±------------±---------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------------±---------±-----±----±--------±------+
| user_name | char(10) | NO | PRI | NULL | |
| user_passwd | char(48) | YES | | | |
±------------±---------±-----±----±--------±------+
2 rows in set (0.00 sec)
MariaDB [messi]> drop table barca; 删除barca表格
Query OK, 0 rows affected (0.02 sec)
MariaDB [messi]> show tables;
±----------------+
| Tables_in_messi |
±----------------+
| psg |
±----------------+
1 row in set (0.00 sec)
MariaDB [messi]> drop database test; 删除数据库test
Query OK, 2 rows affected (0.00 sec)
 增:insert into表名(xxx,yyy) value(“xxx的值”,”yyy的值”)
往user_name和user_passwd列里分别插入laliga和123456两个数据
MariaDB [messi]> insert into barca(user_name,user_passwd) values(‘laliga’,‘123456’);
 查:select xxx,yyy from 表名 where xxx=””;
查看数据表里的所有数值:
MariaDB [messi]> select * from barca;
±----------±------------+
| user_name | user_passwd |
±----------±------------+
| laliga | 123456 |
| uefa | 123456 |
±----------±------------+
查找mbappe的user_name和user_passwd的值:
MariaDB [messi]> select user_name,user_passwd from psg where
修改user_name是neymar的密码为978735(密文形式);
MariaDB [messi]> update psg set user_passwd=password(“978735”) where u
ser_name=“neymar”;
 删:delete from 表名 where xxx=””;
MariaDB [messi]> delete from barca where user_name=“suarez”;
从barca表里删除suarez的user_name
Query OK, 1 row affected (0.01 sec)
MariaDB [messi]> select * from barca;
±----------±------------+
| user_name | user_passwd |
±----------±------------+
| laliga | 123456 |
| uefa | 123456 |
| world cup | 111111 |
±----------±------------+
3 rows in set (0.00 sec)

 设置用户权限(用户不存在时可新建用户):
grant select|insert|update on
创建teacher用户,密码为123456,设置可以给crushlinux库下所有表的查询权限。
mysql> grant select on crushlinux.* to ‘teacher’@‘localhost’ identified by ‘123456’;‘
[root@ssh-server ~]# mysql -uteacher -p123456
 查看用户权限:show grants for
mysql> show grants for ‘teacher’@‘localhost’;
±--------------------------------------------------------+
| Grants for teacher@localhost |
±--------------------------------------------------------+
| GRANT USAGE ON . TO ‘teacher’@‘localhost’ |
| GRANT SELECT ON messi.* TO ‘teacher’@‘localhost’ |
±--------------------------------------------------------+
2 rows in set (0.00 sec)
 撤销用户权限:revoke select|insert|update on
mysql> revoke select on crushlinux.* from ‘teacher’@‘localhost’;
Query OK, 0 rows affected (0.45 sec)
mysql> show grants for ‘teacher’@‘localhost’;
±--------------------------------------------+
| Grants for teacher@localhost |
±--------------------------------------------+
| GRANT USAGE ON . TO ‘teacher’@‘localhost’ |
±--------------------------------------------+
1 row in set (0.00 sec)
显示当前任务列表(与性能有关):
MariaDB [(none)]> show processlist;

熟悉MySQL的备份策略和备份方法

1、Mysql复制类型:用的半同步复制
 异步复制:默认是这个类型,主库执行完客户端提交的事务后立即把结果返回给客户端,从不关心从库是否已接收并处理。如果主库down了,可能没传到从库上,导致从库数据不完整。
 全同步复制:当主库执行完一个事务,所有从库都执行了该事务才返回给客户端。但这样返回给客户端的响应速度特别慢。
 半同步复制:介于异步和全同步之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收并写入了relay log里才返回给客户端。
2、MySQL支持的复制方式:
基于sql语句的复制:在主服务器执行的对数据有变化(如增删改查)的SQL语句,同样会在从服务器上执行。
基于行的复制:主服务器把表的行变化作为事件写入到二进制日志中,然后把这个事件复制到从服务中。
混合模式的复制:先采用基于语句的复制,一旦发现语句复制无法精确复制时,再采用行的复制方法。
3、MySQL主从复制(replication)的原理
在这里插入图片描述

首先master会开启二进制功能,然后建立主从同步账号,当有数据进行写入的时候,他不仅会写入到磁盘上,还会把数据库中的变更的语句记录到binlog(二进制日志)中。
而slave(从)会开启一个IO线程,这个IO线程会和主的IO线程建立一个连接,建立完连接后会读取主的二进制的日志(binlog), 会去看一下你现在用的是几号日志的什么位置,然后他会拿走binlog和binlog的position。在拿到之后slave的IO会把binlog放到slave的relaylog(中继日志)中,把pos放到master.info中。
接下来sql线程会从relaylog中读取sql语句并执行语句,(然后从的数据就会产生变化),进行重放达到主从同步的目的。
4、 MySQL的数据复制延迟:用的是5.7的版本,没有遇到这个问题
5、 同步数据是通过主从复制的方式,数据的高并发用的是Amoeba读写分离,由amoeba分配给服务器做读和写的任务。

在这里插入图片描述

用户的读的和写的操作首先会交给amoeba,amoeba会进行分类,把写的交给master,读的交给slave1 slave2,然后slave1 slave2会用过主从复制的方式从master上做数据的同步
6、 MySQL的备份:
 备份策略可分为完全备份、差异备份、增量备份
完整备份 增量备份 差异备份
在这里插入图片描述

 用的是专用的备份工具mysqldump

  1. 对单个库进行完全备份
    格式:mysqldump -u 用户名 -p[密码][选项] --databases [数据库名] > /备份路 径/备份文件名
    备份messi数据库:
    mysqldump -uroot -p123456 --databases messi >/root/mysql_bak/mysql_messi

  2. 对多个库进行完全备份
    格式:mysqldump -u 用户名 -p[密码][选项] --databases [库名 1][库名 2] > /备 份路径/备份文件名
    [root@jenkins ~]# mysqldump -uroot -p123456 --databases messi ronaldo >/root/mysql_bak/mysql_all;

  3. 对所有库进行完全备份
    格式:mysqldump -u 用户名 -p[密码][选项] --opt --all-databases > /备份路径/备份文件名
    [root@jenkins ~]# mysqldump -uroot -p123456 --opt --all-databases >/root/mysql_bak/mysql_allDatabases

  4. 对表进行完全备份
    格式:mysqldump -u 用户名 -p[密码][选项] 数据库名 表名 > /备份路径/备份文件名
    mysqldump -uroot -p123456 messi barca >/root/mysql_bak/mysql_table_barca;

  5. 对表结构的备份(面试) 加-d参数
    格式:mysqldump -u 用户名 -p [密码] -d 数据库名 表名 > /备份路径/备份文件
    [root@jenkins ~]# mysqldump -uroot -p123456 -d ronaldo al_hilal >/root/mysql_bak/mysql_ronaldo_d

了解基于MHA的MYSQL高可用方案

在这里插入图片描述

一个manager可以管理多个主从复制组,当 master 出现故障时,MHA可以自动将拥有最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新提升的 master。整个故障转移过程对应用程序层面完全透明。
MHA架构:
在这里插入图片描述

当服务器进行写入时,去找一个vip,这个vip是由主和备主共同拥有的,vip可以用keepalived,也可以用脚本。用主从同步让slave1和slave2共同拿到数据,同时也拿给备主。然后manager来负责监控整个集群的状态。而因为slave有很多,读只有一个vip,所以要准备两台lvs,来对多个slave进行读的负载均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值