北青永恒 - 数据库
type: channel
link: http://kococ.cn/category/DB
description: 关于数据的一些资源及文档，包含关系型数据库，非关系型数据库等
items: MongoDB数据库的导入导出和备份恢复
items: MYSQL命令行输入密码警告问题"mysql: [Warning]"解决方案
items: Influxdb常用命令
items: Telegraf+InfluxDB+Grafana+Docker搭建服务器监控平台
items: ES-Elasticsearch数据库备份恢复脚本
items: Redis-5.x知识体系梳理
items: MySQL高可用晋升

MongoDB数据库的导入导出和备份恢复
type: item
date: 2022-07-21T10:34:12+08:00
description: MongoDB数据导入与导出导出工具：mongoexport概念：​ mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项，也可以根据指定的条件导出数据。语法：mongoexport -d dbname -c collectionname -o file --type json/csv -f field ​ 参数说明： ​ -d ：数据库名 ​ -c ：collection名 ​ -o ：输出的文件名 ​ --type ： 输出的格式，默认为json ​ -f ：输出的字段，如果-type为csv，则需要加上-f "字段名" 示例： ​ sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json -f "_id,user_id,user_name,age,status"数据导入：mongoimport语法： mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field ​ 参数说明： ​ -d ：数据库名 ​ -c ：collection名 ​ --type ：导入的格式默认json ​ -f ：导入的字段名 ​ --headerline ：如果导入的格式是csv，则可以使用第一行的标题作为导入的字段 ​ --file ：要导入的文件 示例： ​ sudo mongoimport -d mongotest -c users --file /home/mongodump/articles.json --type jsonMongoDB备份与恢复MongoDB数据库备份语法： mongodump -h dbhost -d dbname -o dbdirectory ​ 参数说明： ​ -h： MongDB所在服务器地址，例如：127.0.0.1，当然也可以指定端口号：127.0.0.1:27017 ​ -d： 需要备份的数据库实例，例如：test ​ -o： 备份的数据存放位置，例如：/home/mongodump/，当然该目录需要提前建立，这个目录里面存放该数据库实例的备份数据。 2、实例： ​ sudo rm -rf /home/momgodump/ ​ sudo mkdir -p /home/momgodump ​ sudo mongodump -h 192.168.17.129:27017 -d itcast -o /home/mongodump/ ​ \-MongoDB数据库恢复语法： mongorestore -h dbhost -d dbname --dir dbdirectory ​ 参数或名： ​ -h： MongoDB所在服务器地址 ​ -d： 需要恢复的数据库实例，例如：test，当然这个名称也可以和备份时候的不一样，比如test2 ​ --dir： 备份数据所在位置，例如：/home/mongodump/itcast/ ​ --drop： 恢复的时候，先删除当前数据，然后恢复备份的数据。就是说，恢复后，备份后添加修改的数据都会被删除，慎用！ 2、实例： mongorestore -h 192.168.17.129:27017 -d itcast_restore --dir /home/mongodump/itcast/

MYSQL命令行输入密码警告问题"mysql: [Warning]"解决方案
type: item
date: 2021-01-20T10:07:11+08:00
description: 1.1 问题显示[root@localhost ~]# mysql -uroot -p1234567 mysql: [Warning] Using a password on the command line interface can be insecure.1.2 解决方法1.2.1 方法一1、将密码写入到主配置文件中[root@localhost ~]# vim /etc/my.cnf [mysqldump] user=root password=1234567 [mysql] user=root password=12345672、直接使用命令登录，再也无需输入账号密码[root@localhost ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.7.18-log Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 1.2.2 方法二1、自动配置MYSQL密文密码该操作会在用户家目录下生成一个隐藏文件".mylogin.cnf"，里面记录了MYSQL的密文的密码，只要配置了以后，我们也是直接使用命令登录，再也无需输入账号密码了，如果你想取消，删除此文件即可。[root@localhost ~]# mysql_config_editor set --user=root --host=localhost --port=3306 --password Enter password: 输入密码2、直接使用命令登录，再也无需输入账号密码[root@localhost ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.7.18-log Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved Oracle is a registered trademark of Oracle Corporation and/or it affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 1.2.3 方法三1、直接使用命令登录，屏蔽错误信息由于告警信息是标准错误，我们可以将标准错误的输出信息输出为空。[root@localhost ~]# mysql -uroot -p1234567 2>/dev/null Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.7.18-log Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input st…

Influxdb常用命令
type: item
date: 2021-01-13T14:35:49+08:00
description: 基于新版本 v1.6.2，centOSCLI使用HTTPAPI通过8086（默认的，可以在配置文件中修改）端口与influxDB直接交互，influx命令在所有influxDB的包中都默认包含注意：在InfluxDB当中，并没有表（table）这个概念，取而代之的是MEASUREMENTS，MEASUREMENTS的功能与传统数据库中的表一致，因此我们也可以将MEASUREMENTS称为InfluxDB中的表启动influxinflux命令在/usr/bin/influxCODE[root@test25 ~]# find / -name influx/usr/bin/influx[root@test25 ~]# 启动influxdservice influxdb startinfluxdCODE[root@test25 ~]# service influxdb start[root@test25 ~]# influx参数CODE[root@test25 ~]# influx --helpUsage of influx: -version Display the version and exit.-host 'host name' Host to connect to.-port 'port #' Port to connect to.-socket 'unix domain socket' Unix socket to connect to.-database 'database name' Database to connect to the server.-password 'password' Password to connect to the server. Leaving blank will prompt for password (--password '').-username 'username' Username to connect to the server.-ssl Use https for requests.-unsafeSsl Set this when connecting to the cluster using https and not use SSL verification.-execute 'command' Execute command and quit.-format 'json|csv|column' Format specifies the format of the server responses: json, csv, or column.-precision 'rfc3339|h|m|s|ms|u|ns' Precision specifies the format of the timestamp: rfc3339, h, m, s, ms, u or ns.-consistency 'any|one|quorum|all' Set write consistency level: any, one, quorum, or all-pretty Turns on pretty print for the json format.-import Import a previous database export from file-pps How many points per second the import will allow. By default it is zero and will not throttle importing.-path Path to file to import-compressed Set to true if the import file is compressed Examples:# Use influx in a non-interactive mode to query the database "metrics" and pretty print json: $ influx -database 'metrics' -execute 'select * from cpu' -format 'json' -pretty # Connect to a specific database on startup and set database context: $ influx -database 'metrics' -host 'localhost' -port '8086'[root@test25 ~]#参数 描述-version 显示版本号并退出-host ‘host name’ 连接到远程主机-port ‘…

Telegraf+InfluxDB+Grafana+Docker搭建服务器监控平台
type: item
date: 2021-01-13T14:02:00+08:00
description: Telegraf+InfluxDB+Grafana+Docker搭建服务器监控平台写在前面因为监控Docker的事情头疼了很久,终于找到了这个很适合业务需求的方案.(我知道你们肯定想说,那么多监控docker的方案都不能使用吗?答案是:可能会使用,但我是FW)要搭建服务器监控平台，总共分三步：第一步，数据采集；第二步，数据存储；第三步，数据可视化。其中，数据存储连接数据采集与数据可视化，是非常重要的中间环节。本文选择了时序数据库InfluxDB。InfluxDB是一款优秀的时间序列数据库，适合存储设备性能、日志、物联网传感器等带时间戳的数据。能轻松处理高写入和高查询负载（数据采集与数据可视化非常常见的场景）。具体介绍请参阅InfluxDB官方文档：https://docs.influxdata.com/influxdb/。数据采集方面有非常多的选择，你甚至可以自己开发一个。这里为了方便直接选择Influxdata官方出品的采集工具Telegraf ，毕竟是全家桶产品。Telegraf详情介绍：https://docs.influxdata.com/telegraf。可视化方面选择了超高颜值、功能强大的开源可视化利器Gafana，具体颜值有多高，功能有多强大，本文就不再赘述了，直接上官网：https://grafana.com/grafana/dashboards。原博主甚至还给Grafana做了一下中文的本地汉化：https://github.com/WangHL0927/grafana-chinese。Grafana从早期版本就对InfluxDB有着完善的支持。最终平台的方案：Telegraf(数据采集)+InfluxDB（数据存储）+Grafana（数据可视化）==>Docker(监控Docker相关业务)。设计部署InfluxDB与Grafana直接使用官方容器进行部署，方便快捷。服务器需先安装Docker，具体步骤参考本站文章CentOS7安装Docker。当然你也可以选择我下面给出的一键安装Docker.适用范围Centos 7.2-7.8,需提前准备epel源curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun1 部署InfluxDBdocker pull influxdb:1.6.5 docker run -d -p 8086:8086 --name=influxdb influxdb:1.6.5以上命令dcoker会自动从仓库下载最新版本的influxdb镜像，后台运行一个名为influxdb的容器并映射主机8086端口到容器8086端口。若想将数据存储到宿主机而非容器内，可使用以下命令启动挂载本地目录到容器内。# $pwd为当前工作目录，可替换为其它宿主机目录 docker run -d -p 8086:8086 -v $PWD:/var/lib/influxdb --name=influxdb influxdb启动InfluxDB容器后，通过http接口访问进行测试。curl -G http://localhost:8086/query --data-urlencode "q=show databases"若influxdb运行正常，则会返回如下结果：# 链接查询参数为show databases 数据库会返回所有的数据库名，新安装的influxdb默认只有一个"_internal" # 数据库。 {"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"],["telegraf"]]}]}]}influxdb容器管理# 启动 docker start influxdb # 停止 docker stop influxdb # 重启 docker restart influxdb2 安装Telegraf下载安装Telegraf为了方便配置调试，选择直接在宿主机安装。# 以CentOS为例 # 下载Telegraf wget https://dl.influxdata.com/telegraf/releases/telegraf-1.6.3-1.x86_64.rpm # 安装Telegraf sudo yum localinstall telegraf-1.6.3-1.x86_64.rpm配置Telegraf用户可修改Telegraf配置文件进行采集项的配置。配置文件默认位于/etc/telegraf/telegraf.conf。在本文方案中，需要配置数据输出项（输出到influxdb），其…

ES-Elasticsearch数据库备份恢复脚本
type: item
date: 2021-01-13T11:50:00+08:00
description: 1.备份数据1.1 创建备份仓库$ curl -u elastic:123456 -XPOST '192.168.1.1:9200/_snapshot/hsbc_backup' -H 'Content-Type: application/json' -d '{ "type": "fs", "settings": { "location": "/alidata1/admin/backup/elasticsearch", "compress": true, "chunk_size": "1g", "max_snapshot_bytes_per_sec": "50m", "max_restore_bytes_per_sec": "50m"}}' 11.2 备份脚本$ cat /alidata1/admin/scripts/elasticsearch/es_bak_del.sh #!/bin/bash ## define vars es_url="http://192.168.1.1:9200" es_bak_repo="hsbc_backup" es_user="elastic" es_pass="123456" es_bak_date=`date +'%Y-%m-%d-%H'` echo -e "\n =========== $es_bak_date ============" ## bak curl -u ${es_user}:${es_pass} -XPUT "${es_url}/_snapshot/${es_bak_repo}/es_bak_${es_bak_date}?wait_for_completion=true" echo "" ##sleep sleep 10 ##del 最后的60: 定时任务 每4小时备份一次 一天备份6次 数据保留10天 es_del_snapshots=`curl -u ${es_user}:${es_pass} -s -XGET "${es_url}/_snapshot/${es_bak_repo}/_all" | python -m json.tool| python -c 'import json; import sys; input = sys.stdin.read(); result = [x["snapshot"] for x in json.loads(input)["snapshots"]]; print("\n".join(result[:-60]));'` for es_del_snapshot in ${es_del_snapshots}; do echo "===========$es_del_snapshot del" curl -u ${es_user}:${es_pass} -s -XDELETE "${es_url}/_snapshot/${es_bak_repo}/${es_del_snapshot}" echo "" done1.3 创建定时任务$ crontab -e 0 */4 * ** /bin/bash /alidata1/admin/scripts/elasticsearch/es_bak_del.sh >> /alidata1/admin/logs/crontab/es_bak/crontab.log 2>&1 122.数据还原目的：将某一个备份的文件还原到192.168.1.1$ cat es_restore.sh #!/bin/bash set -e ## define vars es_url="http://192.168.1.1:9200" es_bak_repo="hsbc_backup" es_restore_snapshots="es_bak_20200811" es_user="elastic" es_pass="123456" ##(1)获取备份文件中存在的索引 es_get_snapshots_index=`curl -u ${es_user}:${es_pass} -s -XGET "${es_url}/_snapshot/${es_bak_repo}/${es_restore_snapshots}" | python -m json.tool| python -c 'import json; import sys; input = sys.stdin.read(); result=json.loads(input); indices = result["snapshots"][0]["indices"]; sys.stdout.write(" ".join([i for i in indices]));'` ##(2)将…

Redis-5.x知识体系梳理
type: item
date: 2021-01-01T13:10:00+08:00
description: Redis-5.x第1章 关系型与非关系型CODE 关系型： mysql oracle 非关系型：redis mongo ES 第2章 Redis重要特性SWIFT 1.速度快 c语言写的 代码优雅 单线程架构 2.支持多种数据结构 字符串，哈希，列表，集合，有序集合，地理位置 3.丰富的功能 天然计数器 健过期功能 消息队列 4.支持客户端语言多 php,java,python 5.数据持久化 所有的数据都运行在内存中 支持2种格式持久化数据AOF RDB AOF&RDB 6.自带多种高可用架构 主从 哨兵 集群第3章 redis应用场景CODE 1.缓存-键过期时间 把session会话存在redis,过期删除 缓存用户信息，缓存Mysql部分数据，用户先访问redis，redis没有再访问mysql，然后回写给redis 商城优惠卷过期时间 2.排行榜-列表&有序集合 热度/点击数排行榜 直播间礼物积分排行 3.计数器-天然支持计数器 帖子浏览数 视频播放数 评论数 点赞/踩 4.社交网络-集合 粉丝 共同好友 兴趣爱好 标签 5.消息队列-发布订阅 配合ELK缓存收集来的日志第4章 Redis安装部署1.redis官网CPP https://redis.io/2.版本选择CSS 2.x very old 3.x redis-cluster 4.x 混合持久化 5.x 新增加了流处理类型 最新稳定版 3.规划目录KOTLIN /data/soft 下载目录 /opt/redis_6379/{conf,logs,pid} 安装目录,日志目录,pid目录,配置目录 /data/redis_6379/ 数据目录4.安装命令GO mkdir /data/soft -p cd /data/soft wget http://download.redis.io/releases/redis-5.0.7.tar.gz tar xf redis-5.0.7.tar.gz -C /opt/ ln -s /opt/redis-5.0.7 /opt/redis cd /opt/redis make make install 5.配置文件BASH mkdir -p /opt/redis_6379/{conf,pid,logs} mkdir -p /data/redis_6379 cat >/opt/redis_6379/conf/redis_6379.conf<< EOF daemonize yes bind 127.0.0.1 10.0.0.51 port 6379 pidfile /opt/redis_6379/pid/redis_6379.pid logfile /opt/redis_6379/logs/redis_6379.log EOF6.启动命令CODE redis-server /opt/redis_6379/conf/redis_6379.conf7.检查RUBY ps -ef|grep redis netstat -lntup|grep 63798.连接redis终端CSS [root@db01 ~]# redis-cli 127.0.0.1:6379> 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379>9.关闭命令BASH kill pkill redis-cli >SHUTDOWN - redis-cli shutdown10.system启动配置CSHARP groupadd -g 1000 redis useradd -u 1000 -g 1000 -M -s /sbin/nologin chown -R redis:redis /data/redis* chown -R redis:redis /opt/redis* cat >/usr/lib/systemd/system/redis.service<<EOF [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/redis /opt/redis_6379/conf/redis_6379.conf --supervised systemd ExecStop=/usr/local/bin/redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 637…

MySQL高可用晋升
type: item
date: 2019-02-05T23:54:00+08:00
description: 企业高可用性标准全年无故障率(非计划内故障停机)99.9% ----> 0.001*365*24*60=525.6 min 99.99% ----> 0.0001*365*24*60=52.56 min 99.999% ----> 0.0001*365*24*60=5.256 min 高可用架构方案负载均衡:有一定的高可用性 LVS Nginx 主备系统:有高可用性,但是需要切换,是单活的架构 KA , MHA, MMM 真正高可用(多活系统): NDB Cluster Oracle RAC Sysbase cluster , InnoDB Cluster（MGR）,PXC , MGC 主从复制简介1.1. 基于二进制日志复制的 1.2. 主库的修改操作会记录二进制日志 1.3. 从库会请求新的二进制日志并回放,最终达到主从数据同步 1.4. 主从复制核心功能: 辅助备份,处理物理损坏 扩展新型的架构:高可用,高性能,分布式架构等 主从复制前提(搭建主从的过程)2.1 两台以上mysql实例 ,server_id,server_uuid不同 2.2 主库开启二进制日志 2.3 专用的复制用户 2.4 保证主从开启之前的某个时间点,从库数据是和主库一致(补课) 2.5 告知从库,复制user,passwd,IP port,以及复制起点(change master to) 2.6 线程(三个):Dump thread IO thread SQL thread 开启(start slave) 主从复制搭建(Classic replication)清理主库数据rm -rf /data/3307/data/* 重新初始化3307mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/3307/data 修改my.cnf ,开启二进制日志功能[root@db01 3307]# vim /data/3307/my.cnf log_bin=/data/3307/data/mysql-bin 启动所有节点[root@db01 3307]# systemctl start mysqld3307 [root@db01 3307]# systemctl start mysqld3308 [root@db01 3307]# systemctl start mysqld3309 [root@db01 3307]# ps -ef |grep mysqld mysql 3684 1 4 09:59 ? 00:00:00 /app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf mysql 3719 1 7 09:59 ? 00:00:00 /app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf mysql 3754 1 8 09:59 ? 00:00:00 /app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf [root@db01 3307]# mysql -S /data/3307/mysql.sock -e "select @@server_id" [root@db01 3307]# mysql -S /data/3308/mysql.sock -e "select @@server_id" [root@db01 3307]# mysql -S /data/3309/mysql.sock -e "select @@server_id" 主库中创建复制用户[root@db01 3307]# mysql -S /data/3307/mysql.sock db01 [(none)]>grant replication slave on *.* to repl@'10.0.0.%' identified by '123'; db01 [(none)]>select user,host from mysql.user; 备份主库并恢复到从库[root@db01 3307]# mysqldump -S /data/3307/mysql.sock -A --master-data=2 --single-transaction -R --triggers >/backup/full.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=653; [root@db01 3307]# mysql -S /data/…