2023年4月17日 20:49 周一学习《MySQL是怎样运行的》,感谢作者!
启动选项和配置文件
#
在程序启动时指定的设置项,也称之为启动选项startup option(可以在命令行中/配置文件中 指定)
由于在centos7中使用systemctl start mysqld启动mysql,所以好像没法用命令行指定启动选项了
程序(可能有些程序新版本已经没有了)的对应类别和能读取的组:

这里讲配置文件的方式设置启动选项:
#添加配置
vim /etc/my.cnf
[server]
skip-networking #禁止tcp网络连接
default-storage-engine=MyISAM #建表默认使用M有ISAM存储引擎
#效果
▶ mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
#去除tcp网络连接限制后新建一个表
▶ mysql -h127.0.0.1 -uroot -p #可以连接上
mysql> create table default_storage_engine_demo(i int);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table default_storage_engine_demo;
+-----------------------------+----------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------------+----------------------------------------------------------------------------------------------------------------+
| default_storage_engine_demo | CREATE TABLE `default_storage_engine_demo` (
`i` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
如果多个配置文件都配置了某个选项,如/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf都配置了,则以最后一个配置的为主
如果同一个配置文件,比如[server]组和[mysqld]组都出现了default-storage-engine配置,则以后出现的组中的配置为准
如果一个启动选项既在命令行中出现,又在配置文件中配置,则以命令行中的为准
...
2023年4月17日 11:39 周一学习《MySQL是怎样运行的》,感谢作者!
原文
#
下载与安装
#
环境Centos7
添加MySQL5.7仓库
sudo rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
解决证书问题
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
查看是否添加成功
sudo yum repolist all | grep mysql | grep 启用
mysql-connectors-community/x86_64 MySQL Connectors Community 启用: 213
mysql-tools-community/x86_64 MySQL Tools Community 启用: 96
mysql57-community/x86_64 MySQL 5.7 Community Server 启用: 642
MySQL安装
sudo yum -y install mysql-community-server
运行与密码修改
#
Centos7中安装目录查看,在/usr/bin中,与Max有所不同
whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
ls /usr/bin |grep mysql
mysql
mysqladmin
mysqlbinlog
mysqlcheck
mysql_config_editor
mysqld_pre_systemd
mysqldump
mysqldumpslow
mysqlimport
mysql_install_db
mysql_plugin
mysqlpump
mysql_secure_installation
mysqlshow
mysqlslap
mysql_ssl_rsa_setup
mysql_tzinfo_to_sql
mysql_upgrade
添加mysqld目录到环境变量中(这里可省略,因为mysqld默认在/usr/bin中了
...
2023年4月13日 23:27 周四转载自https://www.cnblogs.com/Yunya-Cnblogs/p/14608937.html(添加小部分笔记)感谢作者!
部分参考自
https://www.cnblogs.com/ysocean/p/12328088.html
基本准备
#

架构
#
采用Centos7,Redis版本为6.2,架构如下:

hosts修改
#
vim /etc/hosts
#添加
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
集群准备
#
对每个节点
#
下载redis并解压到 /usr/local/redis-cluster中
cd /usr/local
mkdir redis-cluster
tar -zxvf redis* -C /usr/local/redis*
进入redis根目录
安装完毕
hosts修改
vim /etc/hosts
#添加
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
配置文件修改(6个节点中的每一个)
#
创建多级目录
mkdir -p /usr/local/redis_cluster/redis_63{79,80}/{conf,pid,logs}

编写配置文件
...
2023年4月5日 17:23 周三yum源替换成阿里云
#
yum install -y wget
## 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
## 下载
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
## 重建缓存
yum clean all
yum makecache
Java环境搭建
#
yum search java | grep jdk
yum install -y java-1.8.0-openjdk-devel.x86_64
# java -version 正常
# javac -version 正常
解压相关
#
-zxvf
tar -zxvf redis* -C /usr/local/redis*
# z :表示 tar 包是被 gzip 压缩过的 (后缀是.tar.gz),所以解压时需要用 gunzip 解压 (.tar不需要)
# x :表示 从 tar 包中把文件提取出来
# v :表示 显示打包过程详细信息
# f :指定被处理的文件是什么
# 适用于参数分开使用的情况,连续无分隔参数不应该再使用(所以上面的命令不标准),
# 应该是 tar zxvf redis* -C /usr/local/redis*
主题修改
#
oh my zsh
...
2023年3月14日 22:34 周二转载自https://github.com/Snailclimb/JavaGuide(添加小部分笔记)感谢作者!
本文来自公号 MySQL 技术,JavaGuide 对其做了补充完善。原文地址:https://mp.weixin.qq.com/s/d5OowNLtXBGEAbT31sSH4g
优化 SQL 的第一步应该是读懂 SQL 的执行计划。本篇文章,我们一起来学习下 MySQL EXPLAIN 执行计划相关知识。
什么是执行计划?
#
执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化会后,具体的执行方式。
执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。
如何获取执行计划?
#
-- 提交准备数据
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for dept_emp
-- ----------------------------
DROP TABLE IF EXISTS `dept_emp`;
CREATE TABLE `dept_emp` (
`id` int(0) NOT NULL,
`emp_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`other1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`other2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `index_emp_no`(`emp_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of dept_emp
-- ----------------------------
INSERT INTO `dept_emp` VALUES (1, 'a1', 'o11', '012');
INSERT INTO `dept_emp` VALUES (2, 'a2', 'o21', 'o22');
INSERT INTO `dept_emp` VALUES (3, 'a3', 'o31', 'o32');
INSERT INTO `dept_emp` VALUES (4, 'a4', 'o41', 'o42');
INSERT INTO `dept_emp` VALUES (5, 'a5', 'o51', 'o52');
SET FOREIGN_KEY_CHECKS = 1;
MySQL 为我们提供了 EXPLAIN 命令,来获取执行计划的相关信息。
...
2023年3月12日 17:53 周日转载自https://github.com/Snailclimb/JavaGuide(添加小部分笔记)感谢作者!
题目来源于:
牛客题霸 - SQL 必知必会
检索数据
#
select 用于从数据库中查询数据。
从 Customers 表中检索所有的 ID
#
现有表 Customers 如下:
编写 SQL 语句,从 Customers 表中检索所有的 cust_id。
答案:
select cust_id
from Customers;
检索并列出已订购产品的清单
#
表 OrderItems 含有非空的列 prod_id 代表商品 id,包含了所有已订购的商品(有些已被订购多次)。
编写 SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
答案:
select distinct prod_id
from OrderItems;
知识点:distinct 用于返回列中的唯一不同值。
检索所有列
#
现在有 Customers 表(表中含有列 cust_id 代表客户 id,cust_name 代表客户姓名)
...
2023年3月12日 17:52 周日转载自https://github.com/Snailclimb/JavaGuide(添加小部分笔记)感谢作者!
本文整理完善自下面这两份资料:
基本概念
#
数据库术语
#
数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。行(row) - 表中的一个记录。主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。
SQL 语法
#
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语法结构
#

SQL 语法结构包括:
子句 - 是语句和查询的组成成分。(在某些情况下,这些都是可选的。)表达式 - 可以产生任何标量值,或由列和行的数据库表谓词 - 给需要评估的 SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。查询 - 基于特定条件检索数据。这是 SQL 的一个重要组成部分。语句 - 可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。
SQL 语法要点
#
- SQL 语句不区分大小写,但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置。例如:
SELECT 与 select 、Select 是相同的。 - 多条 SQL 语句必须以分号(
;)分隔。 - 处理 SQL 语句时,所有空格都被忽略。
SQL 语句可以写成一行,也可以分写为多行。
...
2023年2月27日 22:11 周一转载自https://github.com/Snailclimb/JavaGuide(添加小部分笔记)感谢作者!
主从复制原理

哨兵模式(简单)

哨兵模式详解
先配置主从模式,再配置哨兵模式
所有的哨兵 sentinel.conf 都是配置为监听master–> 192.168.14.101,如果主机宕机,sentinel.conf 中的配置也会自动更改为选举后的
Java客户端连接原理
客户端是和Sentinel来进行交互的,通过Sentinel来获取真正的Redis节点信息,然后来操作.实际工作时,Sentinel 内部维护了一个主题队列,用来保存Redis的节点信息,并实时更新,客户端订阅了这个主题,然后实时的去获取这个队列的Redis节点信息.
/**
代码相对比较简单
**/
//1.设置sentinel 各个节点集合
Set<String> sentinelSet = new HashSet<>();
sentinelSet.add("192.168.14.101:26379");
sentinelSet.add("192.168.14.102:26380");
sentinelSet.add("192.168.14.103:26381");
//2.设置jedispool 连接池配置文件
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10);
config.setMaxWaitMillis(1000);
//3.设置mastername,sentinelNode集合,配置文件,Redis登录密码
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster",sentinelSet,config,"123");
Jedis jedis = null;
try {
jedis = jedisSentinelPool.getResource();
//获取Redis中key=hello的值
String value = jedis.get("hello");
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(jedis != null){
jedis.close();
}
}

...