• docker安装mysql、clickhouse、oracle等各种数据库汇总


    1:docker 安装mongo数据库并使用

    官网:https://www.mongodb.com/docs/manual/
    mongo shell教程1:http://c.biancheng.net/mongodb2/connection.html
    安装1 :https://www.zhihu.com/question/54602953/answer/3047452434?utm_id=0
    安装2:https://www.duidaima.com/Group/Topic/ArchitecturedDesign/9182
    使用驱动进行java开发:https://mongodb.github.io/mongo-java-driver
    https://www.mongodb.com/docs/drivers/java/sync/v4.5/fundamentals/connection/
    在这里插入图片描述

    2:docker 安装oracle数据库并使用

    3:docker 安装达梦数据库并使用

    安装:https://zhuanlan.zhihu.com/p/615526878
    连接:可以使用dbeaver连接dm,不用专门下载dm的管理工具

    4:docker 安装hbase数据库并使用

    安装:http://m.hangge.com/news/cache/detail_3354.html#google_vignette
    必须在容器所在宿主机的/etc/hosts配置文件中加入配置。否则用程序连接hbase会报:java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)
    解决:
    1:排查防火墙问题
    2:在容器所在宿主机的/etc/hosts配置文件中加入配置

    hbase部署服务器ip docker hbase的容器id
    
    • 1

    完毕后重启程序

    5:docker 安装神通数据库并使用

    官网:http://shentongdata.cn/index.php/download/list-27
    安装:https://blog.csdn.net/weixin_46603727/article/details/131300046
    百度网盘链接:https://pan.baidu.com/s/1-W_tuGk4waewNhr6C8Z00g
    提取码:9572
    非docker安装:https://blog.csdn.net/KeyarchOS/article/details/132186565

    6:docker 安装mysql8数据库并使用

    本次版本选择mysql:8.0.21,mysql5.x版本会有各种不稳定问题。部署java程序时需要选择合适的JDK8以上版本

    6.1:部署

    1、拉取镜像:docker pull mysql:8.0.21

    2、创建容器并启动
    物理机挂载的目录需提前完成创建mkdir -p
    -e LANG=C.UTF-8 指定mysql容器默认的编码格式,默认的编码格式会导致进入容器后中文无法复制粘贴的问题。同时和springboot使用中会出现即使设置了编码为utf-8但仍然乱码的现象。

    docker run -it -d --name mysql8x \
    --privileged=true \
    --restart always \
    -p 3306:3306 \
    -v /opt/mount/mysql8/log:/var/log/mysql \
    -v /opt/mount/mysql8/data:/var/lib/mysql \
    -v /opt/mount/mysql8/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=root123 \
    -e TZ=Asia/Shanghai mysql:8.0.21 \
    -e LANG=C.UTF-8 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
     1. -v挂载
       -v挂载容器目录到物理机;
       
     2. -e运行参数
    -e 设置运行参数默认root账号密码为root123,时区为上海
     3. 其他参数
     -e LANG="C.UTF-8"指定容器默认的编码格式,不然会出现中文无法复制粘贴的问题。
    后面两个参数为设置数据库默认字符集和排序字符集。用于支持汉语,避免客户端汉字乱码。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、进入mysql容器

    docker exec -it mysql8x bash 
    若中文乱码可临时使用下面命令 
    docker exec -it mysql8x env LANG=C.UTF-8 bash
    
    • 1
    • 2
    • 3

    4、登录mysql需要输入用户root和密码

    mysql -uroot -p

    5、授权远程登录:执行后可navicat连接,一般是授权给新建的用户

    ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘root123’;
    flush privileges;

    6、新建用户

    新建用户admin,密码admin@123
    CREATE USER ‘admin’@‘%’ IDENTIFIED BY ‘admin@123’;
    授权admin用户所有数据库权限
    GRANT ALL ON . TO ‘admin’@‘%’ WITH GRANT OPTION;

    授予新用户远程登录权限
    ALTER USER ‘admin’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘admin@123’;

    7、修改dns避免一直扫描:IP address ‘xxxx‘ could not be resolved: Name or service not known
    进入/etc/mysql 找到mysql的配置文件my.cnf(linux环境下)或者my.ini(windows环境下)进行编辑加入如下一行即可:

    [mysqld]
    skip-name-resolve

    8、更改加密方式,避免远程navicat连接加密失败(若第5步执行后无法连接时再执行此)
    如果用Navicat连接的回报不支持caching_sha2_password验证方式的错误。

    ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘root123’ PASSWORD EXPIRE NEVER;

    9、root密码永不过期修改

    alter user ‘root’@‘localhost’ password expire never;
    10、刷新数据库,前面所有的修改只有刷新后才生效
    FLUSH PRIVILEGES;

    6.2 mysql数据库定时备份及数据恢复

    使用mysqldump进行数据库的备份,保证数据安全,以防万一。
    1、备份脚本vim backup.sh

    #!/bin/bash
    
    #保存备份个数,备份10天数据
    number=10
    #备份保存路径
    backup_dir=/opt/mount/mysql8/backup
    #日期
    dd=`date +%Y-%m-%d-%H-%M-%S`
    #备份工具
    tool=mysqldump
    
    #mysql容器名
    name=mysql8
    #用户名
    username=root
    #密码
    password=root123
    #将要备份的数据库,为所有的数据库,也可以指定具体的数据库名称,多个用空格隔开即可
    database_name=--all-databases 
    
    #2、如果备份文件夹不存在则创建
    if [ ! -d $backup_dir ];
    then     
        mkdir -p $backup_dir;
    fi
    
    #非docker备份写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
    #$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
    
    #docker 容器中备份
    sudo docker exec ${name} sh -c 'exec mysqldump '$database_name' -u'$username' -p'$password'  ' > $backup_dir/$database_name-$dd.sql
    
    
    #3、写创建备份日志
    echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
    
    #4、备份文件的删除处理,找出需要删除的备份
    delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
    
    #判断现在的备份数量是否大于$number
    count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
    
    if [ $count -gt $number ]
    then
      #删除最早生成的备份,只保留number数量的备份
      rm $delfile
      #写删除文件日志
      echo "delete $delfile" >> $backup_dir/log.txt
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2、crontab中加入定时任务进行数据备份。
    crontab -e中添加定时任务:复制下行到crontab。
    crontab运行日志cat /var/log/cron.log

    #0 2 * * * /opt/mount/mysql8/backup.sh >> /opt/mount/mysql8/backup/backup_`date +\%F`.log
    
    • 1

    3、数据恢复
    数据恢复进入mysql后在客户端source你备份的指定文件即可。

    进入数据库:mysql -uroot -p
    恢复:source  文件
    
    • 1
    • 2
    6.3 问题及使用
    6.3.1 数据库被黑恢复

    数据备份恢复方案:

    • 1:自己已经进行过数据备份。
    • 2:从系统的bin_log操作日志恢复

    下面操作方案2
    若数据库没有进行备份被黑后数据也可以使用bin_log进行数据恢复。
    前提是bin_log是开启的。查询是否开启,值的on则开启

    SHOW VARIABLES LIKE ‘log_bin’;
    
    • 1

    开启后再查看多少,如果只有1/2个log文件恭喜你没办法恢复了,log也被删除了。

    若存在则查看具体操作日志:mysqlbinlog ‘name.log’ 查看其中的操作日志看dele删除是什么时候的。再进行其他操作

    6.3.2:host is blocked because of many connection …

    连接错误次数过多客户端被锁,在mysql中执行

    mysqladmin -u root -p flush-hosts        
    
    • 1

    输入密码回车后重连即可

    6.3.3:没有公网ip如何访问内网mysql

    环境:内网中部署了mysql,没有足够的公网ip,但是需要开发从外网连接mysql如何实现(navicat,java开发等连接)。

    方案:

    • 1、使用nginx的stream 插件反向代理请求发送到mysql
      加到nginx.conf配置中(将公网ip:33060的请求代理到内网的 192.168.0.1:33060)
    stream {
        upstream mysql3306 {
            hash $remote_addr consistent;
            server 192.168.0.1:33060 weight=5 max_fails=3 fail_timeout=30s;
        }
    	
    	 server {
            listen 33060;
            proxy_connect_timeout 10s;
            proxy_timeout 200s;
            proxy_pass mysql3306;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    docker exec nginx nginx -s reload重新加载nginx配置

    • 2、使用haproxy(比nginx更适合做负载均衡和请求转发)
      在绑定公网ip的服务器上执行
    步骤1:安装docker
    步骤2:自制haproxy镜像,centos的系统可以直接拉取镜像
        1、下载network包,上传到公网服务器
        cd  目标目录
    	tar -xvf network.gz
        cd 解压后的目录
        制作docker镜像(末尾是英文状态下的句号):
         docker build -f Dockerfile -t myhaproxy:1.0 .
         
    步骤3:查看haproxy镜像id:docker images
    
    步骤4:指定要暴露的数据库集群的内网IP地址与端口。
    #数据库内网地址
    export CLUSTER_ADDR="192.168.0.1"    
    #内网数据库端口
    export CLUSTER_PORT="33039"
    
    步骤5:指定要暴露的云主机绑定的弹性公网IP地址和端口。
    #绑定云主机的弹性公网IP地址
    export EXTERNAL_IP="公网ip"
    #端口地址,建议3306;可自定义,前提需保证端口通畅,不通可参考“快速入门>云主机网络访问配置”章节排查。
    export EXTERNAL_PORT="8086"
    
     步骤6:创建并进入容器,运行代理进程。
    docker run -d -p 8086:33039  --restart=always --name myhaproxy -e CLUSTER_PORT=33039 -e CLUSTER_ADDR=192.168.0.1 8f07a8074d0a
    
    步骤7:连接测试
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    对于步骤4-5仅定义临时变量,为了优化生产建议永久变量,可以经其加入到/etc/profile中
    vim /etc/profile

    export CLUSTER_ADDR="your mysql addr"
    export CLUSTER_PORT="your mysql port"
    export EXTERNAL_IP="your external ip"
    export EXTERNAL_PORT="your external port"
    
    • 1
    • 2
    • 3
    • 4

    source /etc/profile

    7:docker 安装clickhouse数据库并使用

    8:docker 安装sqlserver数据库并使用

    问题1:Navicat连接SQLServer提示:未发现数据源名并且未指定默认驱动程序
    解决https://blog.51cto.com/BADAOLIUMANGQZ/6116684

    9:docker安装redis

    1、创建挂载目录
    mkdir -p /opt/mount/redis

    mkdir [conf,log,data]

    创建日志文件并赋权
    cd /opt/mount/redis/log
    touch data/redis.log
    chmod 777 data/redis.log

    2、拉取镜像docker pull redis:6.0.6
    3、获取redis.conf配置文件。docker默认是没有的,需要自己从官网下载同版本的配置文件。
    修改其中的属性

    #数据持久化的配置
    appendonly yes
    #日志文件配置,默认是空的
    logfile “/data/redis.log”
    #注释掉,允许其他ip访问
    #bind 127.0.0.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、创建并启动容器
    –requirepass “adsafas” 为redis设置密码。
    –restart=always 保证重启
    –privileged=true 给redis相关的操作权限

    -v 挂载相关的数据配置日志目录
    不设置密码在云服务器上非常容易被网络攻击。攻击后会导致redis数据库中数据被清空等现象。

    docker run --name redis -p 6379:6379 \
    --restart=always \
    -v /opt/mount/redis/data/redis:/data \
    -v /opt/mount/redis/conf/redis.conf:/etc/redis/redis.conf  \
    -v /etc/localtime:/etc/localtime \
    -v /opt/mount/redis/log/redis.log:/data/redis.log --privileged=true -d redis:latest \
     redis-server /etc/redis/redis.conf --requirepass "adsafas"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Spring之Bean的自动装配
    7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位
    Vue学习笔记(2) 使用介绍
    多媒体透明屏,在户外广告领域中,有哪些应用展示?
    7.手机的工作频段
    MySQL5.7主从同步
    OSI七层模型和TCP/IP五层模型
    AIGC革新,将文字或者LOGO融入AI视频基于PIKA-labs(Python3.10)
    Cesium学习一:开发环境搭建
    EtherNet/IP转profienrt协议网关连接EtherNet/IP协议的川崎机器人配置方法
  • 原文地址:https://blog.csdn.net/weixin_43930865/article/details/132669213