腾讯云 Docker 安装部署 MySQL 并提供外网连接

目录

一、Docker安装MySQL

1. 准备自定义目录

2. 创建自定义配置文件 

3. 部署 MySQL 容器

4. 验证 MySQL 部署

5. 创建初始化脚本(可选)

6. 备份和恢复(重要)

7. MySQL 容器管理命令

8. 性能监控(可选)

9. 安全注意事项

二、MySQL 对外提供连接

1. 确认 Docker MySQL 容器配置

2. 配置 MySQL 允许远程访问

3. K3s 节点防火墙配置

4. 腾讯云安全组配置

5. K3s 特定配置考虑点

6. 获取连接信息

7. 本地可视化工具连接


一、Docker安装MySQL

1. 准备自定义目录

        命令如下:

# 创建主目录
sudo mkdir -p /data/mysql

# 创建子目录结构
sudo mkdir -p /data/mysql/data      # 数据文件
sudo mkdir -p /data/mysql/conf      # 配置文件
sudo mkdir -p /data/mysql/logs      # 日志文件
sudo mkdir -p /data/mysql/initdb.d  # 初始化脚本

# 设置适当的权限(MySQL 在容器中通常以 mysql 用户运行,UID 为 999)
sudo chown -R 999:999 /data/mysql

        效果图如下:

2. 创建自定义配置文件 

         命令如下:

sudo tee /data/mysql/conf/my.cnf > /dev/null <<EOF
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-time-zone = '+8:00'

# 性能优化参数
innodb_buffer_pool_size = 256M
max_connections = 200
key_buffer_size = 32M
thread_cache_size = 16

# 日志配置
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow-query.log
long_query_time = 2

# 安全设置
max_allowed_packet = 16M

[client]
default-character-set = utf8mb4
EOF

        效果图如下:

3. 部署 MySQL 容器

        命令如下(请确保将示例中的密码和用户名替换为您自己的强密码和用户名):

# 拉取 MySQL 镜像(以 8.0 版本为例)
docker pull mysql:8.0

# 运行 MySQL 容器
docker run -d \
  --name mysql \
  --restart=always \
  -p 3306:3306 \
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf:ro \
  -v /data/mysql/logs:/var/log/mysql \
  -v /data/mysql/initdb.d:/docker-entrypoint-initdb.d \
  -e MYSQL_ROOT_PASSWORD=your_strong_password \
  -e MYSQL_DATABASE=your_db_name \
  -e MYSQL_USER=your_user \
  -e MYSQL_PASSWORD=your_password \
  mysql:8.0

重要凭据参数解释

  1. MYSQL_ROOT_PASSWORD:

    • 设置 MySQL root 用户的密码
    • 这是必需的参数,容器不会成功启动除非设置了此项
  2. MYSQL_DATABASE:

    • 可选参数
    • 容器首次启动时会自动创建的数据库名称
  3. MYSQL_USERMYSQL_PASSWORD:

    • 可选参数,但必须一起使用
    • 创建一个新的非 root 用户
    • 此用户将获得 MYSQL_DATABASE 数据库的完全权限

        效果图如下:

4. 验证 MySQL 部署

        命令如下:

# 查看容器状态
docker ps -a | grep mysql

# 检查容器日志
docker logs mysql

# 连接到 MySQL 服务器
docker exec -it mysql mysql -uroot -p

        效果图如下: 

5. 创建初始化脚本(可选)

        如果要在容器首次启动时执行 SQL 脚本,创建一个初始化脚本:

sudo tee /data/mysql/initdb.d/init.sql > /dev/null <<EOF
CREATE DATABASE IF NOT EXISTS app_db;
USE app_db;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(100) NOT NULL,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com');
EOF

6. 备份和恢复(重要)

        设置定期备份:

# 创建备份脚本
sudo tee /data/mysql/backup.sh > /dev/null <<EOF
#!/bin/bash
TIMESTAMP=\$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="/data/mysql/backups"
mkdir -p \$BACKUP_DIR

# 使用 Docker 执行 mysqldump
docker exec mysql sh -c 'exec mysqldump -uroot -p"\$MYSQL_ROOT_PASSWORD" --all-databases' > \$BACKUP_DIR/all_databases_\$TIMESTAMP.sql

# 保留最近30天的备份
find \$BACKUP_DIR -name "*.sql" -type f -mtime +30 -delete
EOF

# 添加执行权限
sudo chmod +x /data/mysql/backup.sh

# 添加到 crontab 每天执行
(crontab -l 2>/dev/null; echo "0 3 * * * /data/mysql/backup.sh") | crontab -

        效果图如下:

7. MySQL 容器管理命令

        命令如下:

# 停止 MySQL 容器
docker stop mysql

# 启动 MySQL 容器
docker start mysql

# 重启 MySQL 容器
docker restart mysql

# 删除 MySQL 容器(数据不会丢失,因为存储在主机目录)
docker rm -f mysql

8. 性能监控(可选)

# 监控 MySQL 容器资源使用情况
docker stats mysql

# 查看 MySQL 状态变量
docker exec -it mysql mysql -uroot -p -e "SHOW GLOBAL STATUS;"

# 查看进程列表
docker exec -it mysql mysql -uroot -p -e "SHOW PROCESSLIST;"

9. 安全注意事项

  • 请使用强密码,并避免在代码或脚本中硬编码密码
  • 考虑配置 MySQL 仅监听本地地址,或使用 Docker 网络隔离
  • 定期更新 MySQL 镜像以获取安全补丁:docker pull mysql:8.0 && docker restart mysql
  • 限制容器资源使用,如 --memory=1g --memory-swap=1g --cpus=1

您现在已经成功使用 Docker 在自定义目录中部署了 MySQL。这种方式确保了数据持久性和可迁移性。

二、MySQL 对外提供连接

1. 确认 Docker MySQL 容器配置

        首先,确保您的 MySQL Docker 容器已经正确配置为允许远程连接:

# 如果尚未部署 MySQL 容器,使用以下命令部署
docker run -d \
  --name mysql \
  --restart=always \
  -p 3306:3306 \  # 关键:将 MySQL 端口映射到主机
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf:ro \
  -e MYSQL_ROOT_PASSWORD=your_strong_password \
  -e MYSQL_DATABASE=your_db_name \
  -e MYSQL_USER=remote_user \
  -e MYSQL_PASSWORD=remote_password \
  mysql:8.0

# 如果已经部署,但未映射端口,需要重新创建容器并加上端口映射

2. 配置 MySQL 允许远程访问

        确保 MySQL 配置允许远程访问,命令如下(remote_user和remote_password可替换):

# 进入 MySQL 容器
docker exec -it mysql bash

# 登录 MySQL
mysql -u root -p

# 创建可远程访问的用户账号
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'strong_remote_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
# 或限制权限到特定数据库
# GRANT ALL PRIVILEGES ON specific_db.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;
EXIT;

# 检查绑定地址(确保不是只允许127.0.0.1)
cat /etc/mysql/my.cnf | grep bind-address

        效果图如下:

        ​​​​如果绑定地址设置为 127.0.0.1,则需要修改 my.cnf 文件:

# 编辑 MySQL 配置
docker stop mysql
nano /data/mysql/conf/my.cnf

# 允许从任何IP地址连接 将 bind-address = 127.0.0.1 修改为:
bind-address = 0.0.0.0

# 重启 MySQL 容器
docker start mysql

        nano操作指南如下:

nano编辑器保存和退出操作指南
在nano编辑器中工作完成后,保存并退出的操作如下:

保存文件
按下 Ctrl + O (字母O) 组合键
底部会显示文件名,可以确认或修改文件名
按下 Enter 键确认保存
退出nano
按下 Ctrl + X 组合键
如果文件已修改但未保存,会提示是否保存
输入 Y (Yes) 保存并退出
输入 N (No) 不保存直接退出
按 Ctrl + C 取消退出操作,继续编辑
常用快捷键提示
nano编辑器在底部显示一些常用快捷键,其中:

^G 表示 Ctrl + G:显示帮助
^O 表示 Ctrl + O:保存文件
^X 表示 Ctrl + X:退出编辑器
提示
nano编辑器中的 ^ 符号代表 Ctrl 键,所以当你看到 ^X 时,意思是按住 Ctrl 键同时按 X 键。

        效果图如下:

3. K3s 节点防火墙配置

        确保 K3s 节点的防火墙允许 3306 端口:

# 检查当前防火墙状态
sudo ufw status

# 如果启用了 ufw,则添加规则
sudo ufw allow 3306/tcp
sudo ufw reload

# 如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

# 验证端口是否开放
sudo netstat -tulpn | grep 3306

        效果图如下: 

4. 腾讯云安全组配置

        在腾讯云控制台配置安全组规则:

  1. 登录腾讯云控制台
  2. 导航到 安全组 配置页面
  3. 找到与您的 K3s 节点关联的安全组
  4. 添加入站规则:”协议: TCP;端口: 3306;来源: 您的本地 IP (建议)或 0.0.0.0/0 (不建议)“

5. K3s 特定配置考虑点

        K3s 默认可能会干扰 Docker 网络配置,确保它们能够协同工作:

# 检查 Docker 容器是否正常运行和映射
docker ps | grep mysql

        效果图如下:

6. 获取连接信息

        获取用于连接的公共 IP 地址:

# 查看腾讯云 K3s 节点的公网 IP
curl -s ifconfig.me
# 或
wget -qO- icanhazip.com

7. 本地可视化工具连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值