rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# 安装mysql-server
yum install mysql-community-server -y
# 启动数据库
systemctl restart mysqld
# 配置开机自启动
systemctl enable mysqld
速度很块,但是,包有先后顺序的依赖关系
速度很快,但是,需要有docker的技能
# 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyuncurl -sSL
# 重启docker
systemctl restart docker
# 配置开机自启动
systemctl enable docker
# 安装mysql并配置相关信息
docker run -itd --name mysql -p 3337:3306 -e MYSQL_ROOT_PASSOWORD=123456 mysql:5.7
通过 grep "password" /var/log/mysqld.log
可以找到密码,但是这个密码是高复杂度的密码,这个密码不好记忆
我们想要修改为低复杂度好记忆的密码
修改 mysql数据库的配置文件 /etc/my.cnf
[mysqld]
validate_password_policy=0 # 设置为 弱密码
validate_password=off # 关闭密码策略
character_set_server=utf8
init_connect='SET NAMES utf8'
重启动mysql: systemctl restart mysqld
进入mysql客户端 mysql -uroot -p
回车
# 修改密码
alter user 'root'@'localhost' identified by '123456';
# 赋权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;
# 退出
exit;
mysql的默认端口 3306
存储引擎 | 描述 |
---|---|
ARCHIVE | 用于数据存储的引擎,数据被插入后就不能再修改了,且不支持索引,行锁,占用磁盘少;常用语日志系统,大量的设备数据采集 |
CDV | 在存储数据时,会以逗号作为数据项之间的分隔符;常用语数据库的快速导出导入,表格转换为CSV |
BLACKHOLE | 会丢弃写操作,该操作会返回空内容 |
FEDERATED | 将数据存储在远程数据库中,用来访问远程表的存储引擎 |
InnoDB | 默认,5.5版本后新增,具备外键支持功能的事务处理引擎,事务优先,行锁,支持B树索引 |
MEMORY | 置于内存的表,速度快,但安全没保障,置于16M,不支持大数据存储类型,表锁;常用语等值查找热度较高的数据 |
MERGE/MRG_MYISAM | 用来管理由多个MyISAM表构成的表集合 |
MyISAM | 5.5版本之前默认引擎,主要是非事务处理存储引擎,性能优先,表锁,支持B树,哈希索引 |
NDB | Mysql集群专用存储引擎 |
建立好了表,表就会有多个字段,往里面写入数据。
索引分为主键索引(primary key)、唯一索引(unique index)、复合索引
SQL: create index index_name on table_name(col_name); alter table table_name add index index_name(col_name);
SQL:create unique index index_name on table_name(col_name)
SQL: create index index_name on table_name(col_1,col_2......)
建立了数据库和表之后,在/var/lib/mysql
路径下,就有数据库名称文件夹
mysql数据库使用InnoDB存储引擎,默认使用B+树索引
CREATE VIEW t_access_dataset_view AS SELECT *FROM t_access_dataset WHERE STATUS = "access";
(也可以指定具体字段,后面的查询的那个跟普通的sql语句写法一样的)下面我们对常用参数进行说明:
可以试着查看下(这里不建议前面加%
,这样性能不太好)
/etc/my.cnf
set global var_name=var_value;
/etc/my.cnf
,在mysqld下面然后修改,加上开启慢查询的语句,然后保存,重启数据库(systemctl restart mysqld;
)。或者我们可以修改数据库的配置文件set global variable slow_query_log=ON/OFF; set global variable long_query_time=0.2;进行设置/etc/my.cnf
修改。但是这边也不会调的过大,比如现在设置是151不够用,我们一般会设置为200,最多调到1000,要不然会导致内存消耗过多,效果也不大。调的时候可以参考innodb_open_file_limit
和open_file_limit
的数量。或者找运维和开发确认下参数 | 用法 |
---|---|
initialSize | 初始化连接数 |
maxActive | 连接池的最大连接数,0表示限制 |
maxIdle | 最大空闲连接,暂时不断开,随时待命 |
minIdle | 最小空闲连接 |
maxWait | 超时等待时间,毫秒;-1表示无限等待,直到超时 |
但是这块数据通常是开发写在代码里,我们拿不到,我们只能通过应用服务器和数据服务器之间的网络连接数有多少来进行判断,具体脚本如下:
配置文件
netstat -ano|grep 数据库端口 |grep ESTABLISHED |wc -l
这个命令,在数据库机器中执行 看数据库当前总共有多少的连接数
netstat -ano|grep 数据库端口 |grep 应用程序ip |grep ESTABLISHED |wc -l
这个命令,在数据库机器中执行后,就可以看到应用程序xxx与数据库建立连接数有多少
然后再找开发要上图的配置文件进行对比,看看配置文件的参数配置是否太小,需要适当进行调整
create view table_view as select xxx
1、我们从之前的慢查询日志里获取一个sql,比如这个:
2、sql前面加上explain,这样可以得到下图,我们就可以进行分析了
我们来对这些参数进行逐个分析
根据上面我们可以试着分析下,这里key为空,表示没有索引,我们可以加个索引,这边是根据mobile进行搜索,我们可以把mobile设为索引
1、下载mysqld_exporter,上传到mysql服务器,然后解压缩
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
2、配置my.cnf文件:/etc/my.cnf
保存了以后记得重启数据库: systemctl restart mysqld
3、启动mysqld_exporter: 进入该文件夹,然后输入 ./mysqld_exporter --config.my-cnf=/etc/my.cnf
接着我们可以浏览器访问:ip:9104
4、启动grafana: systemctl restart grafana
5、配置Prometheus.yml,添加上线这段
mysqld_exporter端口:9104
./prometheus
启动
- job_name: 'mysqld_exporter'
static_configs:
- targets: ['ip:9104']
主从同步、读写分离====实现 热备份(同时), 异步
分表分区
主从同步、读写分离
yum install -y yum-utils device-mapper-persistent-data lvm2
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 开机自启动、重启docker
systemctl enable docker
systemctl restart docker
# 下载镜像
docker pull daocloud.io/library/mysql:5.7.7
docker run -itd --name mysq577_master -p 3336:3306 -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.7
docker run -itd --name mysq577_slave -p 3346:3306 -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.7
定义主数据库、从数据库
找到数据库的配置文件,修改配置文件
配置文件路径: /etc/mysql/my.cnf
修改
# 从容器中,拷贝文件到宿主机
docker cp mysq577_master:/etc/mysql/my.cnf $PWD
# 修改配置文件
[mysqld]
server-id = 100
log-bin = mysql-bin
# server-id值得大小来区分主、从数据库,越小的为主数据库,越大的为从数据
# 把修改后的,拷贝到容器中
docker cp my.cnf mysq577_master:/etc/mysql/my.cnf
# 重启动容器
两个数据库之间要建立关联关系
# 从数据库中执行
CHANGE MASTER TO
MASTER_HOST='192.168.2.42',
MASTER_PORT=3336,
MASTER_USER='root',
MASTER_PASSWORD='123456';
start slave;
show slave status; -- 查看slave的状态
安装完成以后,我们就可以看到主数据库这里有个mysql-bin文件,这是一个二进制文件
从数据库也有
create table 表名(id,col1,col2.....) partition by range(id)
(partition less_10000 **values** **less** **than**(10000) **data** directory **=** '/opt/less_1w/' **index** directory **=** '/opt/less_1w',
partition less_20000 **values** **less** **than**(20000) **data** directory **=** '/home/less_2w/' **index** directory **=** '/home/less_2w',
......)
yum install gcc-c++ make -y
# 升级gcc
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 此时,通过gcc -v 看到gcc的版本应该是在9以上
$ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
$ tar xzf redis-6.0.8.tar.gz
$ cd redis-6.0.8
$ make
# 如果想安装到指定路径: make PREFIX=/usr/local/redis install 指定安装到/usr/local/redis路径
# 启动
$ src/redis-server
进入安装路径中 src/redis-cli
进入客户端模式
config get *
# 获取redis的所有配置信息
redis-benchmark -n 10000 -q
选项 | 描述 | 默认值 | 选择 | 描述 | 默认值 |
---|---|---|---|---|---|
-h | 指定服务器主机名 | 127.0.0.1 | -r | set\get\incr随机key | |
-p | 指定端口 | 6379 | -P | 通过管道传输请求 | 1 |
-s | 指定服务器socket | -q | 强制退出redis | ||
-c | 指定并发连接数 | 50 | –csv | 以csv格式输出 | |
-n | 指定求求书 | 10000 | -l | 生成循环,永久执行 | |
-d | 以字节指定set\get大小 | 2 | -t | 仅运行以逗号分隔的测试命令列表 | |
-k | 1 keep-alive 0 reconnect | 1 | -l | idle模式 |