This commit is contained in:
YUN-PC5\user 2024-01-23 17:35:17 +08:00
parent 1b346ebb99
commit 04ac094e12
2 changed files with 423 additions and 3 deletions

View File

@ -382,6 +382,14 @@ echo 'Hello, World!'
`#!``/bin/bash` 之间的空格无关紧要。你也可以使用 `#!/bin/bash`
## yum
### 改阿里源
```shell
yum install -y wget && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache
```
## 安装MySQL
有些Linux会自带MariaDB数据库所以需要先卸载
@ -597,7 +605,7 @@ error: Failed dependencies:
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
libssl.so.10()(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by mysql-community-libs-compat-5.7.41-1.el7.x86_64
dnf install https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm
dnf install -y https://repo.almalinux.org/almalinux/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.41-1.el7.x86_64.rpm
# 如果出现以下错误
error: Failed dependencies:
@ -617,6 +625,21 @@ rpm -ivh mysql-community-server-5.7.41-1.el7.x86_64.rpm
/usr/lib/tmpfiles.d/mysql.conf:23: Line references path below legacy directory /var/run/, updating /var/run/mysqld → /run/mysqld; please update the tmpfiles.d/ drop-in file accordingly.
vim /usr/lib/tmpfiles.d/mysql.conf
# 将/var/run/mysqld 改为 /run/mysqld
# 如果出现以下提示
error: Failed dependencies:
libcrypt.so.1()(64bit) is needed by mysql-community-server-5.7.41-1.el7.x86_64
libcrypt.so.1(GLIBC_2.2.5)(64bit) is needed by mysql-community-server-5.7.41-1.el7.x86_64
dnf install -y libxcrypt-compat
# 如果出现以下提示
error: Failed dependencies:
/usr/bin/perl is needed by mysql-community-server-5.7.41-1.el7.x86_64
perl(Getopt::Long) is needed by mysql-community-server-5.7.41-1.el7.x86_64
perl(strict) is needed by mysql-community-server-5.7.41-1.el7.x86_64
dnf install -y perl.x86_64
# 如果出现以下提示
error: Failed dependencies:
net-tools is needed by mysql-community-server-5.7.41-1.el7.x86_64
dnf install net-tools -y
# 再次执行 rpm -ivh mysql-community-server-5.7.41-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-5.7.41-1.el7.x86_64.rpm

View File

@ -165,7 +165,7 @@ mysqldump -uroot -p -B test > test.sql
11. 安装数据库
```powershell
mysqld --install
mysqld --install <服务名>
```
12. 启动服务
@ -196,7 +196,7 @@ mysqldump -uroot -p -B test > test.sql
mysqld --remove
```
# Linux 安装MySQL客户端
# Linux 安装MySQL
## 安装
@ -258,6 +258,56 @@ mysqldump -uroot -p -B test > test.sql
# Linux 卸载MySQL
## 二进制方式
```shell
rpm -qa | grep -i mysql
# 如下所示
mysql-community-release-el7-5.noarch
mysql-community-libs-5.6.51-2.el7.x86_64
mysql-community-client-5.6.51-2.el7.x86_64
mysql-community-server-5.6.51-2.el7.x86_64
mysql-community-common-5.6.51-2.el7.x86_64
systemctl stop mysqld
rpm -ev mysql-community-release-el7-5.noarch
rpm -ev mysql-community-libs-5.6.51-2.el7.x86_64
rpm -ev mysql-community-client-5.6.51-2.el7.x86_64
rpm -ev mysql-community-server-5.6.51-2.el7.x86_64
rpm -ev mysql-community-common-5.6.51-2.el7.x86_64
find / -name mysql
# 如下所示
/var/lib/mysql
/var/lib/mysql/mysql
/usr/local/mysql
/usr/lib64/mysql
/usr/share/mysql
/usr/bin/mysql
/etc/logrotate.d/mysql
/etc/selinux/targeted/active/modules/100/mysql
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/local/mysql
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql
rm -rf /usr/bin/mysql
rm -rf /etc/logrotate.d/mysql
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /etc/my.cnf
rpm -qa | grep -i mysql
```
# MySQL 客户端
执行脚本
@ -268,6 +318,8 @@ source <脚本绝对路径>
# 用户和权限
## 用户各项权限
```mysql
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT Usage ON *.* TO 'username'@'%';
@ -303,6 +355,20 @@ update user set host = '127.0.0.1' where user = 'root' and host = '%';
flush privileges;
```
## 修改root密码
```mysql
alter user 'root'@'localhost' IDENTIFIED BY '123456';
```
## 允许远程登录
```mysql
grant all privileges on *.* to root@'%' identified by "123456";
```
# 存储过程和函数
## 函数
@ -318,3 +384,334 @@ select @@log_bin_trust_function_creators;
set GLOBAL log_bin_trust_function_creators=1;
```
# 主从搭建
## 主节点配置
1. 修改/etc/my.cnf文件并重启服务
```conf
[mysqld]
server-id=10 #服务器id (主从必须不一样)
log-bin=/var/lib/mysql/master10-bin #打开日志(主机需要打开)
binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
```
注意log-bin等存储路径的配置其父路径的属主和组必须是是mysql且一般权限设置为777。
如果更改了mysql的存储目录建议参考默认配置的目录将新目录的属主和权限也做相应更改
2. 创建从节点访问用户mysql上执行
```mysql
CREATE USER 'slave'@'10.181.110.11' IDENTIFIED BY 'slave.8888';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.181.110.11';
select user,host from mysql.user;
```
3. 查看主节点状态mysql上执行
```mysql
systemctl restart mysql #重启服务
show master status
```
## 从节点配置
1. 修改/etc/my.cnf文件并重启服务
```conf
server-id=11
relay-log=relay-bin
read-only=1
replicate-ignore-db=mysql # 不复制的库
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
```
2. 从库关联主库mysql上执行
```mysql
CHANGE MASTER TO MASTER_HOST='10.0.2.3',
MASTER_USER='slave',
MASTER_PASSWORD='slave.123456',
MASTER_LOG_FILE='master10-bin.000001',
MASTER_LOG_POS=154;
```
3. 检查状态mysql上执行
```mysql
start slave;
show slave status\G
```
注意:# master_log_file 和 master_log_pos值为主库上面执行show master status得到
如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes说明配置成功
\# 如果又更改了其他配置重启服务后导致上面两个参数出现NO可以重新执行步骤 2
## 同步故障
### Slave_SQL_Running:No
**原因是主机和从机里的数据不一致**
### Slave_IO_Running:Connecting
**是因为从机使用你配置的主机信息没有登陆到主机里面!修改(从机里面)**
```mysql
stop slave;
change master to master_host="192.168.106.133",master_port=3307,master_user="rep",master_password="123456",master_log_file="master.000001",master_log_pos=745;
start slave;
```
### Slave_IO_Running:No
就是server-id 没有配置成功的原因需要重新修改配置文件复制配置文件到容器里面然后重启就ok
# MyCat 2
## 安装
首先去**Gitee**代码仓库**clone**源码
```shell
git clone https://gitee.com/MycatOne/Mycat2.git
```
打开项目注意jdk版本需要用**oracle jdk1.8**,否则没有**javafx**包
Maven下载依赖
修改父级`pom.xml`文件中的`<repository>`标签,http后加s
```xml
<repository>
<id>mvnrepository</id>
<name>mvnrepository</name>
<url>https://www.mvnrepository.com/</url>
</repository>
```
执行`maven clean install -DskipTests`
编译后的包位于根目录下的`mycat2\target\mycat2-1.22-release-jar-with-dependencies.jar`
修改根目录下的`start.bat`批处理文件
```bat
"C:\Program Files\Java\jre1.8.0_202\bin\java" -Dfile.encoding=UTF-8 -DMYCAT_HOME=C:\Users\user\Downloads\Mycat2-v1.22-2020-6-25\mycat2\src\main\resources -jar C:\Users\user\Downloads\Mycat2-v1.22-2020-6-25\mycat2\target\mycat2-1.22-release-jar-with-dependencies.jar
@REM java -Dfile.encoding=UTF-8 -DMYCAT_HOME=D:\newgit\f\mycat2\src\main\resources -jar
@REM D:\newgit\f\mycat2\target\mycat2-0.5-SNAPSHOP-20200110152640-single.jar
```
根据项目目录进行修改
## 配置
配置目录为根目录下的`mycat2\src\main\resources`
### datasources
```json
{
"dbType": "mysql",
"idleTimeout": 60000,
"initSqls": [],
"initSqlsGetConnection": true,
"instanceType": "READ_WRITE",
"maxCon": 1000,
"maxConnectTimeout": 30000,
"maxRetryCount": 5,
"minCon": 1,
"name": "prototypeDs",
"password": "123456",
"type": "JDBC",
"url": "jdbc:mysql://localhost3306?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user": "root",
"weight": 0
}
```
## 启动
运行根目录下的`start.bat`
## 命令
### 查看连接源
```mysql
/*+ mycat:showDataSources{} */
```
### 添加数据源
```mysql
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"ds0",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://192.168.6.158:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;
```
### 查看集群
```mysql
/*+ mycat:showClusters{} */
```
### 添加集群
```mysql
/*+ mycat:createCluster{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"ds0" //主节点
],
"maxCon":2000,
"name":"c0",
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH"
} */;
```
### 创建库
```mysql
/*+ mycat:createSchema{
"customTables":{},
"globalTables":{},
"normalTables":{},
"schemaName":"xxf_sharding",
"shardingTables":{}
} */;
```
### 创建表
```mysql
/*+ mycat:createTable{
"schemaName":"xxf_sharding",
"tableName":"xxf_user",
"shardingTable":{
"createTableSQL":"CREATE TABLE `xxf_user` (
`id` BIGINT(20) NOT NULL COMMENT '用户ID',
`user_name` VARCHAR(30) NULL DEFAULT NULL COMMENT '用户姓名',
`email` VARCHAR(50) NULL DEFAULT NULL COMMENT '用户邮箱',
`phone` VARCHAR(11) NULL DEFAULT NULL COMMENT '手机号码',
`sex` CHAR(1) NULL DEFAULT NULL COMMENT '用户性别',
PRIMARY KEY (`id`) USING BTREE
) COMMENT='笑小枫-用户信息表' COLLATE='utf8_general_ci' ENGINE=InnoDB;",
"function":{
"properties":{
"mappingFormat": "c${targetIndex}/xxf_sharding/xxf_user_${tableIndex}",
"dbNum":2, //分库数量
"tableNum":3, //分表数量
"tableMethod":"mod_hash(id)", //分表分片函数
"storeNum":2, //实际存储节点数量
"dbMethod":"mod_hash(id)" //分库分片函数
}
},
"partition":{
}
}
} */;
```
## 分库分表
### 原理
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面
### 垂直切分:分库
系统被拆分为用户、订单、支付多个模块,部署在不同机器上。
分库的原则:由于跨库不能关联查询,所以有紧密关联的表应当放在一个数据库中,相互没有关联的表可以分不到不同的数据库。
### 水平切分:分表
### 常用的分片规则
1. 分片算法简介
Mycat2支持常用的自动HASH型分片算法也兼容1.6的内置的(cobar)分片算法。
HASH型分片算法默认要求集群名字以c为前缀数字为后缀`c0就是分片表第一个节点c1就是第二个节点`,该命名规则允许用户手动改变。
2. mycat2与1.X版本区别
mycat2的hash型分片算法多基于MOD_HASH对应Java的%取余运算。
mycat2的hash型分片算法对于值的处理总是把分片值转换到列属性的数据类型再做计算。
mycat2的hash型分片算法适用于等价条件查询。
3. 分片规则与适用性
4. | 分片算法 | 描述 | 分库 | 分表 | 数值类型 |
| ----------- | -------------- | ---- | ---- | -------------------------------------- |
| MOD_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
| UNI_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
| RIGHT_SHIFT | 右移哈希 | 是 | 是 | 数值 |
| RANGE_HASH | 两字段其一取模 | 是 | 是 | 数值,字符串 |
| YYYYMM | 按年月哈希 | 是 | 是 | DATEDATETIME |
| YYYYDD | 按年月哈希 | 是 | 是 | DATEDATETIME |
| YYYYWEEK | 按年周哈希 | 是 | 是 | DATEDATETIME |
| HASH | 取模哈希 | 是 | 是 | 数值,字符串,如果不是,则转换成字符串 |
| MM | 按月哈希 | 否 | 是 | DATEDATETIME |
| DD | 按日期哈希 | 否 | 是 | DATEDATETIME |
| MMDD | 按月日哈希 | 是 | 是 | DATEDATETIME |
| WEEK | 按周哈希 | 否 | 是 | DATEDATETIME |
| STR_HASH | 字符串哈希 | 是 | 是 | 字符串 |
#### 常用分片规则简介
##### MOD_HASH
[数据分片]hash形式的分片算法。如果分片键是字符串会将字符串hash转换为数值类型。
1. 分库键和分表键相同:
- 分表下标:分片值%(分库数量*分表数量)
- 分库下标:分表下表/分库数量
2. 分库键和分表键相同:
- 分表下标:分片值%分表数量
- 分库下标:分片值%分库数量
##### RIGHT_SHIFT
[数据分片]hash形式的分片算法。仅支持数值类型。
分片值右移两位,按分片数量取余。
##### YYYYMM
[数值分片]hash形式的分片算法。仅用于分库。
(YYYY*12+MM)%分库数量MM为112。
##### MMDD
仅用于分表。仅DATE、DATETIME类型。
一年之中第几天%分表数。tbpartitions不能超过366。