Docker部署mariadb
为什么选择Docker运行MariaDB?
MariaDB是MySQL的一个分支,兼容性好、性能稳定,很多生产环境都在用。
用Docker部署MariaDB最大的好处是环境隔离,你不用在服务器上手动装一堆依赖库,也不会跟已有MySQL版本冲突。
一条命令就能启动一个干净的数据库实例,换版本升级也很方便。
准备工作:检查Docker环境
开始前确保你的服务器上已经安装了Docker。
如果还没装,可以用下面命令快速安装(适用于CentOS 7/8、Ubuntu 20.04以上):
curl -fsSL https://get.docker.com | bash
sudo systemctl start docker
sudo systemctl enable docker
装好后验证一下:
docker --version
出现版本号就说明环境就绪。
如果你的服务器已经装了宝塔面板,也可以在宝塔的“软件商店”里搜“Docker”一键安装,操作更直观。
核心步骤:拉取镜像与创建容器
1. 拉取MariaDB镜像
docker pull mariadb:10.11
这里指定了10.11版本,这是LTS长期支持版,比较稳。
你也可以拉latest,但建议用具体版本号,避免后续升级不兼容。
2. 创建数据持久化目录
Docker容器默认是临时存储,容器一删数据就没了。
所以一定要把数据库文件映射到宿主机目录:
mkdir -p /data/mariadb/data
3. 运行容器
docker run -d \
--name my-mariadb \
-e MARIADB_ROOT_PASSWORD=YourStrongPassword \
-v /data/mariadb/data:/var/lib/mysql \
-p 3306:3306 \
mariadb:10.11
参数解释:
-d:后台运行--name:容器名,可以自己改-e MARIADB_ROOT_PASSWORD:设置root密码,把YourStrongPassword换成你自己的(建议含大小写+数字+特殊字符)-v:映射数据目录,左边是宿主机路径,右边是容器内路径-p:端口映射,左边是宿主机端口,右边是容器内端口。如果宿主机3306已被占用,可以改成3307:3306
执行后可以用docker ps查看容器状态,看到Up就代表启动成功。
避坑指南:常见问题与解决方法
问题1:端口被占用
启动时提示port is already allocated,说明宿主机3306端口已被其他程序占用。可以换个端口映射,比如-p 3307:3306,后面连接数据库时端口也改成3307。
问题2:容器启动后马上退出
用docker logs my-mariadb查看日志。最常见原因是权限问题:宿主机数据目录的权限不足。解决方法:
chown -R 1001:1001 /data/mariadb/data
然后重启容器。
问题3:root密码设置不生效
一定要用MARIADB_ROOT_PASSWORD这个变量名(注意拼写),不要写成MYSQL_ROOT_PASSWORD。如果你用过旧版镜像,环境变量名称有变化,建议参考官方文档。
问题4:远程连接不上
如果你需要从其他机器连接这个数据库,除了端口映射正确外,还要检查宿主机防火墙是否放行了对应端口。比如用宝塔面板,进入“安全” -> “添加端口规则”,放行3306或你自定义的端口。另外,默认root只允许本地登录,可以进入容器后修改权限,但生产环境不建议直接开放root远程,建议新建一个专用用户。
验证与日常管理
验证数据库是否正常工作
在服务器上执行:
docker exec -it my-mariadb mariadb -u root -p
输入刚才设置的密码,如果能进入MariaDB命令行(显示MariaDB [(none)]>),就说明部署成功。
你可以试试:
SHOW DATABASES;
会看到默认的几个数据库。
日常管理小命令
- 重启容器:
docker restart my-mariadb - 查看日志:
docker logs -f my-mariadb - 停止容器:
docker stop my-mariadb - 重新启动:
docker start my-mariadb - 备份数据库:
docker exec my-mariadb mysqldump -u root -p --all-databases > /data/backup.sql
升级版本
先拉取新版本镜像,然后停止旧容器,用新镜像创建一个新容器,并把数据目录指向同一个宿主机路径即可。
注意检查版本间的兼容性,建议先测试再升级。
如果你正在处理Docker部署mariadb,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。