云原生之使用Docker部署mysql数据库教程
IDC服务
云原生之使用Docker部署mysql数据库教程
2025-04-14 00:02
? 部署前准备 安装Docker 在Linux系统(以Ubuntu为例)中,执行以下命令安装Docker:
? 部署前准备
安装Docker
在Linux系统(以Ubuntu为例)中,执行以下命令安装Docker:sudo apt-get update && sudo apt-get install docker.io -y
验证安装:
docker --version
安装Docker Compose
下载最新版本的Docker Compose:sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
验证版本:
docker-compose --version
? 部署MySQL服务
方式一:单实例快速部署
拉取官方镜像
docker pull mysql:latest
运行容器
docker run -d \ --name mysql-server \ -p 3306:3306 \ # 映射MySQL端口 -v /your/data/path:/var/lib/mysql \ # 指定数据存储目录(必须持久化) -e MYSQL_ROOT_PASSWORD=your_root_password \ # 设置root密码 -e MYSQL_DATABASE=your_database \ # 可选:初始化数据库 -e MYSQL_USER=your_user \ # 可选:创建用户 -e MYSQL_PASSWORD=your_password \ # 可选:用户密码 mysql:latest
- 替换
/your/data/path
为实际路径(如/opt/mysql/data
)。- 注意:若未挂载卷,数据将在容器删除后丢失。
方式二:Docker Compose部署(推荐)
创建
docker-compose.yml
文件:version: '3' services: mysql: image: mysql:latest ports: - "3306:3306" volumes: - ./data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: your_database MYSQL_USER: your_user MYSQL_PASSWORD: your_password restart: always
启动服务:
docker-compose up -d
? 验证部署
访问MySQL
- 本地连接:
输入密码后进入MySQL命令行。docker exec -it mysql-server mysql -uroot -p
- 远程连接:
确保防火墙开放3306端口,并通过客户端工具(如MySQL Workbench)连接:Host: 服务器IPPort: 3306User: root(或其他用户)Password: your_root_password
检查数据持久化
停止并删除容器后,数据仍保留在./data
目录中,重启容器可恢复服务。
?️ 高级配置
1. 配置MySQL参数
通过挂载配置文件自定义MySQL行为:
volumes: - ./my.cnf:/etc/mysql/conf.d/my.cnf
创建
my.cnf
文件:[mysqld] max_connections = 200 innodb_buffer_pool_size = 1G
2. 主从复制(Master-Slave)
创建
docker-compose.yml
:version: '3' services: master: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: master_password MYSQL_DATABASE: testdb volumes: - ./master_data:/var/lib/mysql ports: - "3306:3306" slave: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: slave_password MYSQL_REPLICATION_USER: repl MYSQL_REPLICATION_PASSWORD: repl_password volumes: - ./slave_data:/var/lib/mysql ports: - "3307:3306" depends_on: - master
在
master
容器中配置主从同步:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; # 记录File和Position CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
在
slave
容器中执行:CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='记录的File', MASTER_LOG_POS=记录的Position; START SLAVE;
? 安全加固
限制远程访问
修改MySQL配置文件my.cnf
:[mysqld] bind-address = 0.0.0.0 # 默认允许所有IP,建议指定具体IP
通过防火墙限制端口访问(如仅允许特定IP访问3306端口)。
启用SSL加密
在my.cnf
中添加:[mysqld] ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem
挂载证书文件到容器内。
⚠️ 常见问题与注意事项
端口冲突
若提示端口被占用,修改docker-compose.yml
中的端口映射(如- "3307:3306"
)。数据目录权限
确保挂载目录有读写权限:sudo chmod -R 777 /your/data/path
日志查看
docker logs -f mysql-server
远程连接失败
检查MySQL用户是否有%
权限(允许远程访问),并确保防火墙未拦截3306端口。
? 总结
通过Docker部署MySQL,可快速搭建轻量级数据库服务,适用于开发测试或小型生产环境。对于高并发或高可用场景,建议采用主从复制或多节点集群,并结合持久化存储方案(如NFS或云存储)。部署后需严格管理访问权限,定期备份数据,确保系统安全与稳定性。
標簽:
- Docker
- mysql