提交
This commit is contained in:
parent
1b346ebb99
commit
04ac094e12
@ -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
|
||||
|
||||
|
||||
@ -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 | 按年月哈希 | 是 | 是 | DATE,DATETIME |
|
||||
| YYYYDD | 按年月哈希 | 是 | 是 | DATE,DATETIME |
|
||||
| YYYYWEEK | 按年周哈希 | 是 | 是 | DATE,DATETIME |
|
||||
| HASH | 取模哈希 | 是 | 是 | 数值,字符串,如果不是,则转换成字符串 |
|
||||
| MM | 按月哈希 | 否 | 是 | DATE,DATETIME |
|
||||
| DD | 按日期哈希 | 否 | 是 | DATE,DATETIME |
|
||||
| MMDD | 按月日哈希 | 是 | 是 | DATE,DATETIME |
|
||||
| WEEK | 按周哈希 | 否 | 是 | DATE,DATETIME |
|
||||
| STR_HASH | 字符串哈希 | 是 | 是 | 字符串 |
|
||||
|
||||
#### 常用分片规则简介
|
||||
|
||||
##### MOD_HASH
|
||||
|
||||
[数据分片]hash形式的分片算法。如果分片键是字符串,会将字符串hash转换为数值类型。
|
||||
|
||||
1. 分库键和分表键相同:
|
||||
- 分表下标:分片值%(分库数量*分表数量)
|
||||
- 分库下标:分表下表/分库数量
|
||||
2. 分库键和分表键相同:
|
||||
- 分表下标:分片值%分表数量
|
||||
- 分库下标:分片值%分库数量
|
||||
|
||||
##### RIGHT_SHIFT
|
||||
|
||||
[数据分片]hash形式的分片算法。仅支持数值类型。
|
||||
分片值右移两位,按分片数量取余。
|
||||
|
||||
##### YYYYMM
|
||||
|
||||
[数值分片]hash形式的分片算法。仅用于分库。
|
||||
(YYYY*12+MM)%分库数量,MM为1–12。
|
||||
|
||||
##### MMDD
|
||||
|
||||
仅用于分表。仅DATE、DATETIME类型。
|
||||
一年之中第几天%分表数。tbpartitions不能超过366。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user