基于docker部署mysql并远程连接

单独为mysql开启一个docker空间代替在服务器中直接安装mysql可以避免服务器mysql版本固定带来的项目mysql版本不同的问题,而且在需要在服务器使用另一个版本的mysql时可以再建一个docker存放mysql,可以实现多个不同版本的mysql数据库共存于一个服务器中且互不影响,不过需要注意备份docker中的mysql数据到服务器中

一、基于mysql创建docker并启动

1、docker搜索mysql5.7镜像并拉取(注意mysql版本问题,下载对应版本,比如mysql:8.0)

docker search mysql:5.7
docker pull mysql:5.7

2、docker拉取mysql成功后查看docker拉取的所有镜像确保mysql镜像拉取成功

# 查看docker拉取的所有镜像
docker images

3、基于拉取的mysql镜像启动一个mysql5.7的docker容器(注意要在服务器安全组开启3306端口号)

# -p 3306:3306:端口映射,格式为主机(宿主)端口:容器端口
# --name mysql:创建的容器名称
# --restart=always:总是跟随docker启动(报错自动重启)
# --privileged=true:获取宿主机root权限
# -e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
# -d mysql:latest:开启Daemon守护进程后台运行mysql容器,版本是5.7(8.0)
    
# 注意将docker容器中的数据库数据备份到服务器主机中,避免重启docker数据丢失(容器数据会实时备份到主机目录中,可以防止容器重启数据丢失)(1.重启mysql容器不会对主机存储的数据文件产生影响;2.重新执行下面的创建mysql容器的命令也不会对主机数据产生影响,相反主机存储的上一个mysql容器的数据文件会拷贝到新容器中的mysql中,以此实现数据的持久化):
# -v /usr/local/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
# -v /usr/local/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
# -v /usr/local/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
# -v /etc/localtime:/etc/localtime:ro:让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
    
docker run -p 3306:3306 --name mysql --privileged=true \
-v /mysqldata/mysql/log:/var/log/mysql \
-v /mysqldata/mysql/data:/var/lib/mysql \
-v /mysqldata/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

4、查看docker容器是否启动成功

# 查看所有启动的docker容器
docker ps

至此mysql的docker启动成功,navicat可以通过服务器ip地址+mysql密码连接服务器上启动的mysql

二、navicat连接mysql并导入sql文件

navicat连接mysql并导入sql文件步骤:

(1)点击连接通过服务器ip地址及上面设置的mysql密码连接服务器mysql

(2)在连接成功的mysql中新建一个数据库

(3)右击新建的数据库中的表,点击运行sql文件,选择本地的sql文件并运行

至此navicat就连接好了远程的mysql并导入了sql文件,现在navicat对连接的mysql的改动都会同步到服务器中的mysql(双向的,服务器的mysql改动也会在navicat中显示)

三、测试

1、服务器进入启动mysql的docker容器

docker exec -it mysql /bin/bash

2、进入docker后进入mysql

mysql -u root -p
输入密码123456

3、测试修改mysql中的数据库的表数据

# 查看所有数据库
show databases;
# 使用xmll数据库
use xmll;
# 修改xmll数据库的user表的tel数据
update user set tel='123' where id=2;

4、刷新navicat会发现服务器mysql的修改已经同步到navicat上面了,同样的navicat上修改也会同步到服务器的mysql

node连接远程数据库

const mysql = require('mysql')
const connection = mysql.createConnection({
    // 数据库ip地址
    host: '',
    // 用户名默认是root
    user: '',
    // 数据库密码
    password: "",
    // 端口号默认都是3306
    port: "3306",
    // 连接的数据库名
    database: ""
})
    
connection.connect()

补充:避免mysql数据库被脚本批量攻击

服务器中的mysql数据库初始密码及端口很简单,很容易被攻击删库,所以最简单的预防方式就是修改mysql访问端口以及root用户名及密码

1、修改docker访问mysql端口映射(创建mysql容器)–3306变为3307访问

docker run -p 3307:3306 --name mysql --privileged=true \
-v /mysqldata/mysql/log:/var/log/mysql \
-v /mysqldata/mysql/data:/var/lib/mysql \
-v /mysqldata/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

2、修改root用户名及密码

# 进入mysql容器
docker exec -it mysql /bin/bash
# 登录mysql--输入密码123456
mysql -u root -p     
# 使用mysql数据库
use mysql;     
# 查询当前数据库所有用户及权限
select host,user,plugin,authentication_string from mysql.user;
# 将root用户设置为所有ip可访问(远程登录)--解决1130问题
update user set Host='%' where User='root';  
# 修改用户user为root,host为% 的密码为xxxx  --1、解决1251问题2、防止数据库被批量攻击
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxx'; 
# 修改root用户名为haixtx--防止数据库被批量攻击
update user set user="haixtx" where user="root";    
# 刷新数据库权限
FLUSH PRIVILEGES;  
# 再次查询当前数据库所有用户及权限-查看是否修改成功
select host,user,plugin,authentication_string from mysql.user;   
# 退出mysql数据库
exit;  
# 退出mysql容器
exit   
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值