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

完毕后重启程序

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. -v挂载
   -v挂载容器目录到物理机;
   
 2. -e运行参数
-e 设置运行参数默认root账号密码为root123,时区为上海
 3. 其他参数
 -e LANG="C.UTF-8"指定容器默认的编码格式,不然会出现中文无法复制粘贴的问题。
后面两个参数为设置数据库默认字符集和排序字符集。用于支持汉语,避免客户端汉字乱码。

3、进入mysql容器

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

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

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

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

进入数据库:mysql -uroot -p
恢复:source  /path/file
6.3 问题及使用
6.3.1 数据库被黑恢复

数据备份恢复方案:

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

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

SHOW VARIABLES LIKE ‘log_bin’;

开启后再查看多少,如果只有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        

输入密码回车后重连即可

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;
    }
}

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:连接测试

对于步骤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"

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

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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值